例如,我有一个名为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
中,会引发错误,因为{ {1}}位于b.py
,因此other
使用main.py
是错误的,我们应该使用import b
,但import other.b
需要a.py
,所以这是矛盾的。我该如何解决?
答案 0 :(得分:1)
我认为这是你的代码结构,对吗?
mypackage
other
__init__.py
a.py # import b
b.py # def func_b()
__init__.py
main.py # from other.a import *
您可以使用此代码结构:
请勿在您的可安装软件包中使用绝对导入,例如from mypackage.other import b
中的main.py
,from .other import b
中使用相对导入,例如:main.py
。
mypackage
other
__init__.py
a.py # from . import b
b.py
__init__.py
main.py # from .other.a import *
然后你可以在main.py中执行此操作:
b.func_b(...)
因为这样做,当你有一个脚本test.py
from mypackage import main
main.b.func_b()
底层它from .other.a import *
,因为from . import b
中有a.py
。所以*
实际上是b
,这就是为什么你可以使用b.func_b()
in main.py
。