gpt4 book ai didi

python - 我什么时候需要使用 __init__.py?

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:44 27 4
gpt4 key购买 nike

我有以下结构:

/blog
/app
/static
staticfile.py
/templates
templatefile.py
run.py

run.py 我有,

from app.static import staticfile

print("you run me")

staticfile.py 我有,print("ran from staticfile")

当我运行 python run.py 时,我得到了,

ran from staticfile
you run me

我在任何地方都没有 __init__.py,也没有虚拟环境。如果没有 __init__.py 文件,我的引用如何工作?是因为我使用的是 Python 3.4 吗?如果重要的话,我会使用 Windows 7。

编辑:我能说的最好是因为我在 3.4 中。我明确地使用了 C:\python27\python run.py 并且在我放入 __init__.py 之前它失败了。

最佳答案

3.4 词汇表有这个词条

namespace package

A PEP 420 package which serves only as a container for subpackages. Namespace packages may have no physical representation, and specifically are not like a regular package because they have no init.py file.

根据我对 PEP 的阅读,目录包含在 sys.path 上的目录中但不包含 __init__.py是潜在的命名空间目录。当run.py正在运行,'.' , 代表 /blog , 添加到 sys.path 的前面.因此,“/blog”中的目录被搜索为潜在的命名空间目录。

PEP 还说

If a developer knows that her package will never be a portion of a namespace package, then there is a performance advantage to it being a regular package (with an init.py ). Creation and loading of a regular package can take place immediately when it is located along the path. With namespace packages, all entries in the path must be scanned before the package is created.

换句话说,sys.path 上的每个目录在 app.static 中搜索可能的其他模块包,而不是停止 '.' (/blog)。我会继续添加 __init__.py您认为需要的文件。

PEP 还指出了可能的意外效果。

Note that an ImportWarning will no longer be raised for a directory lacking an init.py file. Such a directory will now be imported as a namespace package, whereas in prior Python versions an ImportWarning would be raised.

关于python - 我什么时候需要使用 __init__.py?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216111/

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