我有一个具有以下目录结构的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)
我添加的/ home /流浪者/应用到我的PYTHONPATH和所有的文件夹都__init__.py
文件。
我试图通过调用/home/vagrant/app$ python ./example/example_a/ex_a.py
它退出了回溯运行应用程序:命名mod_a.py
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
模块存在于~/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 /之前查看app/examples文件夹。我的启动路径位于app/examples/example_a路径中,但sp1.py不是。
当然,最简单的方法是不使用utils和examples/utils,但这不是我的代码,我厌恶重写它。
我喜欢这个主意,但是,不幸的是没有工作 - 因为代码依赖于ex_a.py相对路径。我需要的是在ex_a.py中是相对的,在sp1.py中是绝对的。 – Terry