У меня есть приложение Python, который имеет следующую структуру каталогов:питона импорт пути столкновение
/home/vagrant/app
/home/vagrant/app/support
/home/vagrant/app/utils (1)
/home/vagrant/app/examples/example_a
/home/vagrant/app/examples/utils (2)
Я добавил/дом/бродячий/приложение к моей PYTHONPATH и всем папкам имеют __init__.py
файлов.
Я пытаюсь запустить приложение, вызвав /home/vagrant/app$ python ./example/example_a/ex_a.py
Он выходит с TRACEBACK:
File "./examples/example_a/ex_a.py", line 14, in <module> (3)
from support.sp1.py import *
File "/home/vagrant/app/support/sp1.py", line 11, in <module> (4)
from utils.mod_a import *
ImportError: No module named mod_a
модуль с именем mod_a.py присутствует в ~/app/utils
но не ~/app/examples/utils
.
Я попытался переименовать ~/app/examples/utils
в ~/app/examples/utils-ex
. Это решает эту проблему, но другие вещи, которые полагаются на «/ home/vagrant/app/examples/utils», нарушены.
Есть ли способ заставить интерпретатор python искать utils (1), а не utils (2)? Файл (3) имеет относительный путь (префикс с точкой), а файл (4) имеет абсолютный путь (с префиксом /). Я думаю, что что-то не так с моей настройкой, что делает интерпретатор в папке приложений/примеров перед приложением /. Мой путь запуска находится в пути app/examples/example_a, но sp1.py - нет.
Конечно, было бы проще не иметь utils и examples/utils, но это не мой код, и я не хочу его переписывать.
Мне нравится идея, но, к сожалению, не получилось - потому что код зависит от относительных путей в ex_a.py. То, что мне было нужно, было относительно ex_a.py и абсолютным в sp1.py. – Terry