为什么 Python 在导入时可以使用下划线而不是点
Why can Python use underline instead of dot on import
比如我们可以用oslo_db
代替oslo.db
导入(见this patch set第一条评论:
from oslo.db import exception as db_exc
YAMAMOTO Takashi: oslo_db
而且我无法在 OpenStack git 存储库中找到 oslo_db
模块,也无法在 pip 中搜索它。
此外,我启动了一个虚拟机,发现使用 oslo_db
或 oslo.db
是可以的,因为我只安装了 oslo.db
.
image:(import oslo_db
示例,我只安装了oslo.db
):
我看过一篇关于这个的文章,但是很抱歉我忘记了。
您不能 只使用_
来替换.
分隔符。并非没有模块作者的额外努力。
对于您可以使用的任何模块,都有一个实际的额外模块,其名称带有下划线,用于导入打包的命名空间。
例如,参见 oslo
GitHub package,您会在其中找到两个顶级目录,每个目录都有一个 __init__.py
文件来制作它们的包:oslo
和 oslo_db
.
这几乎总是为了从一种风格过渡到另一种风格,并且允许两种版本使过渡更容易。在这种情况下,开发人员似乎正在 远离 oslo.db
嵌套命名空间; changelog for 1.4.0 包括条目:
- Move files out of the namespace package
Move the public API out of oslo.db to oslo_db. Retain the ability to
import from the old namespace package for backwards compatibility for
this release cycle.
链接的 Launchpad 蓝图不再可用,因此您必须向 OpenStack 社区询问他们这样做的原因。
Python 项目名称不必与它们包含的包和模块相对应。例如,BeautifulSoup 项目将其 bs4
模块打包为 beautifulsoup4
。因此 oslo_db
包是 oslo.db
Python 项目的一部分。
比如我们可以用oslo_db
代替oslo.db
导入(见this patch set第一条评论:
from oslo.db import exception as db_exc
YAMAMOTO Takashi: oslo_db
而且我无法在 OpenStack git 存储库中找到 oslo_db
模块,也无法在 pip 中搜索它。
此外,我启动了一个虚拟机,发现使用 oslo_db
或 oslo.db
是可以的,因为我只安装了 oslo.db
.
image:(import oslo_db
示例,我只安装了oslo.db
):
我看过一篇关于这个的文章,但是很抱歉我忘记了。
您不能 只使用_
来替换.
分隔符。并非没有模块作者的额外努力。
对于您可以使用的任何模块,都有一个实际的额外模块,其名称带有下划线,用于导入打包的命名空间。
例如,参见 oslo
GitHub package,您会在其中找到两个顶级目录,每个目录都有一个 __init__.py
文件来制作它们的包:oslo
和 oslo_db
.
这几乎总是为了从一种风格过渡到另一种风格,并且允许两种版本使过渡更容易。在这种情况下,开发人员似乎正在 远离 oslo.db
嵌套命名空间; changelog for 1.4.0 包括条目:
- Move files out of the namespace package
Move the public API out of oslo.db to oslo_db. Retain the ability to import from the old namespace package for backwards compatibility for this release cycle.
链接的 Launchpad 蓝图不再可用,因此您必须向 OpenStack 社区询问他们这样做的原因。
Python 项目名称不必与它们包含的包和模块相对应。例如,BeautifulSoup 项目将其 bs4
模块打包为 beautifulsoup4
。因此 oslo_db
包是 oslo.db
Python 项目的一部分。