Python 3.6 - модуль importlib, как программно импортировать все файлы? - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблема с программным импортом всех файлов python в текущем каталоге и всех подкаталогов дерева. Единственная проблема в том, что я (по любой причине) не могу импортировать файлы в подкаталогах, не вызывая ошибку импорта, что из моих исследований очень распространено. Вот код:

#import importlib.util as importutil
import os, sys
print("Import handler loaded! Please run a function....")
filelist = []
cwd = str(os.getcwd())

def get_py_files():
    print("Loading from: " + str(cwd))
    for path, subdirs, files in os.walk(cwd):
        #print(path, files)
        for name in files:
            if not "importhandler" in name and name.endswith(".py"):
                filelist.append([path.replace("\\", "/").split("/")[-1], name])
    print("File scanning complete!")
    #print(filelist, sep='\n')

def import_files():
    for path, file in filelist:
        importlib.__import__(file)
        #importlib.import_module(path)





get_py_files()
import_files()

Итак, вывод:

Import handler loaded! Please run a function....
Loading from: D:\P\PYTHON PROJECTS\Space to Race\events
File scanning complete!
Traceback (most recent call last):
  File "D:\P\PYTHON PROJECTS\Space to Race\events\importhandler.py", line 28, in <module>
    import_files()
  File "D:\P\PYTHON PROJECTS\Space to Race\events\importhandler.py", line 20, in import_files
    importlib.__import__(file)
  File "<frozen importlib._bootstrap>", line 1059, in __import__
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 936, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 948, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'fileinfolder'

Я понятия не имею, как решить эту проблему, несмотря на поиск возможных вариантов, но ни один из них не работаетправильно. Я проконсультировался: Как импортировать модуль с указанием полного пути? * В частности, , и он чем-то похож, но решение дает ошибку в моей системе (v. 3.6.1). Вот моя файловая система (все файлы py пусты, за исключением обработчика импорта): Главный каталог: D: \ P \ PYTHON PROJECTS \ Space to Race \ events

..\importhandler.py
..\testp.pya
..\eventsmainscope\
..\pytest\subdir1\
..\pytest\folderintest\__init__.py
..\pytest\folderintest\fileinfolderintest.py
..\pytest\fileinfolder.py
..\pytest\newpytestfile.py
..\pytest\notanewfile.pya

Надеюсь, эта информация поможет в любомОтветы вы, ребята, можете дать мне. Я вставил файлы, не относящиеся к python, чтобы проверить мой алгоритм фильтрации, и это, кажется, работает нормально, поэтому, похоже, это вызвано фактическим процессом импорта файлов py. Спасибо за любую помощь!

...