【发布时间】:2017-08-02 09:29:48
【问题描述】:
例如,我有一个名为myproject 的项目。在myproject 目录中。有other 子目录和main.py。而在other子目录下,有a.py和b.py。
a.py中的内容是
import b
main.py中的内容是:
from other.a import *
这里有一个问题,在main.py中,当我使用from other.a import *时,a.py的内容包含在main.py中,会报错,因为b.py在other中,所以在main.py中使用import b是错误的,我们应该使用import other.b,但是a.py需要import b,所以是矛盾的。我该如何解决?
【问题讨论】:
-
@MartinAlonso 您链接的问题与此问题非常不同。
-
你不应该在包中使用相对导入。在 Python 3 中,它们不起作用,而在 Python 2 中,它们已被弃用。所以在
a.py你需要做from . import b或import other.b。 -
并且不要与
sys.path混淆,正如另一个问题中所建议的那样。它有时对测试和特殊情况很有帮助,但一般来说,最好将sys.path的管理留给分发实用程序。 -
@Gauss 如果
a.py是包的一部分,它不能直接运行。这是故意的。包中的模块应该提供函数和类供程序的其他部分使用,但它们在导入时不应该有副作用。在某些情况下,使模块可直接运行很有用,但您需要使用python -m other.a运行它。但是,这是针对特殊情况的高级方法。
标签: python python-3.x