从。有包装条的情况下,“导入条”不会被解释为相对导入

时间:2019-11-11 20:10:29

标签: python python-3.x python-import python-importlib

所以,我的包装结构如下:

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

0 个答案:

没有答案