假设我的项目设置如下:
myproject/
setup.py
myproject/
__init__.py
module1/
__init__.py
a.py
b.py
test/
__init__.py
test.py
在a.py
我有:
from b import Something
在test.py
我有:
from myproject.module1 import a
当我运行test.py
时,我收到ImportError
,因为找不到b
- 因为test.py位于不同的目录中。
我知道我可以通过编写a.py
在from myproject.module1.b import Something
中解决此问题,但这在整个项目中似乎过于冗长。
有更好的方法吗?
答案 0 :(得分:2)
我认为你可以使用
from .b import Something
由于这是相对的,它应该始终有效。
请参阅http://docs.python.org/3/tutorial/modules.html#intra-package-references
答案 1 :(得分:1)
from myproject.module1.b import Something
是最好的方法。它可能有点冗长,但它是明确的,这通常是Pythonic代码中的理想质量。
答案 2 :(得分:1)
您可以在a.py
中尝试relative imports,例如
from .b import Something
但这可能不是您问题的完整解决方案。与目录结构更高级别中import
个模块/包的任何模块一样,您必须小心运行它。具体来说,以python submodule.py
运行模块会隐式将模块的__name__
变量设置为"__main__"
。由于导入(相对和绝对相似)取决于__name__
和PYTHONPATH
,因此直接运行子模块可能会导致导入行为不同(或中断,如您的情况)。
尝试将tests.py
作为
python myproject/module1/test/test.py
从包的顶层 而不是直接运行它。