为什么Python在导入时使用下划线而不是点

时间:2015-05-31 10:15:42

标签: python import

例如,我们可以使用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_dboslo.db,因为我只安装了oslo.db

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

我看过一篇关于此的文章,但很遗憾我已经忘了它。

1 个答案:

答案 0 :(得分:3)

无法仅使用_替换.分隔符。模块作者不是没有额外的努力。

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

例如,请参阅oslo GitHub package,您可以在其中找到两个顶级目录,每个目录都有一个__init__.py文件,以便为其创建包:oslo和{{1} }。

这几乎总是从一种风格转换到另一种风格,并允许两种版本使转换更容易。在这种情况下,开发人员似乎正在从oslo_db嵌套命名空间中移动 ; changelog for 1.4.0包括条目:

  
      
  • 将文件移出命名空间包
  •   

commit message states

  

将公共API从oslo.db移出到oslo_db。保留能力   从旧的命名空间包导入以便向后兼容   这个发布周期。

链接的Launchpad Blueprint已不再可用,因此您必须向OpenStack社区询问他们为何这样做。

Python项目名称不必与它们包含的包和模块相对应。例如,BeautifulSoup项目将oslo.db模块打包为bs4。因此beautifulsoup4包是oslo_db Python项目的一部分。