我无法理解“__init__.py”中声明的对象如何/应该导入到其他文件中。
我有一个像这样的目录结构
top/
|
|_lib/
|_ __init__.py
|_ one.py
文件内容如下
lib/__init__.py
a=object()
库/one.py
from lib import a
问题就在这里。如果我从top
目录下,以下命令运行良好
>>> from lib.one import a
但是如果我将目录更改为top/lib
并在新的 python shell 中触发类似的命令,我收到错误。
>>> from one import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "one.py", line 1, in <module>
from lib import a
ImportError: No module named lib
当然,我可以改变one.py
像这样,这将使一切正常。
from __init__ import a
但我真的很想理解,为什么导入命令可以从top
目录而不是来自top/lib
.
Thanks.
一般来说,我认为最好的做法是让数据漏斗达到__init__.py
来自模块/子包,而不需要依赖来自的数据__init__.py
在周围的模块中。换句话说,__init__.py
可以使用one.py
, but one.py
不应该使用数据/函数__init__.py
.
现在,针对你的问题...
它适用于top
因为 python 执行相对导入(在 python3.x IIRC 中已消失,所以不要依赖它;-)。换句话说,python 在当前目录中查找模块或包名称lib
然后它导入它。到目前为止一切都很好。跑步from lib.one import a
首次进口lib
(__init__.py
)效果很好。然后它导入one
-- lib
仍然可以正常导入one
因为它是相对于当前工作目录的——而不是相对于源文件。
当您搬进lib
目录,python再也找不到了lib
在当前目录中,使其不可导入。请注意,对于大多数软件包,这是通过安装软件包来解决的,该软件包将其放置在 python 可以找到它的位置,而无需将其放在当前目录中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)