如何向PyPI上传Python程序包?
对于 Python 包而言,如果没有有组织的保存、上传和下载方式,那么它是没有用的。Python 包索引(一个搜索下载包的平台)是 Python 社区开源包的主要来源,任何人都可以免费上传新的包,唯一的要求就是在 PyPI 网站上进行注册。
当然,我们不必局限于这个索引,而且所有打包工具都支持使用其他包仓库。对于在内部组织分发或为了开发目的而分发的闭源代码来说,这一点特别有用。
本节,主要解决如何向 PyPI 上传程序包,同时还会简单介绍一下指定其他仓库的方法。
如前所述,PyPI 是开源包发行版的官方来源。从 PyPI 下载不需要任何账号或者权限,唯一需要的是一个包管理器,可以从 PyPI 下载新的发行版,而首选应该是 pip。
上传包的最简单方法就是使用 setup.py 脚本的 upload 命令:
因此,如果想要同时上传源代码发行版、构建发行版和 wheel 包,可以使用下列命令:
这里推荐大家使用 twine 作为 setup.py upload 的安全替代。twine 是与 PyPI 交互的实用程序,目前只有一个作用,就是将包安全地上传到仓库中。twine 支持任何打包格式,并始终确保连接安全,它还允许上传已经创建的文件,这样能够在发布之前对发行版进行测试。
twine 的一个示例用法仍然需要调用 setup.py 来构建发行版,如下所示:
当然,我们不必局限于这个索引,而且所有打包工具都支持使用其他包仓库。对于在内部组织分发或为了开发目的而分发的闭源代码来说,这一点特别有用。
本节,主要解决如何向 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 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>
- repository:包仓库的 URL,默认是 https://www.python.org/pypi;
- username:给定仓库中授权的用户名;
- password:明文的授权用户密码。
所有为 Python 构建的打包工具都应该遵守 .pypirc 文件。虽然不是每个打包相关的实用程序都满足这一要求,但大多数重要的实用程序都支持这一点,例如 pip、twine、distutils 和 setuptools。注意,明文保存仓库密码可能并不安全,我们可以一直将其空这,必要时再提示输入。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算