对于 Python 包而言,如果没有有组织的保存、上传和下载方式,那么它是没有用的。
Python 包索引是 Python 社区开源包的主要来源。任何人都可以免费上传新的包,唯一的要
求就是在 PyPI 网站上进行注册。
当然,你不必局限于这个索引,而且所有打包工具都支持使用其他包仓库。对于在内
部组织分发或为了开发目的而分发的闭源代码来说,这一点特别有用。下一章将会解释这
些打包用法的细节,以及关于如何创建你自己的包索引的说明。本章我们只关注向 PyPI
开源上传,并稍微介绍一下指定其他仓库的方法。
5.3.1 PyPI—Python 包索引
如前所述,PyPI 是开源包发行版的官方来源。从 PyPI 下载不需要任何账号或者权限。
你唯一需要的是一个包管理器,可以从 PyPI 下载新的发行版。你的首选应该是 pip。
1.上传到 PyPI 或其他包索引
任何人都可以注册并向 PyPI 上传包,只要他/她有注册账号就行。包与用户绑定,因此在默认情况下,只有注册了包名称的用户是它的管理员,并且可以上传新的发行版。对
于大型项目来说,这可能是一个问题,因此有一个选项可以指定其他用户作为包的维护者,
以便他们能够上传新的发行版。
上传一个包的最简单方法就是使用 setup.py 脚本的 upload 命令:
$ python setup.py upload
这里的是创建要上传的发行版的命令列表。只有在相同的
setup.py 执行期间创建的发行版才会被上传到仓库中。因此,如果你想要同时上传源代
码发行版、构建发行版和 wheel 包,那么你需要使用下列命令:
$ python setup.py sdist bdist bdist_wheel upload
使用 setup.py 进行上传时,你不能重复使用已经构建的发行版,每次上传时都必须
重新构建。这可能是有意义的,但对于大型项目或复杂项目来说很不方便,对于这些项目
来说创建发行版实际上可能需要相当长的时间。setup.py upload 的另一个问题是,在
某些 Python 版本中它可以使用纯文本 HTTP 连接或未验证的 HTTPS 连接。这就是为什么
推荐使用 twine 作为 setup.py upload 的安全替代。
twine 是与 PyPI 交互的实用程序,它目前只有一个作用—将包安全地上传到仓库
中。它支持任何打包格式,并始终确保连接安全。它还允许你上传已经创建的文件,这样
你能够在发布之前对发行版进行测试。twine 的一个示例用法仍然需要调用 setup.py 来
构建发行版,如下所示:
$ python setup.py sdist bdist_wheel
$ twine upload dist/*
如果你还没有注册过这个包,那么上传会失败,因为你需要首先注册它。你也可以使
用 twine 来完成注册,如下所示:
$ twine register dist/*
2..pypirc
.pypirc 是一个配置文件,其中保存有关 Python 包仓库的信息。它应该位于你的主
目录中。这个文件的格式如下所示:
[distutils]
index-servers =
pypi
other
[pypi]
repository:
username:
password:
[other]
repository: https://example.com/pypi
username:
password:
distutils 区段应该包含 index-servers 变量,其中列出描述所有可用仓库及其
证书的所有区段。每个仓库区段中只能修改下面这 3 个变量。
• repository:包仓库的 URL(默认是 https://www.python.org/pypi)。
• username:给定仓库中授权的用户名。
• password:明文的授权用户密码。
注意,明文保存你的仓库密码可能不是最明智的安全选择。你可以一直将其空着,必
要时再提示你输入。
所有为 Python 构建的打包工具都应该遵守.pypirc 文件。虽然不是每个打包相关的
实用程序都满足这一要求,但大多数重要的实用程序都支持这一点,例如 pip、twine、
distutils 和 setuptools。
Python从小白到高手实现系列六十八:上传一个包
最新推荐文章于 2025-11-05 21:22:50 发布
本文介绍了如何通过PyPI上传Python包,包括使用setup.py和twine的安全上传过程,以及.pypirc文件在仓库配置中的重要性。还提及了私有仓库对于内部分发和闭源代码的作用。
3142

被折叠的 条评论
为什么被折叠?



