python 需要 __init__.py 的原因是什么?
What is the reason python needs __init__.py for packages?
我知道 python 需要 __ init __.py
文件才能将目录识别为 python 包,这样我们就可以将子模块导入 program.I可以看到与 类 的相似之处,以及如何使用 init 立即执行必要的代码。
然而,在 python 文档中,这一行让我感到困惑,
This is done to prevent directories with a common name, such as
string, from unintentionally hiding valid modules that occur later on
the module search path.
如此处所示https://docs.python.org/2/tutorial/modules.html#packages
有人可以澄清一下吗?
文档对此非常清楚 - 您的项目结构可能如下所示:
app
- common
- init.py
- resources
- string
- src
如果 Python 隐式地将目录视为包,"string" 目录可能会与 Python 的内置字符串模块 (https://docs.python.org/2/library/string.html) 出现名称冲突.这意味着调用 import string
时,模块是有歧义的。
__init__.py
还添加了一些功能:初始化包时执行的代码因此可用于进行某种包设置。
如果您有一个名为 string
的目录 不是 包,在 Python 搜索模块和包的位置(例如当前工作目录),Python 不应在您执行 import string
时尝试导入它。 __init__.py
要求让 Python 知道它应该继续运行而不是将该目录视为一个包。
this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path.
假设您有一个在学校工作的目录,其中一些涉及 python。你有一个数学目录,你称之为数学。您还编写了一个 python 模块,因此顶级目录 "school" 已添加到 python 路径中,因此您可以在任何地方使用它
School/
math/
hw1.txt
integrate.py
MyPythonModule/
__init__.py
someClass.py
someFunc.py
以后使用python搜索MyPythonModule时,python会打开School/
然后它看到 math/
和 MyPythonModule/
如果你在你的 python 程序中使用数学,并且没有办法区分模块 ../lib/site-packages/math/
和非模块 ../School/math/
那么 python 将把你的文件 ../School/math/
作为数学包;在你不知道为什么的情况下破解代码。
我知道 python 需要 __ init __.py
文件才能将目录识别为 python 包,这样我们就可以将子模块导入 program.I可以看到与 类 的相似之处,以及如何使用 init 立即执行必要的代码。
然而,在 python 文档中,这一行让我感到困惑,
This is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path.
如此处所示https://docs.python.org/2/tutorial/modules.html#packages
有人可以澄清一下吗?
文档对此非常清楚 - 您的项目结构可能如下所示:
app
- common
- init.py
- resources
- string
- src
如果 Python 隐式地将目录视为包,"string" 目录可能会与 Python 的内置字符串模块 (https://docs.python.org/2/library/string.html) 出现名称冲突.这意味着调用 import string
时,模块是有歧义的。
__init__.py
还添加了一些功能:初始化包时执行的代码因此可用于进行某种包设置。
如果您有一个名为 string
的目录 不是 包,在 Python 搜索模块和包的位置(例如当前工作目录),Python 不应在您执行 import string
时尝试导入它。 __init__.py
要求让 Python 知道它应该继续运行而不是将该目录视为一个包。
this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path.
假设您有一个在学校工作的目录,其中一些涉及 python。你有一个数学目录,你称之为数学。您还编写了一个 python 模块,因此顶级目录 "school" 已添加到 python 路径中,因此您可以在任何地方使用它
School/
math/
hw1.txt
integrate.py
MyPythonModule/
__init__.py
someClass.py
someFunc.py
以后使用python搜索MyPythonModule时,python会打开School/
然后它看到 math/
和 MyPythonModule/
如果你在你的 python 程序中使用数学,并且没有办法区分模块 ../lib/site-packages/math/
和非模块 ../School/math/
那么 python 将把你的文件 ../School/math/
作为数学包;在你不知道为什么的情况下破解代码。