分发 Python 模块
****************

电子邮箱:
   distutils-sig@python.org

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

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

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

注解:

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


关键术语
========

* Python Package 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 用户（包括 macOS 和 Linux 用户），这些说明假定使用了
  *virtual environment* 。对于Windows用户，这些说明假定在安装Python时
  选择了调整系统PATH环境变量的选项。

Python 打包用户指南包含有关 当前推荐工具的 的更多详细信息。


阅读 Python 打包用户指南
========================

“Python 打包用户指南”介绍了创建和发布项目所涉及的各个关键步骤和元素：

* 项目的结构

* 项目的构建与打包

* Uploading the project to the Python Package Index

* The .pypirc file


我该如何...？
=============

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


...为我的项目选择一个名字？
---------------------------

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

* 检查 Python Package Index 以查看该名称是否已被使用

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

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

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


...创建和分发二进制扩展？
-------------------------

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

参见: Python 打包用户指南：二进制扩展
