我有以下目录结构:
test1/
test1/a.py
test1/test2/b.py
b.py需要在a.py中导入一个类。所以我可以在导入。
之前将以下行添加到b.py.sys.path.append(os.path.dirname(sys.argv [0])+“/..")
这有效,我可以从任何目录调用b.py,并且可以导入。 但是当我在另一个目录中编写脚本以使用execfile()调用此文件时,这会失败。
我尝试了相对导入,但是我得到了“非包装错误中尝试相对导入”
from ..a import someclass as cls
我在test1,test2
中都有__init__.py
有人知道如何让它发挥作用吗?
PYTHONPATH
是可行的吗?
答案 0 :(得分:1)
问题是execfile
会将您调用的文件评估为纯Python代码。 b.py
内的每个相对import语句(以及由它导入的任何包模块)都必须保持对您的调用脚本的真实性。
一种解决方案是不在包中使用任何相对导入路径。确保您的PYTHONPATH上还有test1
包。
<强> b.py 强>
from test1 import a
在您的PYTHONPATH中test1
,a
execfile
>>> import sys
>>> sys.path.append('/path/to/parent/of_test1')
>>> execfile('/path/to/parent/of_test1/test1/test2/b.py')