Я прочитал пару похожих вопросов, в частности , этот вопрос о imp.load_module
, который, кажется, близок к тому, что я хочу, но я не могу понять, почему я все еще получаю 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
. Что вызывает это?