Я прочитал пару похожих вопросов, особенно этот о imp.load_module
a>, что кажется близким к тому, что я хочу, но я не могу понять, почему я все еще получаю ImportErrors. Вот моя иерархия папок:
program\
__init__.py
main.py
thirdparty\
__init__.py
css\
__init__.py
css.py
utils\
__init__.py
http.py
В main.py
у меня есть следующий код. Это предназначено для поиска в каталоге thirdparty\
и загрузки каждого найденного модуля. Каждый модуль находится в своем отдельном каталоге.
import os
import imp
for root, dirs, files in os.walk("thirdparty"):
for source in (s for s in files if s.endswith(".py")):
name = os.path.splitext(os.path.basename(source))[0]
m = imp.load_module(name, *imp.find_module(name, [root]))
Проблема в том, что css.py
использует свою собственную подпапку, из которой он загружает данные, utils
. В нем есть строчка, в которой говорится:
from utils import http
И вот тут он терпит неудачу. Я получаю эту ошибку, когда запускаю main.py.
Traceback (most recent call last):
File "main.py", line 7, in <module>
m = imp.load_module(name, *imp.find_module(name, [root]))
File "thirdparty/css/css.py", line 1, in <module>
from utils import http
ImportError: No module named utils
Я в тупике. css.py
находится в своей собственной папке, и когда я запускаю css.py
отдельно, он отлично импортирует utils
. Чем это вызвано?