为什么 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_dboslo.db 是可以的,因为我只安装了 oslo.db.

image:(import oslo_db示例,我只安装了oslo.db):

我看过一篇关于这个的文章,但是很抱歉我忘记了。

不能 只使用_ 来替换. 分隔符。并非没有模块作者的额外努力。

对于您可以使用的任何模块,都有一个实际的额外模块,其名称带有下划线,用于导入打包的命名空间。

例如,参见 oslo GitHub package,您会在其中找到两个顶级目录,每个目录都有一个 __init__.py 文件来制作它们的包:oslooslo_db.

这几乎总是为了从一种风格过渡到另一种风格,并且允许两种版本使过渡更容易。在这种情况下,开发人员似乎正在 远离 oslo.db 嵌套命名空间; changelog for 1.4.0 包括条目:

  • Move files out of the namespace package

commit message states:

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 项目的一部分。