例如,我们可以使用oslo_db
替换oslo.db
进行导入(请参阅this patch set的第一条评论:
from oslo.db import exception as db_exc
YAMAMOTO Takashi:oslo_db
我无法在OpenStack git repo中找到oslo_db
模块或在pip中搜索它。
更重要的是,我启动虚拟机并发现可以使用oslo_db
或oslo.db
,因为我只安装了oslo.db
。
图片:(import oslo_db
示例,我只安装了oslo.db
):
我看过一篇关于此的文章,但很遗憾我已经忘了它。
答案 0 :(得分:3)
您无法仅使用_
替换.
分隔符。模块作者不是没有额外的努力。
对于任何可以使用的模块,都有一个实际额外模块,其名称带有下划线,用于导入打包的命名空间。
例如,请参阅oslo
GitHub package,您可以在其中找到两个顶级目录,每个目录都有一个__init__.py
文件,以便为其创建包:oslo
和{{1} }。
这几乎总是从一种风格转换到另一种风格,并允许两种版本使转换更容易。在这种情况下,开发人员似乎正在从oslo_db
嵌套命名空间中移动 ; changelog for 1.4.0包括条目:
- 将文件移出命名空间包
将公共API从oslo.db移出到oslo_db。保留能力 从旧的命名空间包导入以便向后兼容 这个发布周期。
链接的Launchpad Blueprint已不再可用,因此您必须向OpenStack社区询问他们为何这样做。
Python项目名称不必与它们包含的包和模块相对应。例如,BeautifulSoup项目将oslo.db
模块打包为bs4
。因此beautifulsoup4
包是oslo_db
Python项目的一部分。