# 分发 Python 模块

电子邮箱

  distutils-sig@python.org

作为一个流行的开源开发项目，Python拥有一个活跃的贡献者和用户支持社区，这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。

这允许Python用户有效地共享和协作，从其他人已经创建的解决方案中受益于常见（有时甚至是罕见的）问题，以及可以提供他们自己的解决方案。

本指南涵盖了分发部分的流程。有关安装其他Python项目的指南，请参阅 安装指南。

注解

对于企业和其他机构用户，请注意许多组织都有自己的政策来使用和贡献开源软件。在使用Python提供的分发和安装工具时，请考虑这些政策。

## 关键术语

- Python Packaging Index 是一个开源许可的软件包公共存储库，可供所有 Python 用户使用。

- Python Packaging Authority 是负责标准打包工具的维护和发展以及相关元数据和文件格式标准的开发人员和文档作者小组。他们在 GitHub 和 BitBucket 上维护着各种工具，文档和问题跟踪器。

- `distutils` 是1998年首次添加到Python标准库的原始构建和分发系统。虽然直接使用 `distutils` 正在逐步淘汰，但它仍然为当前的打包和分发基础架构奠定了基础它不仅仍然是标准库的一部分，而且它的名称还以其他方式存在（例如用于协调Python包装标准开发的邮件列表的名称）。

- setuptools （在很大程序上）是作为 `distutils` 的取代者，于 2004 年首次发布。它对未经修改的 `distutils` 工具最重要的补充是能够声明对其他包的依赖。目前它被推荐用来替代 `distutils`，其更新更为频繁，在更为多样的 Python 版本之上为最新的包标准提供持续支持。

- wheel （在此上下文中）是一个将 `bdist_wheel` 命令添加到 `distutils`/setuptools 的项目。这产生了一个跨平台的二进制打包格式（称为“轮子”或“轮子文件”，并在 PEP 427 中定义），它允许在系统上安装Python库，甚至包括二进制扩展的库，而不需在本地进行构建。

## 开源许可与协作

在世界上大多数地方，软件自动受版权保护。这意味着其他开发人员需要明确的权限来复制，使用，修改和重新分发软件。

开源许可是一种以相对一致的方式明确授予此类权限的方式，允许开发人员通过为各种问题免费提供通用解决方案来有效地共享和协作。这使得许多开发人员可以将更多时间用于关注他们特定情况相对独特的问题。

Python提供的分发工具旨在使开发人员选择开源时，可以合理地直接将其自己的贡献回馈到该公共软件池。

无论该软件是否作为开源软件发布，相同的分发工具也可用于在组织内分发软件。

## 安装工具

标准库不包括支持现代Python打包标准的构建工具，因为核心开发团队已经发现，即使在旧版本的Python上，使用一致工作的标准工具也很重要。

可以通过在命令行调用 `pip` 模块来安装当前推荐的构建和分发工具:

    python -m pip install setuptools wheel twine

注解

对于POSIX用户（包括Mac OS X和Linux用户），这些说明假定使用 virtual environment 。

对于Windows用户，这些说明假定在安装Python时选择了调整系统PATH环境变量的选项。

Python打包用户指南包含有关 currently recommended tools 的更多详细信息。

## Reading the guide

The Python Packaging User Guide covers the various key steps and elements involved in creating a project:

- 项目的结构

- 项目的构建与打包

- 上传项目到 Python Packaging Index

## 我该如何…？

这是一些常见任务的快速解答或相关链接。

### …为我的项目选择一个名字？

这不是一个简单的主题，但这里有一些提示：

- 检查Python Packaging Index以查看该名称是否已被使用

- 检查流行的托管网站，如GitHub，BitBucket等，看看是否已经有一个具有该名称的项目

- 检查您正在考虑的名称在网络搜索中出现的内容

- 避免使用特别常见的单词，尤其是具有多重含义的单词，因为它们会使用户在搜索时难以找到您的软件

### …创建和分发二进制扩展？

这实际上是一个非常复杂的主题，根据您的目标，可以提供各种替代方案。有关更多信息和建议，请参阅Python打包指南。

参见

Python Packaging User Guide: Binary Extensions