导入从同一目录导入的模块

时间:2013-01-11 15:10:27

标签: python python-3.x

假设我的项目设置如下:

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.pyfrom myproject.module1.b import Something中解决此问题,但这在整个项目中似乎过于冗长。

有更好的方法吗?

3 个答案:

答案 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
从包的顶层

而不是直接运行它。