#python #path #python-import
#python #путь #python-импорт
Вопрос:
Структура каталогов выглядит следующим образом:
moduleImportTest
|____ main.py
|____ test
|___ mymod.py
Я пытаюсь использовать importlib
для импорта mymod.py от main.py . На данный момент, main.py выглядит примерно так:
import importlib, os
theFile = os.path.dirname(os.path.abspath(__file__)) "/test/mymod.py"
print(theFile)
importlib.import_module(theFile)
print
Оператор в строке 3 выводит правильный путь к файлу (хотя в этом примере я заменил свое настоящее имя на «имя пользователя»:)
/home/username/moduleImportTest/test/mymod.py
Однако строка 4 выдает исключение:
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named '/home/username/moduleImportTest/test/mymod'
Я не могу понять, что является причиной этого. Я действительно в недоумении, что попробовать.
Большая часть онлайн-информации об этом предполагает, что вместо того, чтобы передавать путь напрямую importlib
, я должен сначала добавить соответствующий каталог в путь, используя sys
, а затем использовать обычную инструкцию import для обычного импорта модуля. Причина, по которой я не хочу использовать этот подход, заключается в том, что в будущем я хочу иметь возможность перебирать определенный каталог и импортировать туда все модули, независимо от имени.
Есть идеи, как я могу это решить? Я открыт для того, чтобы попробовать что-то совершенно отличное от того, что я делаю, но только в том случае, если он поддерживает возможность перебора и импорта всего, как описано выше.