分发包与导入包#

人们通常用“包”一词来指代许多不同的概念。本页面阐明了 Python 打包中两个不同但相关的含义,“分发包”和“导入包”之间的差异。

什么是分发包?#

分发包是可以安装的一段软件。大多数情况下,这与“项目”同义。当您键入 pip install pkg,或在 pyproject.toml 中编写 dependencies = ["pkg"] 时,pkg 是分发包的名称。当您搜索或浏览 PyPI(安装 Python 库和工具最广为人知的集中式来源)时,您看到的是分发包列表。或者,术语“分发包”可以用来指代包含项目特定版本的文件。

请注意,在 Linux 世界中,“分发包”,最常见的缩写为“distro 包”或简称“包”,是由 Linux 发行版 的系统包管理器提供的,这是不同的含义。

什么是导入包?#

导入包是 Python 模块。因此,当您在 Python 代码中编写 import pkgfrom pkg import func 时,pkg 是导入包的名称。更准确地说,导入包是可以包含子模块的特殊 Python 模块。例如,numpy 包包含 numpy.linalgnumpy.fft 等模块。通常,导入包是文件系统上的一个目录,其中包含 .py 文件形式的模块和子目录形式的子包。

一旦您安装了提供导入包的分发包,您就可以使用该导入包。

发行包名称和导入包名称如何比较?#

导入包的名称应该是有效的 Python 标识符(确切规则可以在 Python 文档中找到)[1]。特别是,它们使用下划线 _ 作为单词分隔符,并且区分大小写。

另一方面,发行包可以使用连字符 - 或下划线 _。它们还可以包含点 .,有时用于打包 命名空间包 的子包。对于大多数目的,它们不区分大小写,也不区分 -_ 的差异,例如,pip install Awesome_Packagepip install awesome-package 相同(确切的规则在 名称规范说明 中给出)。