所以,我的包装结构如下:
bar
├── bar.py
├── foo.py
└── __init__.py
带有文件内容:
__init__.py:
import bar.bar
import bar.foo
bar.py:
x = 4
y = 5
foo.py:
from . import bar
print(bar.x)
现在,当我执行:from bar import foo
时,我得到:
AttributeError: module 'bar' has no attribute 'x'
虽然我期望4
。
我观察到将包命名为与文件相同会导致此问题,但是我仍然不明白为什么会出现问题。
我希望from . import bar
都执行相对导入,而不考虑顶级程序包的名称。
我也在寻找一些工作之王。绝对导入也不起作用,因为bar也将被解释为包而不是模块。 Wat工作的是from .bar import x
。但是,我想导入名称空间,而不是分别导入所有函数/变量。重命名文件/软件包是另一种选择,但是我没有特别的选择,除非确实没有其他选择。
变得越来越奇怪。如果我在import bar
中进行了foo.py
。条与条之间将有无数的引用。因此,我可以做print(bar is bar.bar.bar.bar)
和所有True
。