分发 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 的更多详细信息
。


阅读指南
========

Python打包指南介绍了创建项目所涉及的各个关键步骤和元素:

* 项目的结构

* 项目的构建与打包

* 上传项目到 Python Packaging Index


我该如何…？
===========

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


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

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

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

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

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

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


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

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

参见: Python Packaging User Guide: Binary Extensions
