首页 > 编程笔记 > Python笔记 阅读:589

如何向PyPI上传Python程序包?

对于 Python 包而言,如果没有有组织的保存、上传和下载方式,那么它是没有用的。Python 包索引(一个搜索下载包的平台)是 Python 社区开源包的主要来源,任何人都可以免费上传新的包,唯一的要求就是在 PyPI 网站上进行注册。

当然,我们不必局限于这个索引,而且所有打包工具都支持使用其他包仓库。对于在内部组织分发或为了开发目的而分发的闭源代码来说,这一点特别有用。

本节,主要解决如何向 PyPI 上传程序包,同时还会简单介绍一下指定其他仓库的方法。

如前所述,PyPI 是开源包发行版的官方来源。从 PyPI 下载不需要任何账号或者权限,唯一需要的是一个包管理器,可以从 PyPI 下载新的发行版,而首选应该是 pip。

上传到PyPI或其他包索引

任何人都可以注册并向 PyPI 上传包,只要有注册账号就行。包与用户绑定,默认情况下只有注册了包名称的用户是它的管理员,并且可以上传新的发行版。但对于大型项目来说,有一个选项可以指定其他用户作为包的维护者,以便他们能够上传新的发行版。

上传包的最简单方法就是使用 setup.py 脚本的 upload 命令:

$ python setup.py <dist-commands> upload

这里的 <dist-commands> 是创建要上传的发行版的命令列表,只有在相同的 setup.py 执行期间创建的发行版才会被上传到仓库中。

因此,如果想要同时上传源代码发行版、构建发行版和 wheel 包,可以使用下列命令:

$python setup.py sdist bdist bdist_wheel upload

注意,使用 setup uplod 的方式有以下 2 个问题:
  1. 使用 setup.py 进行上传时,不能重复使用已经构建的发行版,每次上传时都必须重新构建,这对于大型项目或复杂项目来说很不方便,因为创建发行版需要相当长的时间。
  2. 在某些 Python 版本中,它可以使用纯文本 HTTP 连接或未验证的 HTTPS 连接。

这里推荐大家使用 twine 作为 setup.py upload 的安全替代。twine 是与 PyPI 交互的实用程序,目前只有一个作用,就是将包安全地上传到仓库中。twine 支持任何打包格式,并始终确保连接安全,它还允许上传已经创建的文件,这样能够在发布之前对发行版进行测试。

twine 的一个示例用法仍然需要调用 setup.py 来构建发行版,如下所示:

$ python setup.py sdist bdist_wheel
$ twine upload diat/*

注意,在上传之前一定要注册账号,否则上传会失败。当然,也可以使用 twine 来完成注册,如下所示:

$ twine register dist/*

.pypirc配置文件

.pypirc 是一个配置文件,其中保存有关 Python 包仓库的信息,应位于包的主目录中。该文件的格式如下所示:

[distutils]
index-servers =
pypi
other

[pypi]
repository: <repository-url>
username: <username>
password: <password>

[other]
repository: https://example.com/pypi
username: <username>
password: <password>

其中,distutils 字段应该包含 index-servers 变量,其中列出描述所有可用仓库及其证书的所有区段。每个仓库区段中只能修改下面这 3 个变量:
  1. repository:包仓库的 URL,默认是 https://www.python.org/pypi;
  2. username:给定仓库中授权的用户名;
  3. password:明文的授权用户密码。

注意,明文保存仓库密码可能并不安全,我们可以一直将其空这,必要时再提示输入。

所有为 Python 构建的打包工具都应该遵守 .pypirc 文件。虽然不是每个打包相关的实用程序都满足这一要求,但大多数重要的实用程序都支持这一点,例如 pip、twine、distutils 和 setuptools。

所有教程

优秀文章