当然,我们不必局限于这个索引,而且所有打包工具都支持使用其他包仓库。对于在内部组织分发或为了开发目的而分发的闭源代码来说,这一点特别有用。
本节,主要解决如何向 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 个问题:
- 使用 setup.py 进行上传时,不能重复使用已经构建的发行版,每次上传时都必须重新构建,这对于大型项目或复杂项目来说很不方便,因为创建发行版需要相当长的时间。
- 在某些 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 个变量:
- repository:包仓库的 URL,默认是 https://www.python.org/pypi;
- username:给定仓库中授权的用户名;
- password:明文的授权用户密码。
注意,明文保存仓库密码可能并不安全,我们可以一直将其空这,必要时再提示输入。
所有为 Python 构建的打包工具都应该遵守 .pypirc 文件。虽然不是每个打包相关的实用程序都满足这一要求,但大多数重要的实用程序都支持这一点,例如 pip、twine、distutils 和 setuptools。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23055.html