1

我有以下目录结构:

test1/
test1/a.py
test1/test2/b.py

b.py 需要在 a.py 中导入一个类。所以我可以在导入 a.py 之前将以下行添加到 b.py 中。

sys.path.append(os.path.dirname(sys.argv[0]) + "/..")

这有效,我可以从任何目录调用 b.py 并且它能够导入 a。但是,当我在另一个目录中编写脚本以使用 execfile() 调用此文件时,这将失败。

我尝试了相对导入,但出现“尝试在非包中导入相对导入错误”

from ..a import someclass as cls

我有__init__.py两个test1,test2

有人知道如何使它工作吗?是PYTHONPATH要走的路吗?

4

1 回答 1

1

问题是execfile它将评估您作为纯python代码调用的文件。内部的每个相对导入语句b.py(以及由它导入的任何包模块)都必须对您的调用脚本保持真实。

一种解决方案是不使用包中的任何相对导入路径。确保test1包也在你的 PYTHONPATH 上。

b.py

from test1 import a

test1您的 PYTHONPATH 中,导入a应该在您的execfile

>>> import sys
>>> sys.path.append('/path/to/parent/of_test1')
>>> execfile('/path/to/parent/of_test1/test1/test2/b.py')
于 2012-06-19T00:04:11.393 回答