gpt4 book ai didi

python - 导入在 __init__.py 中声明的对象

转载 作者:行者123 更新时间:2023-11-28 22:47:28 29 4
gpt4 key购买 nike

我无法理解在“__init__.py”中声明的对象是/应该如何导入到其他文件。

我有这样的目录结构

top/
|
|_lib/
|_ __init__.py
|_ one.py

文件内容如下

lib/__init__.py

a=object()

lib/one.py

from lib import a

问题来了。如果我从 top 目录启动 python shell,则以下命令运行良好

>>> 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

但我真的很想了解,为什么 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 导入 o​​k 因为它是相对于你当前的工作目录的 -- 而不是相对于源文件。

当您移动到 ​​lib 目录时,python 无法再在当前目录中找到 lib,因此无法导入。请注意,对于大多数软件包,这是通过安装软件包来解决的,该软件包将其放置在 python 可以找到它的某个位置,而无需将其放在当前目录中。

关于python - 导入在 __init__.py 中声明的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190511/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com