Neo*_*Neo 3 python python-module
我无法理解在 '__init__.py' 中声明的对象是/应该如何导入到其他文件中。
我有一个像这样的目录结构
top/
|
|_lib/
|_ __init__.py
|_ one.py
Run Code Online (Sandbox Code Playgroud)
文件内容如下
库/__init__.py
a=object()
Run Code Online (Sandbox Code Playgroud)
库/一个.py
from lib import a
Run Code Online (Sandbox Code Playgroud)
这是问题所在。如果我从top目录中触发 python shell ,则以下命令运行良好
>>> from lib.one import a
Run Code Online (Sandbox Code Playgroud)
但是,如果我将目录更改为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
Run Code Online (Sandbox Code Playgroud)
当然,我可以这样改变one.py,这将使一切正常。
from __init__ import a
Run Code Online (Sandbox Code Playgroud)
但我真的很想理解,为什么 import 命令是从top目录而不是从top/lib.
谢谢。
一般来说,我认为最好的做法是让数据漏斗__init__.py从模块/子包开始,而不是需要依赖__init__.py周围模块中的数据。换句话说,__init__.py可以使用one.py,但one.py不应在__init__.py.
现在,对于你的问题...
它起作用是top因为 python 做了一个相对导入(它在 python3.x IIRC 中消失了,所以不要依赖它;-)。换句话说,python 在当前目录中查找模块或包名称lib并将其导入。到目前为止一切都很好。运行from lib.one import a第一个导入lib(__init__.py),效果很好。然后它导入one-lib仍然可以从中导入,one因为它相对于您当前的工作目录 - 与源文件无关。
当您进入lib目录时,pythonlib在当前目录中无法再找到,使其无法导入。请注意,对于大多数软件包,这是通过安装软件包来解决的,该软件包将其放在 python 可以找到的地方,而无需在当前目录中。
| 归档时间: |
|
| 查看次数: |
2843 次 |
| 最近记录: |