1. Distutils 简介

Note

该文档将一直保留,直到https://setuptools.readthedocs.io/en/latest/setuptools.htmlsetuptools文档独立涵盖了此处当前包括的所有相关信息。

本文档介绍如何使用 Distutils 分发 Python 模块,并着重于开发人员/分发者的角色:如果要查找有关安装 Python 模块的信息,请参考安装 Python 模块(旧版)章。

1.1. 概念与术语

对于模块开发人员和安装第三方模块的用户/Management 员而言,使用 Distutils 都非常简单。作为开发人员,您的责任(当然,除了编写可靠,记录良好和经过测试的代码!):

本文档介绍了这些任务中的每一个。

并非所有的模块开发人员都可以使用多种平台,因此,期望他们创建多种内置发行版并不总是可行的。希望会出现一类称为包装商的中介机构来解决这一需求。打包人员将获取由模块开发人员发布的源发行版,在一个或多个平台上构建它们,然后发布生成的内置发行版。因此,最流行平台上的用户将能够以最自然的方式为其平台安装最流行的 Python 模块发行版,而不必运行单个安装脚本或编译一行代码。

1.2. 一个简单的例子

安装脚本通常非常简单,尽管由于它是用 Python 编写的,所以对它的操作没有任何限制,尽管您应谨慎地在安装脚本中放置任意昂贵的操作。与 Autoconf 风格的配置脚本不同,在构建和安装模块发行版的过程中,安装脚本可能会多次运行。

如果您要做的就是分发名为foo的模块,该模块包含在文件foo.py中,那么您的安装脚本可以像这样简单:

from distutils.core import setup
setup(name='foo',
      version='1.0',
      py_modules=['foo'],
      )

Some observations:

要为此模块创建源分发,您将创建一个包含以上代码的安装脚本setup.py,并从终端运行以下命令:

python setup.py sdist

对于 Windows,打开命令提示符窗口(开始‣附件)并将命令更改为:

setup.py sdist

sdist 将创建一个包含安装脚本setup.py和模块foo.py的存档文件(例如,Unix 上的 tarball,Windows 上的 ZIP 文件)。存档文件将被命名为foo-1.0.tar.gz(或.zip),并将解压缩到目录foo-1.0中。

如果finally用户希望安装foo模块,那么他们要做的就是下载foo-1.0.tar.gz(或.zip),解压缩并从foo-1.0目录运行

python setup.py install

finally会将foo.py复制到第三方模块在其 Python 安装中的适当目录中。

这个简单的示例演示了 Distutils 的一些基本概念。首先,开发人员和安装人员都具有相同的基本用户界面,即安装脚本。区别在于它们使用的是 Distutils 命令:sdist 命令几乎专门用于模块开发人员,而 install **对于安装人员来说更常见(尽管大多数开发人员会偶尔安装自己的代码)。

如果您想让用户 true 轻松,可以为他们创建一个或多个内置发行版。例如,如果您在 Windows 计算机上运行,并且想让其他 Windows 用户更轻松,则可以使用 bdist_wininst 命令创建可执行安装程序(该平台最适合的内置发行版类型)。例如:

python setup.py bdist_wininst

将在当前目录中创建一个可执行安装程序foo-1.0.win32.exe

其他有用的内置分发格式是 RPM,由 bdist_rpm 命令,Solaris pkgtool ( bdist_pkgtool )和 HP-UX swinstall ( bdist_sdux )实现。例如,以下命令将创建一个名为foo-1.0.noarch.rpm的 RPM 文件:

python setup.py bdist_rpm

( bdist_rpm 命令使用 rpm 可执行文件,因此必须在基于 RPM 的系统(例如 Red Hat Linux,SuSE Linux 或 Mandrake Linux)上运行。)

您可以pass运行来随时查找可用的分发格式

python setup.py bdist --help-formats

1.3. 通用 Python 术语

如果您正在阅读本文档,则可能对什么模块,扩展等有所了解。不过,为了确保每个人都从一个共同的起点开始工作,我们提供以下 Python 通用术语表:

1.4. Distutils 专用术语

以下术语更具体地适用于使用 Distutils 分发 Python 模块的领域:

首页