9. API引用

参见

New and changed setup.py arguments in setuptools

这个 setuptools Project将新功能添加到 setup 函数和其他API使API在不同的Python版本中保持一致,因此建议不要使用 distutils 直接。

注解

本文件仅保留至 setuptools https://setuptools.readthedocs.io/en/latest/setuptools.html上的文档独立地涵盖了此处当前包含的所有相关信息。

9.1. distutils.core ---核心distuils功能

这个 distutils.core 模块是唯一需要安装才能使用distutils的模块。它提供了 setup() (从安装脚本调用)。间接提供 distutils.dist.Distributiondistutils.cmd.Command 类。

distutils.core.setup(arguments)

基本的DoEverything函数可以执行distuils方法所要求的大部分操作。

SETUP函数接受大量参数。下表列出了这些内容。

参数名

价值

类型

name

包的名称

一根绳子

版本

包的版本号;请参见 distutils.version

一根绳子

description

描述包的单行

一根绳子

long_description

包的较长描述

一根绳子

作者

包作者的名称

一根绳子

author_email

包作者的电子邮件地址

一根绳子

保持器

当前维护者的名称(如果与作者不同)。请注意,如果提供了Maintainer,distutils将使用它作为中的作者。 PKG-INFO

一根绳子

maintainer_email

当前维护者的电子邮件地址(如果与作者不同)

一根绳子

url

包的URL(主页)

一根绳子

download_url

下载包的URL

一根绳子

封装

distutils将操作的python包列表

字符串列表

py_modules

distutils将操作的python模块列表

字符串列表

脚本

要生成和安装的独立脚本文件列表

字符串列表

ext_modules

要构建的python扩展列表

的实例列表 distutils.core.Extension

分类器

包的类别列表

字符串列表;有效的分类器列在 PyPI .

远距

这个 Distribution 使用类

一个子类 distutils.core.Distribution

script_name

setup.py脚本的名称-默认为 sys.argv[0]

一根绳子

script_args

要提供给安装脚本的参数

字符串列表

option

安装脚本的默认选项

字典

许可

包的许可证

一根绳子

关键词

描述性元数据,请参见 PEP 314

字符串列表或逗号分隔的字符串

平台

字符串列表或逗号分隔的字符串

CMD-类

命令名映射到 Command 子类

字典

data_files

要安装的数据文件列表

一览表

package_dir

包到目录名的映射

字典

distutils.core.run_setup(script_name[, script_args=None, stop_after='run'])

在某种程度上受控制的环境中运行安装脚本,并返回 distutils.dist.Distribution 驱动事物的实例。如果需要查找分发元数据(作为关键字参数从 脚本setup() )或配置文件或命令行的内容。

script_name 是将用读取和运行的文件 exec() . sys.argv[0] 将替换为 脚本 通话期间。 script_args 是字符串列表;如果提供, sys.argv[1:] 将替换为 script_args 通话期间。

stop_after 告诉 setup() 何时停止处理;可能的值:

价值

描述

init

停后 Distribution 实例已创建并用关键字参数填充 setup()

配置

分析配置文件(及其存储在 Distribution 实例)

命令行

命令行后停止 (sys.argv[1:]script_args )已被分析(并且数据存储在 Distribution 实例)

run

在所有命令运行后停止(与 setup() 以通常的方式被召唤)。这是默认值。

此外, distutils.core 模块公开了一些生活在其他地方的类。

以下是对每一项的简短描述,但请参阅相关模块以获取完整参考。

class distutils.core.Extension

扩展类在安装脚本中描述单个C或C++扩展模块。它在其构造函数中接受以下关键字参数:

参数名

价值

类型

name

扩展名的全名,包括任何包---ie。 not 文件名或路径名,但python点状名称

一根绳子

source

源文件名列表,相对于分布根(安装脚本所在的位置),以Unix格式(斜线分隔)表示,便于移植。源文件可以是C、C++、SWIG(.i)、特定于平台的资源文件,或者任何其他被识别的资源文件。 build_ext 命令作为Python扩展的源。

字符串列表

include_dirs

目录搜索C/C++头文件(在UNIX表单中用于便携性)

字符串列表

define_macros

要定义的宏列表;每个宏都使用2元组定义 (name, value) 在哪里 value 是要将其定义为或的字符串 None 在没有特定值的情况下定义它(相当于 #define FOO 在源或 -DFOO 在unix c编译器命令行上)

元组列表

undef_macros

要显式取消定义的宏列表

字符串列表

library_dirs

链接时搜索C/C++类库的目录列表

字符串列表

类库

要链接的库名称列表(不是文件名或路径)

字符串列表

runtime_library_dirs

在运行时搜索C/C++库的目录列表(用于共享扩展,这是加载扩展名时)

字符串列表

extra_objects

要链接的额外文件列表(例如“源”、必须显式指定的静态库、二进制资源文件等不暗示的对象文件)

字符串列表

extra_compile_args

在“sources”中编译源文件时要使用的任何额外平台和编译器特定信息。对于命令行有意义的平台和编译器,这通常是命令行参数列表,但对于其他平台,它可以是任何东西。

字符串列表

extra_link_args

将对象文件链接在一起以创建扩展名(或创建新的静态python解释器)时要使用的任何额外的平台和编译器特定信息。类似于“额外编译参数”的解释。

字符串列表

export_symbols

要从共享扩展导出的符号列表。不是在所有平台上都使用,也不是Python扩展通常所必需的,后者通常只导出一个符号: init +扩展名。

字符串列表

取决于

扩展依赖的文件列表

字符串列表

语言

扩展语言(即 'c''c++''objc' )如果未提供,将从源扩展中检测到。

一根绳子

可选择的

指定扩展中的生成失败不应中止生成过程,而应跳过扩展。

布尔函数

在 3.8 版更改: 在Unix上,除了Android和Cygwin外,C扩展不再链接到libpython。

class distutils.core.Distribution

A Distribution 描述如何构建、安装和打包Python软件包。

setup() 函数获取分发构造函数接受的关键字参数列表。 setup() 创建分发实例。

在 3.7 版更改: Distribution 现在警告如果 classifierskeywordsplatforms 字段未指定为列表或字符串。

class distutils.core.Command

A Command 类(或者更确切地说,它的一个子类的实例)实现单个distutils命令。

9.2. distutils.ccompiler ---CCompiler基类

此模块为 CCompiler 类。一 CCompiler 实例可用于构建单个项目所需的所有编译和链接步骤。方法用于设置编译器的选项——宏定义,包括目录、链接路径、库等。

此模块提供以下功能。

distutils.ccompiler.gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries)

生成用于搜索库目录和与特定库链接的链接器选项。 类库library_dirs 分别是库名称列表(不是文件名!)搜索目录。返回适用于某些编译器的命令行选项列表(取决于传入的两个格式字符串)。

distutils.ccompiler.gen_preprocess_options(macros, include_dirs)

生成C预处理器选项 (-D-U-I 如至少两种编译器所使用的:典型的UNIX编译器和Visual C++。 宏指令 通常是1或2元组的列表,其中 (name,) 意味着未定义 (-Uname(name, value) 手段界定 (-Dnamevalue . include_dirs 只是要添加到头文件搜索路径的目录名列表 (-I )返回适用于UNIX编译器或VisualC++的命令行选项列表。

distutils.ccompiler.get_default_compiler(osname, platform)

确定要用于给定平台的默认编译器。

蛇床子 应该是标准的python操作系统名称之一(即 os.name平台 返回的公共值 sys.platform 对于讨论中的平台。

默认值为 os.namesys.platform 如果没有给出参数。

distutils.ccompiler.new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0)

factory函数,为提供的平台/编译器组合生成某些CCompiler子类的实例。 plat 默认为 os.name (例如) 'posix''nt'编译器 默认为该平台的默认编译器。目前只 'posix''nt' 支持,默认编译器是“传统的Unix接口” (UnixCCompiler 类)和Visual C++ (MSVCCompiler 类)。请注意,如果提供的值是 编译器plat 被忽略。

distutils.ccompiler.show_compilers()

打印可用编译器的列表(由 --help-compiler 选项到 buildbuild_extbuild_clib

class distutils.ccompiler.CCompiler([verbose=0, dry_run=0, force=0])

抽象基类 CCompiler 定义必须由真正的编译器类实现的接口。该类还具有一些实用程序方法,由几个编译器类使用。

编译器抽象类背后的基本思想是每个实例都可以用于构建单个项目的所有编译/链接步骤。因此,所有这些编译和链接步骤通用的属性(包括目录、要定义的宏、要链接的库等)是编译器实例的属性。为了考虑到处理单个文件的方式的可变性,这些属性中的大多数可以根据每个编译或每个链接进行更改。

每个子类的构造函数创建编译器对象的实例。flag是 verbose (显示详细输出) dry_run (不要实际执行步骤)和 force (重建所有内容,不管依赖性如何)。所有这些标志默认为 0 (关闭)注意,您可能不想实例化 CCompiler 或其子类之一-使用 distutils.CCompiler.new_compiler() 工厂功能。

以下方法允许您手动更改编译器类实例的编译器选项。

add_include_dir(dir)

添加 dir 到要搜索头文件的目录列表。编译器将按照连续调用提供目录的顺序搜索目录。 add_include_dir() .

set_include_dirs(dirs)

将要搜索的目录列表设置为 dirs (字符串列表)。覆盖之前对 add_include_dir() ;后续调用 add_include_dir() 添加到传递到的列表 set_include_dirs() . 这不会影响编译器默认搜索的任何标准包含目录列表。

add_library(libname)

添加 libnames 指向将包含在此编译器对象驱动的所有链接中的库列表。注意 libnames 应该 * 不 * 是包含库的文件的名称,但库本身的名称:实际文件名将由链接器、编译器或编译器类(取决于平台)推断。

将指示链接器按提供给的顺序链接库。 add_library() 和/或 set_libraries() . 复制库名称是完全有效的;将指示链接器按所提到的次数链接库。

set_libraries(libnames)

将此编译器对象驱动的所有链接中要包含的库列表设置为 libnames (字符串列表)。这不会影响链接器默认情况下可能包含的任何标准系统库。

add_library_dir(dir)

添加 dir 到要搜索指定库的目录列表 add_library()set_libraries() . 将指示链接器按提供给的顺序搜索库 add_library_dir() 和/或 set_library_dirs() .

set_library_dirs(dirs)

将库搜索目录列表设置为 dirs (字符串列表)。这不会影响链接器默认可以搜索的任何标准库搜索路径。

add_runtime_library_dir(dir)

添加 dir 到将在运行时搜索共享库的目录列表。

set_runtime_library_dirs(dirs)

将运行时要搜索共享库的目录列表设置为 dirs (字符串列表)。这不会影响运行时链接器在默认情况下可以搜索的任何标准搜索路径。

define_macro(name[, value=None])

为此编译器对象驱动的所有编译定义预处理器宏。可选参数 value 应该是一个字符串;如果没有提供,那么宏将在没有显式值的情况下定义,而确切的结果取决于所使用的编译器。

undefine_macro(name)

取消为此编译器对象驱动的所有编译定义预处理器宏。如果相同的宏由 define_macro() 和未定义的 undefine_macro() 最后一个调用优先(包括多个重定义或未定义)。如果宏是在每次编译的基础上重新定义/未定义的(即在调用 compile() ,然后优先考虑。

添加 object 要包含在此编译器对象驱动的每个链接中的对象文件(或类似文件,例如显式命名的库文件或“资源编译器”的输出)的列表。

将要包含在每个链接中的对象文件(或类似文件)列表设置为 物体 . 这不会影响链接器默认情况下可能包含的任何标准对象文件(如系统库)。

以下方法实现了自动检测编译器选项的方法,提供了一些类似于GNU的功能 autoconf .

detect_language(sources)

检测给定文件或文件列表的语言。使用实例属性 language_map (字典),以及 language_order (一份清单)做这项工作。

find_library_file(dirs, lib[, debug=0])

在指定的目录列表中搜索静态或共享库文件 lib 并返回该文件的完整路径。如果 调试 为真,请查找调试版本(如果在当前平台上有意义的话)。返回 None 如果 lib 在任何指定目录中都找不到。

has_function(funcname[, includes=None, include_dirs=None, libraries=None, library_dirs=None])

返回一个布尔值,指示 函数名 在当前平台上受支持。可选参数可用于通过提供额外的包含文件和路径、库和路径来增强编译环境。

library_dir_option(dir)

返回要添加的编译器选项 dir 到搜索库的目录列表。

library_option(lib)

返回要添加的编译器选项 lib 链接到共享库或可执行文件的库列表。

runtime_library_dir_option(dir)

返回要添加的编译器选项 dir 到搜索运行库的目录列表。

set_executables(**args)

定义将运行以执行编译的各个阶段的可执行文件(及其选项)。此处指定的可执行文件的确切集合取决于编译器类(通过“executables”class属性),但大多数具有:

属性

描述

编译器

C/C++编译程序

linker_so

用于创建共享对象和库的链接器

linker_exe

用于创建二进制可执行文件的链接器

归档文件

静态库创建者

在具有命令行(unix、dos/windows)的平台上,每个命令行都是一个字符串,将被拆分为可执行文件名和(可选)参数列表。(拆分字符串的操作方式与Unix shell的操作方式类似:单词由空格分隔,但引号和反斜杠可以覆盖这一点。参见 distutils.util.split_quoted()

以下方法调用生成过程中的各个阶段。

compile(sources[, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None])

编译一个或多个源文件。生成对象文件(例如,转换 .c 文件到 .o 文件。

source 必须是文件名列表,最有可能是C/C++文件,但实际上是可以由特定编译器和编译器类处理的任何东西(例如)。 MSVCCompiler 可以处理中的资源文件 source )返回对象文件名列表,每个源文件名一个 source . 根据实现的不同,并非所有源文件都必须编译,但所有相应的对象文件名都将返回。

如果 output_dir 如果给定,则对象文件将放在其下,同时保留其原始路径组件。也就是说, foo/bar.c 通常编译为 foo/bar.o (对于UNIX实现);如果 output_dir建造 ,然后编译为 build/foo/bar.o .

宏指令 如果给定,则必须是宏定义列表。宏定义可以是 (name, value) 2元组或A (name,) 1元组。前者定义宏;如果值为 None 定义宏时没有显式值。1元组大小写取消宏的定义。以后的定义/重新定义/取消定义优先。

include_dirs 如果给定,则必须是字符串列表,要添加到默认目录中的目录仅包括此编译的文件搜索路径。

调试 是布尔值;如果为真,编译器将被指示在对象文件中(或与对象文件一起)输出调试符号。

extra_preargsextra_postargs 依赖于实现。在具有命令行概念的平台上(例如unix、dos/windows),它们很可能是字符串列表:额外的命令行参数,用于在编译器命令行前面添加/附加。在其他平台上,请参考实现类文档。在任何情况下,当抽象编译器框架没有减少芥末的时候,它们都被设计成一个逃生舱。

取决于 如果给定,则是所有目标所依赖的文件名列表。如果源文件比Depends中的任何文件旧,则源文件将重新编译。这支持依赖性跟踪,但仅在粗粒度上。

引发 CompileError 失败论。

create_static_lib(objects, output_libname[, output_dir=None, debug=0, target_lang=None])

将一堆东西链接在一起以创建静态库文件。“一堆东西”由以下对象文件列表组成: 物体 ,提供给的额外对象文件 add_link_object() 和/或 set_link_objects() ,提供给 add_library() 和/或 set_libraries() 以及作为 类库 (如果有的话)。

output_libname 应该是库名称,而不是文件名;将从库名称推断该文件名。 output_dir 是放置库文件的目录。

调试 是一个布尔值;如果为真,调试信息将包含在库中(请注意,在大多数平台上,这是编译步骤,这一点很重要: 调试 这里包含的标志只是为了一致性)。

target_lang 是为其编译给定对象的目标语言。这允许特定语言的链接时间处理。

引发 LibError 失败论。

将一堆东西链接在一起以创建一个可执行的或共享的库文件。

“一堆东西”由以下对象文件列表组成: 物体 . output_filename 应该是文件名。如果 output_dir 提供, output_filename 与之相关(即 output_filename 如果需要,可以提供目录组件)。

类库 是要链接的库的列表。这些是库名,而不是文件名,因为它们是以平台特定的方式(例如 foo 变成 libfoo.a 在UNIX上 foo.lib 在DOS/Windows上)。但是,它们可以包含一个目录组件,这意味着链接器将查找特定目录,而不是搜索所有正常位置。

library_dirs 如果提供,则应该是用于搜索指定为裸库名称的库的目录列表(即没有目录组件)。它们位于系统默认值和提供给 add_library_dir() 和/或 set_library_dirs() . runtime_library_dirs 是将嵌入到共享库中并用于搜索其他共享库的目录列表。 * 它 * 取决于运行时。(这可能只与Unix有关。)

export_symbols 是共享库将导出的符号列表。(这似乎只与Windows相关。)

调试 至于 compile()create_static_lib() 在大多数平台上,它实际上很重要(而不是 create_static_lib() ,其中包括 调试 标记主要是为了窗体)。

extra_preargsextra_postargs 至于 compile() (当然,它们为正在使用的特定链接器提供命令行参数除外)。

target_lang 是为其编译给定对象的目标语言。这允许特定语言的链接时间处理。

引发 LinkError 失败论。

链接可执行文件。 output_progname 是可执行文件的名称,而 物体 是要链接的对象文件名列表。其他的参数是关于 link() 方法。

链接共享库。 output_libname 是输出库的名称,而 物体 是要链接的对象文件名列表。其他的参数是关于 link() 方法。

链接共享对象。 output_filename 是将创建的共享对象的名称,而 物体 是要链接的对象文件名列表。其他的参数是关于 link() 方法。

preprocess(source[, output_file=None, macros=None, include_dirs=None, extra_preargs=None, extra_postargs=None])

预处理单个C/C++源文件,命名为 source . 输出将写入名为的文件 output_filestdout 如果 output_file 未提供。 宏指令 是宏定义的列表 compile() ,它将用 define_macro()undefine_macro() . include_dirs 是将添加到默认列表的目录名列表,方法与 add_include_dir() .

引发 PreprocessError 失败论。

以下实用方法由 CCompiler 类,供各种具体子类使用。

executable_filename(basename[, strip_dir=0, output_dir=''])

返回给定文件的可执行文件名 基名 . 通常对于非Windows平台,这与basename相同,而Windows将获得 .exe 补充。

library_filename(libname[, lib_type='static', strip_dir=0, output_dir=''])

返回当前平台上给定库名称的文件名。在Unix上使用 lib_type 属于 'static' 通常是这样的 liblibname.a 而A lib_type 属于 'dynamic' 将采用这种形式 liblibname.so .

object_filenames(source_filenames[, strip_dir=0, output_dir=''])

返回给定源文件的对象文件名。 source_filenames 应该是文件名列表。

shared_object_filename(basename[, strip_dir=0, output_dir=''])

返回给定文件名的共享对象文件名 基名 .

execute(func, args[, msg=None, level=1])

调用 distutils.util.execute() . 此方法调用python函数 func 用给定的参数 args ,在登录并考虑 dry_run flag。

spawn(cmd)

调用 distutils.util.spawn() .这将调用一个外部进程来运行给定的命令。

mkpath(name[, mode=511])

调用 distutils.dir_util.mkpath() . 这将创建一个目录和任何丢失的祖先目录。

move_file(src, dst)

调用 distutils.file_util.move_file() . 更名 srcdst .

announce(msg[, level=1])

使用 distutils.log.debug() .

warn(msg)

写一条警告信息 msg 标准误差。

debug_print(msg)

如果 调试 此上设置了标志 CCompiler 实例,打印 msg 到标准输出,否则什么也不做。

9.3. distutils.unixccompiler ---Unix C编译器

此模块提供 UnixCCompiler 类,的子类 CCompiler 它处理典型的UNIX风格命令行C编译器:

  • 宏定义为 -Dname[=value]

  • 宏未定义 -Uname

  • 包括指定的搜索目录 -Idir

  • 使用指定的库 -llib

  • 用指定的库搜索目录 -Ldir

  • 编译处理者 cc (或类似)可执行的 -c 选项:编译 .c.o

  • 链接静态库处理者 ar 命令(可能与 ranlib

  • 链接共享库由处理 cc -shared

9.4. distutils.msvccompiler ---微软编译器

本模块提供 MSVCCompiler ,摘要的实现 CCompiler 用于Microsoft Visual Studio的类。通常,扩展模块需要使用编译Python时使用的编译器进行编译。对于python 2.3及更早版本,编译器是Visual Studio 6。对于python 2.4和2.5,编译器是Visual Studio.NET 2003。

MSVCCompiler 通常会自行选择正确的编译器、链接器等。要覆盖此选项,环境变量 DISTUTILS_USE_SDKMSSdk 必须同时设置。 MSSdk 指示当前环境已由SDK的 SetEnv.Cmd 脚本,或者环境变量在安装SDK时已注册; DISTUTILS_USE_SDK 指示distutils用户已作出明确选择,用以重写编译器选择 MSVCCompiler .

9.5. distutils.bcppcompiler ---Borland编译器

本模块提供 BorlandCCompiler ,摘要的子类 CCompiler 类为Borland C++编译器。

9.6. distutils.cygwincompiler ——Cygwin编译器

此模块提供 CygwinCCompiler 类,的子类 UnixCCompiler 它处理GNUC编译器到Windows的cygwin端口。它还包含处理gcc的mingw32端口的mingw32ccompiler类(与非cygwin模式下的cygwin相同)。

9.7. distutils.archive_util ---存档实用程序

这个模块提供了一些创建归档文件的功能,例如tarballs或zipfiles。

distutils.archive_util.make_archive(base_name, format[, root_dir=None, base_dir=None, verbose=0, dry_run=0])

创建存档文件(例如 ziptarbase_name 是要创建的文件名,减去任何特定格式的扩展名; 格式 是存档格式:其中之一 ziptargztarbztarxztarztar . root_dir 是一个将成为存档根目录的目录;即,我们通常 chdir 进入之内 root_dir 在创建存档之前。 base_dir 是我们开始存档的目录;即。 base_dir 将是存档中所有文件和目录的通用前缀。 root_dirbase_dir 两者都默认为当前目录。返回存档文件的名称。

在 3.5 版更改: 增加了对 xztar 格式。

distutils.archive_util.make_tarball(base_name, base_dir[, compress='gzip', verbose=0, dry_run=0])

'从中和下的所有文件创建一个(可选压缩)归档为tar文件 base_dir . 压缩 必须是 'gzip' (违约), 'bzip2''xz''compress'None .对于 'compress' 方法压缩实用程序 compress 必须在默认程序搜索路径上,因此这可能是特定于UNIX的。输出tar文件将被命名为 base_dir.tar ,可能加上适当的压缩扩展 (.gz.bz2.xz.Z )返回输出文件名。

在 3.5 版更改: 增加了对 xz 压缩。

distutils.archive_util.make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])

从中和下的所有文件创建zip文件 base_dir . 输出zip文件将被命名为 base_name + .zip . 要么使用 zipfile python模块(如果可用)或infozip zip 实用程序(如果已安装并在默认搜索路径上找到)。如果两种工具都不可用,则引发 DistutilsExecError . 返回输出zip文件的名称。

9.8. distutils.dep_util ---依赖性检查

该模块提供了执行简单的、基于时间戳的文件和文件组依赖性的功能;同时,完全基于此类时间戳依赖性分析的功能。

distutils.dep_util.newer(source, target)

返回true if source 存在且最近修改的时间超过 目标 ,或者,如果 source 存在和 目标 不存在。如果两者都存在并且 目标 是同一年龄还是比 source . 提高 DistutilsFileError 如果 source 不存在。

distutils.dep_util.newer_pairwise(sources, targets)

并行遍历两个文件名列表,测试每个源是否比其对应的目标更新。返回一对列表( source目标 )根据 newer() .

distutils.dep_util.newer_group(sources, target[, missing='error'])

返回true if 目标 中列出的任何文件都已过期 source . 换句话说,如果 目标 存在且比中的每个文件都新 source ,返回false;否则返回true。 丢失的 控制源文件丢失时的操作;默认 ('error' )是用一个 OSError 从内部 os.stat() 如果是 'ignore' ,我们会自动删除所有丢失的源文件;如果是 'newer' ,任何丢失的源文件都会使我们假设 目标 已经过时了(这在“干运行”模式中很方便:它会使您假装执行由于缺少输入而无法工作的命令,但这并不重要,因为实际上您不会运行这些命令)。

9.9. distutils.dir_util ---目录树操作

此模块提供在目录和目录树上操作的功能。

distutils.dir_util.mkpath(name[, mode=0o777, verbose=0, dry_run=0])

创建一个目录和任何丢失的祖先目录。如果目录已经存在(或如果 name 是空字符串,这意味着当前目录(当然存在),然后什么也不做。提高 DistutilsFileError 如果无法创建某个目录(例如某个子路径存在,但是文件而不是目录)。如果 verbose 如果为真,请将每个mkdir的一行摘要打印到stdout。返回实际创建的目录列表。

distutils.dir_util.create_tree(base_dir, files[, mode=0o777, verbose=0, dry_run=0])

在下面创建所有空目录 base_dir 需要投入 文件夹 在那里。 base_dir 只是一个不一定存在的目录的名称; 文件夹 是要解释的文件名相对于 base_dir . base_dir +中每个文件的目录部分 文件夹 如果它不存在,将被创建。 modeverbosedry_run 旗子代表 mkpath() .

distutils.dir_util.copy_tree(src, dst[, preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=0, verbose=0, dry_run=0])

复制整个目录树 src 到新位置 dst . 两个 srcdst 必须是目录名。如果 src 不是目录,引发 DistutilsFileError . 如果 dst 不存在,它是用创建的 mkpath() . 复制的最终结果是 src 复制到 dst 和目录 src 以递归方式复制到 dst . 使用输出名称返回已复制或可能已复制的文件列表。返回值不受 更新dry_run :它只是下面所有文件的列表 src ,名称改为 dst .

preserve_modepreserve_times 和…一样 distutils.file_util.copy_file() ;请注意,它们只适用于常规文件,而不适用于目录。如果 preserve_symlinks 是的,符号链接将被复制为符号链接(在支持它们的平台上!);否则(默认),将复制符号链接的目标。 更新verbose 和…一样 copy_file() .

中的文件 src 开始于 .nfs 跳过(有关这些文件的详细信息,请参阅 NFS FAQ page

在 3.3.1 版更改: 忽略了NFS文件。

distutils.dir_util.remove_tree(directory[, verbose=0, dry_run=0])

递归删除 目录 以及它下面的所有文件和目录。忽略任何错误(除了报告给 sys.stdout 如果 verbose 是真的)。

9.10. distutils.file_util ---单文件操作

此模块包含一些用于操作单个文件的实用程序功能。

distutils.file_util.copy_file(src, dst[, preserve_mode=1, preserve_times=1, update=0, link=None, verbose=0, dry_run=0])

拷贝文件 srcdst .如果 dst 是一个目录,那么 src 以相同的名称复制到那里;否则,它必须是文件名。(如果文件存在,它将被无情地击倒。)如果 preserve_mode 如果为真(默认),则复制文件的模式(类型和权限位,或当前平台上类似的内容)。如果 preserve_times 为真(默认值),同时复制上次修改和上次访问时间。如果 更新 是真的, src 只有在 dst 不存在,或者 dst 确实存在,但比 src .

link 允许您进行硬链接(使用 os.link() )或符号链接(使用 os.symlink() )而不是复制:设置为 'hard''sym' 如果是 None (默认),文件将被复制。不要设置 link 在不支持它的系统上: copy_file() 不检查硬链接或符号链接是否可用。它使用 _copy_file_contents() 复制文件内容。

返回元组 (dest_name, copied)dest_name 是输出文件的实际名称,并且 已复制 如果文件被复制(或如果 dry_run 真的)。

distutils.file_util.move_file(src, dst[, verbose, dry_run])

移动文件 srcdst .如果 dst 是一个目录,文件将以相同的名称移动到其中;否则, src 刚重命名为 dst . 返回文件的新全名。

警告

在Unix上处理跨设备移动,使用 copy_file() . 其他系统呢?

distutils.file_util.write_file(filename, contents)

创建一个名为 filename内容 (没有行终止符的字符串序列)。

9.11. distutils.util ---其他公用功能

此模块包含其他不适合任何其他实用程序模块的分类位和件。

distutils.util.get_platform()

返回标识当前平台的字符串。这主要用于区分特定于平台的构建目录和特定于平台的构建分发。通常包括操作系统名称、版本和体系结构(如“os.uname()”所提供),尽管所包含的确切信息取决于操作系统;例如,在Linux上,内核版本并不特别重要。

返回值示例:

  • linux-i586

  • linux-alpha

  • solaris-2.6-sun4u

对于非POSIX平台,当前只返回 sys.platform .

对于Mac OS X系统,OS版本反映运行二进制文件的最低版本(即 MACOSX_DEPLOYMENT_TARGET 在构建python的过程中),不是当前系统的操作系统版本。

对于基于Mac OS X的通用二进制,体系结构值反映通用二进制状态,而不是当前处理器的体系结构。对于32位通用二进制文件,体系结构是 fat 对于64位通用二进制文件,体系结构是 fat64 对于4路通用二进制文件,体系结构是 universal . 从python 2.7和python 3.2开始, fat3 用于3路通用构建(PPC、i386、x86 U 64)和 intel 用于具有i386和x86_体系结构的通用构建

Mac OS X上返回值的示例:

  • macosx-10.3-ppc

  • macosx-10.3-fat

  • macosx-10.5-universal

  • macosx-10.6-intel

对于AIX,Python 3.9及更高版本返回一个以“AIX”开头的字符串,后跟其他字段(用 '-' )表示AIX版本、版本和技术级别(第一个字段)、构建日期(第二个字段)和位大小(第三个字段)的组合值。Python 3.8和更早版本在AIX版本和发行版中只返回了一个额外的字段。

AIX上返回值的示例:

  • aix-5307-0747-32 #在AIX上构建32位 oslevel -s :5300-07-00-0000号

  • aix-7105-1731-64 #在AIX上构建64位 oslevel -s :7100-05-01-1731

  • aix-7.2 #Python 3.8及更早版本中报告的遗留表单

在 3.9 版更改: AIX平台字符串格式现在还包括技术级别、构建日期和ABI位大小。

distutils.util.convert_path(pathname)

返回“pathname”作为可以在本机文件系统上使用的名称,即在“/”上拆分它,然后使用当前目录分隔符再次将其放回一起。之所以需要,是因为安装脚本中的文件名总是以Unix样式提供的,并且在我们实际在文件系统中使用它们之前必须转换为本地约定。引发 ValueError 在非UNIX ISH系统上,如果 路径名 要么以斜线开头,要么以斜线结尾。

distutils.util.change_root(new_root, pathname)

返回 路径名 具有 new_root 准备好的如果 路径名 是相对的,这相当于 os.path.join(new_root,pathname) 否则,它需要 路径名 相对的,然后连接这两个,这在DOS/Windows上很棘手。

distutils.util.check_environ()

确保“os.environ”具有我们保证用户可以在配置文件、命令行选项等中使用的所有环境变量。目前这包括:

  • HOME -用户的主目录(仅限Unix)

  • PLAT -当前平台的描述,包括硬件和操作系统(请参见 get_platform()

distutils.util.subst_vars(s, local_vars)

对执行shell/perl样式的变量替换 s . 每次发生 $ 后面跟一个名称被认为是一个变量,变量由 local_vars 字典,或在 os.environ 如果不在 local_vars . os.environ 首先检查/扩充以确保它包含某些值:请参见 check_environ() . 提高 ValueError 对于任何在中未找到的变量 local_varsos.environ .

注意,这不是一个成熟的字符串插值函数。有效的 $variable 只能由大写和小写字母、数字和下划线组成。没有或()样式的报价。

distutils.util.split_quoted(s)

根据unix类似shell的引号和反斜杠规则拆分字符串。简而言之:只要这些空格不是反斜杠转义的,或者在带引号的字符串中,单词就由空格分隔。单引号和双引号是等效的,引号字符可以反斜杠转义。反斜杠从任何两个字符的转义序列中剥离,只留下转义字符。从任何带引号的字符串中删除引号字符。返回单词列表。

distutils.util.execute(func, args[, msg=None, verbose=0, dry_run=0])

执行一些影响外部世界的操作(例如,写入文件系统)。这种行为是特殊的,因为它们被 dry_run 标志。这个方法为您处理所有的官僚机构;您所要做的就是提供调用的函数和参数元组(以体现正在执行的“外部操作”),以及一个可选的消息来打印。

distutils.util.strtobool(val)

将真值的字符串表示形式转换为真(1)或假(0)。

真值是 yyesttrueon1 ;错误值为 nnoffalseoff0 .引发 ValueError 如果 val 还有别的吗?

distutils.util.byte_compile(py_files[, optimize=0, force=0, prefix=None, base_dir=None, verbose=1, dry_run=0, direct=None])

字节编译一组python源文件到 .pyc 文件中的 __pycache__ 子目录(请参见 PEP 3147PEP 488py_files 是要编译的文件列表;任何不以 .py 被悄悄地跳过。 optimize 必须是以下之一:

  • 0 -不优化

  • 1 -正常优化(如 python -O

  • 2 -额外优化(如 python -OO

如果 force 如果为真,则不管时间戳如何,都会重新编译所有文件。

源文件名编码在 bytecode 文件默认为中列出的文件名 py_files ;您可以使用 前缀巴迪尔 . 前缀 是将从每个源文件名中删除的字符串,并且 base_dir 是将在 前缀 被剥夺。你可以提供其中一个或两个(或两者都不提供) 前缀base_dir 如你所愿。

如果 dry_run 是真的,实际上不会做任何会影响文件系统的事情。

字节编译要么直接在这个解释器进程中用标准 py_compile 模块,或者通过编写临时脚本并执行它来间接实现。通常,你应该让 byte_compile() 找出是否使用直接编译(有关详细信息,请参阅源代码)。这个 直接的 在间接模式下生成的脚本使用标志;除非您知道自己在做什么,否则将其设置为 None .

在 3.2.3 版更改: 创造 .pyc 文件与 import magic tag 以他们的名义 __pycache__ 子目录,而不是当前目录中没有标记的文件。

在 3.5 版更改: 创造 .pyc 文件根据 PEP 488 .

distutils.util.rfc822_escape(header)

返回的版本 header 为包含在 RFC 822 标题,确保每行换行后有8个空格。注意,它不会对字符串进行其他修改。

9.12. distutils.dist ——分配类

此模块提供 Distribution 类,表示正在构建/安装/分发的模块分发。

9.13. distutils.extension ---扩展类

此模块提供 Extension 类,用于描述安装脚本中的C/C++扩展模块。

9.14. distutils.debug ---distuils调试模式

此模块提供调试标志。

9.15. distutils.errors ---distutils异常

提供distutils模块使用的异常。请注意,distutils模块可能会引发标准异常;特别是,对于明显是最终用户的错误(例如错误的命令行参数),通常会引发SystemExit。

此模块可安全用于 from ... import * 模式;它只导出名称以开头的符号 Distutils 并结束 Error .

9.16. distutils.fancy_getopt ---封装标准getopt模块

这个模块提供了一个围绕标准的封装器 getopt 提供以下附加功能的模块:

  • 短期权和长期权捆绑在一起

  • 选项有帮助字符串,因此 fancy_getopt() 可能会创建完整的使用摘要

  • 选项设置传入对象的属性

  • 布尔值选项可以有“负别名”--例如 --quiet 是的“负面别名” --verbose 然后 --quiet 在命令行集合上 verbose 错了。

distutils.fancy_getopt.fancy_getopt(options, negative_opt, object, args)

封装函数。 option 是一个列表 (long_option, short_option, help_string) 3个元组,如构造函数中所述 FancyGetopt . negative_opt 应该是将选项名映射到选项名的字典,键和值都应该在 option 名单。 object 是用于存储值的对象(请参见 getopt() 方法 FancyGetopt 类)。 args 是参数列表。将使用 sys.argv[1:] 如果你通过 None 作为 args .

distutils.fancy_getopt.wrap_text(text, width)

包裹 text 小于 宽度 宽的。

class distutils.fancy_getopt.FancyGetopt([option_table=None])

选项_table是3个元组的列表: (long_option, short_option, help_string)

如果一个选项接受一个参数, long_option 应该有 '=' 追加; short_option 应该只有一个字符,不 ':' 无论如何。 short_option 应该是 None 如果A long_option 没有对应的 short_option . 所有选项元组都必须有长选项。

这个 FancyGetopt 类提供以下方法:

FancyGetopt.getopt([args=None, object=None])

分析参数中的命令行选项。作为属性存储在 object .

如果 argsNone 或未提供,使用 sys.argv[1:] . 如果 objectNone 或未提供,创建新的 OptionDummy 实例,在其中存储选项值,并返回元组 (args, object) . 如果 object 已提供,已在适当位置进行修改,并且 getopt() 只是回报 args ;在这两种情况下,返回的 args 是传入的的修改副本 args 列表,保持不变。

FancyGetopt.get_option_order()

返回的列表 (option, value) 上一次运行处理的元组 getopt() 引发 RuntimeError 如果 getopt() 还没调用。

FancyGetopt.generate_help([header=None])

从选项表为此生成帮助文本(字符串列表,每个建议的输出行一个) FancyGetopt 对象。

如果提供,打印提供的 header 在帮助的顶端。

9.17. distutils.filelist ---文件列表类

此模块提供 FileList 类,用于查找文件系统和构建文件列表。

9.18. distutils.log ---简单 PEP 282 -样式日志记录

9.19. distutils.spawn ---生成子流程

此模块提供 spawn() 功能,各种平台特定功能的前端,用于在子流程中启动另一个程序。还提供 find_executable() 搜索给定可执行文件名的路径。

9.20. distutils.sysconfig ---系统配置信息

这个 distutils.sysconfig 模块提供对Python低级配置信息的访问。可用的特定配置变量在很大程度上取决于平台和配置。特定变量取决于运行的特定版本的python的构建过程;这些变量是在 Makefile 以及在UNIX系统上与python一起安装的配置头。调用配置头 pyconfig.h 对于从2.2开始的Python版本,以及 config.h 对于早期版本的python。

提供了一些附加函数,这些函数对 distutils 包裹。

distutils.sysconfig.PREFIX

结果 os.path.normpath(sys.prefix) .

distutils.sysconfig.EXEC_PREFIX

结果 os.path.normpath(sys.exec_prefix) .

distutils.sysconfig.get_config_var(name)

返回单个变量的值。这相当于 get_config_vars().get(name) .

distutils.sysconfig.get_config_vars(...)

返回一组变量定义。如果没有参数,则返回将配置变量名称映射到值的字典。如果提供了参数,它们应该是字符串,并且返回值将是一个提供相关值的序列。如果给定的名称没有对应的值, None 将包含该变量。

distutils.sysconfig.get_config_h_filename()

返回配置头的完整路径名。对于Unix,这将是 configure 脚本;对于其他平台,头将直接由python源代码发行版提供。该文件是平台特定的文本文件。

distutils.sysconfig.get_makefile_filename()

返回的完整路径名 Makefile 用于生成python。对于Unix,这将是由 configure 脚本;其他平台的含义将有所不同。该文件是平台特定的文本文件(如果存在)。此函数仅在POSIX平台上有用。

distutils.sysconfig.get_python_inc([plat_specific[, prefix]])

返回常规或依赖于平台的C include文件的目录。如果 plat_specific 如果为true,则返回与平台相关的include目录;如果为false或省略,则返回与平台无关的目录。如果 前缀 如果给定,它将用作前缀而不是 PREFIX 或作为exec前缀而不是 EXEC_PREFIX 如果 plat_specific 是真的。

distutils.sysconfig.get_python_lib([plat_specific[, standard_lib[, prefix]]])

返回用于常规或依赖于平台的库安装的目录。如果 plat_specific 如果为true,则返回与平台相关的include目录;如果为false或省略,则返回与平台无关的目录。如果 前缀 如果给定,它将用作前缀而不是 PREFIX 或作为exec前缀而不是 EXEC_PREFIX 如果 plat_specific 是真的。如果 standard_lib 如果为true,则返回标准库的目录,而不是安装第三方扩展的目录。

以下功能仅用于 distutils 包裹。

distutils.sysconfig.customize_compiler(compiler)

执行任何特定于平台的自定义 distutils.ccompiler.CCompiler 实例。

此时仅在UNIX上需要此函数,但应始终调用此函数以支持前向兼容性。它插入不同Unix风格的信息,并存储在python的 Makefile .此信息包括选定的编译器、编译器和链接器选项,以及链接器用于共享对象的扩展名。

这个函数更为特殊,应该只从Python自己的构建过程中使用。

distutils.sysconfig.set_python_build()

通知 distutils.sysconfig 它正被用作Python构建过程的一部分的模块。这会改变文件的很多相对位置,允许它们位于构建区域而不是安装的Python中。

9.21. distutils.text_file ---textfile类

此模块提供 TextFile 类,该类为文本文件提供接口,这些文本文件(可选)处理剥离注释、忽略空行以及用反斜杠连接行。

class distutils.text_file.TextFile([filename=None, file=None, **options])

这个类提供了一个类似文件的对象,它可以处理在处理一个文本文件时通常需要做的所有事情,该文本文件有一些逐行语法:strip comments(只要 # 是您的注释字符)、跳过空行、通过换行符(即行尾的反斜杠)、去掉前导空格和/或尾随空格连接相邻行。所有这些都是可选的和独立控制的。

该类提供 warn() 方法,以便生成报告物理行号的警告消息,即使所讨论的逻辑行跨越多个物理行。还提供 unreadline() 实现一次一行的前瞻性。

TextFile 创建实例时使用 filenamefile 或者两者兼而有之。 RuntimeError 如果两者都是 None . filename 应该是一个字符串,并且 file 文件对象(或提供 readline()close() 方法)。建议您至少提供 filename ,这样 TextFile 可以将其包含在警告消息中。如果 file 未提供, TextFile 使用 open() 内置功能。

这些选项都是布尔值,并影响 readline()

选项名称

描述

违约

strip_comments

剥离自 '#' 到行尾,以及 '#' ---除非用反斜杠转义。

lstrip_ws

在返回前从每行中删除前导空格

rstrip_ws

去掉尾随空格(包括行终止符!)从每一行返回。

skip_blanks

跳过空的行 * 之后 * 删除注释和空白。(如果lstrip-ws和rstrip-ws都是假的,那么一些行可能只包含空白:这些将 * 不 * 被跳过,即使 skip_blanks 是真的。)

join_lines

如果反斜杠是一行中删除注释和空白后的最后一个非换行符,则将下一行连接到该行以形成一个逻辑行;如果N个连续行以反斜杠结尾,则N+1物理行将连接成一个逻辑行。

collapse_join

从连接到前一行的行中去掉前导空格;只有在 (join_lines and not lstrip_ws)

请注意,自 rstrip_ws 可以去掉尾随的换行符,语义为 readline() 必须与内置文件对象的不同 readline() 方法!特别地, readline() 返回 None 对于文件结尾:如果 rstrip_ws 是真的 skip_blanks 不是。

open(filename)

打开新文件 filename . 这将覆盖任何 filefilename 构造函数参数。

close()

关闭当前文件并忘记我们所知道的关于它的一切(包括文件名和当前行号)。

warn(msg[, line=None])

打印(到stderr)绑定到当前文件中当前逻辑行的警告消息。如果文件中的当前逻辑行跨越多个物理行,则警告指的是整个范围,例如 "lines 3-5" . 如果 line 如果提供,它将覆盖当前行号;它可以是一个列表或元组来指示物理行的范围,也可以是单个物理行的整数。

readline()

从当前文件(或者从内部缓冲区)读取并返回一个逻辑行(如果之前的行“未读”)。 unreadline() )。如果 join_lines 选项为true,这可能涉及读取连接到单个字符串中的多个物理行。更新当前的行号,因此调用 warn() 之后 readline() 对刚刚读取的物理行发出警告。返回 None 在文件结尾,因为如果 rstrip_ws 是真的 strip_blanks 不是。

readlines()

读取并返回当前文件中剩余的所有逻辑行的列表。这会将当前行号更新为文件的最后一行。

unreadline(line)

line (字符串)到一个内部缓冲区上,该缓冲区将在将来检查 readline() 调用。便于实现具有一次一行的前瞻性的解析器。注意“未读”的行 unreadline() 在阅读时不会被重新清洗(去除空白或其他) readline() . 如果有多个调用打给 unreadline() 在调用之前 readline() ,这些行将以最新的第一个顺序返回。

9.22. distutils.version ---版本号类

9.23. distutils.cmd ---distutils命令的抽象基类

此模块提供抽象基类 Command .

class distutils.cmd.Command(dist)

用于定义命令类的抽象基类,即distutils的“worker bees”。对命令类的一个有用的类比是将它们视为具有调用的局部变量的子例程 option . 期权在 initialize_options() 并在 finalize_options() ,两者都必须由每个命令类定义。这两者之间的区别是必要的,因为选项值可能来自外部世界(命令行、配置文件等),任何依赖于其他选项的选项都必须在处理完这些外部影响之后计算出来---因此 finalize_options() . 子例程的主体是 run() 方法,也必须由每个命令类实现。

类构造函数接受单个参数 dist ,A Distribution 实例。

9.24. 创建新的distutils命令

本节概述了创建新distutils命令的步骤。

新命令存在于 distutils.command 包裹。该目录中有一个名为 command_template .将此文件复制到与要实现的新命令同名的新模块中。这个模块应该实现一个与模块(和命令)同名的类。例如,创建命令 peel_banana (以便用户可以运行 setup.py peel_banana 你可以复制 command_templatedistutils/command/peel_banana.py ,然后编辑它以实现类 peel_banana 一个子类 distutils.cmd.Command .

亚类 Command 必须定义以下方法。

Command.initialize_options()

为该命令支持的所有选项设置默认值。请注意,这些默认值可能被其他命令、安装脚本、配置文件或命令行覆盖。因此,这不是选项之间代码依赖关系的位置;通常, initialize_options() 实现只是一堆 self.foo = None 任务。

Command.finalize_options()

为该命令支持的所有选项设置最终值。这总是尽可能晚地调用,即在完成了命令行或其他命令的任何选项分配之后。因此,这是代码选项依赖项的位置:如果 foo 取决于 bar ,则可以安全设置 foobar 只要 foo 仍然具有分配给它的相同值 initialize_options() .

Command.run()

命令的原因:执行它存在的要执行的操作,由中初始化的选项控制。 initialize_options() ,由其他命令、安装脚本、命令行和配置文件自定义,并在 finalize_options() . 所有终端输出和文件系统交互都应该由 run() .

Command.sub_commands

sub_commands 将命令“族”的概念形式化,例如 install 作为带有子命令的父级 install_libinstall_headers 等。命令系列的父级定义 sub_commands 作为类属性;它是由两个元组组成的列表 (command_name, predicate)command_name 字符串和 谓语 函数、字符串或 None . 谓语 父命令的一种方法,用于确定相应的命令是否适用于当前情况。(例如) install_headers 仅当我们有任何要安装的C头文件时才适用。)如果 谓语None ,该命令始终适用。

sub_commands 通常在 end 因为谓词可以是类的方法,所以它们必须已经定义。典型的例子是 install 命令。

9.25. distutils.command ---单个distutils命令

9.26. distutils.command.bdist ---构建二进制安装程序

9.27. distutils.command.bdist_packager ---封装工的抽象基类

9.28. distutils.command.bdist_dumb ---构建一个“哑”安装程序

9.29. distutils.command.bdist_msi ---生成Microsoft Installer二进制包

class distutils.command.bdist_msi.bdist_msi

3.9 版后已移除: 使用bdist车轮(车轮套装)。

建立一个 Windows Installer (.msi)二进制包。

9.30. distutils.command.bdist_rpm ---构建一个二进制分发,作为Redhat RPM和SRPM

9.31. distutils.command.sdist ---建立源分发

9.32. distutils.command.build ---生成包的所有文件

9.33. distutils.command.build_clib ---在包中构建任意C库

9.34. distutils.command.build_ext ---在包中构建任何扩展

9.35. distutils.command.build_py ---生成包的.py/.pyc文件

class distutils.command.build_py.build_py
class distutils.command.build_py.build_py_2to3

build-py的另一种实现,它也在要安装的每个.py文件上运行2to3转换库。要在setup.py文件中对设计为同时运行python 2.x和3.x的分发版使用此功能,请添加:

try:
    from distutils.command.build_py import build_py_2to3 as build_py
except ImportError:
    from distutils.command.build_py import build_py

到setup.py及更高版本:

cmdclass = {'build_py': build_py}

调用setup()。

9.36. distutils.command.build_scripts ---构建包的脚本

9.37. distutils.command.clean ---清洁封装制造区

此命令删除由创建的临时文件 build 以及它的子命令,比如中介编译的对象文件。与 --all 选项,将删除完整的生成目录。

已生成扩展模块 in place 不会被清除,因为它们不在生成目录中。

9.38. distutils.command.config ---执行包配置

9.39. distutils.command.install ---安装软件包

9.40. distutils.command.install_data ---从包中安装数据文件

9.41. distutils.command.install_headers 从包中安装C/C++头文件

9.42. distutils.command.install_lib ---从包安装库文件

9.43. distutils.command.install_scripts ---从包中安装脚本文件

9.44. distutils.command.register ---用python包索引注册模块

这个 register 命令用python包索引注册包。这在中有更详细的描述。 PEP 301 .

9.45. distutils.command.check ---检查包的元数据

这个 check 命令对包的元数据执行一些测试。例如,它验证所有必需的元数据是否作为传递给 setup() 功能。