3. 正在写入安装程序配置文件¶
注解
本文件仅保留至 setuptools
https://setuptools.readthedocs.io/en/latest/setuptools.html上的文档独立地涵盖了此处当前包含的所有相关信息。
通常,不可能写下构建分发所需的所有内容 先验的 :您可能需要从用户或用户系统获取一些信息才能继续。只要信息相当简单——例如搜索C头文件或库的目录列表——然后提供一个配置文件, setup.cfg
对于用户来说,编辑是一种既便宜又容易的方法。配置文件还允许您为任何命令选项提供默认值,然后安装程序可以在命令行上或通过编辑配置文件来覆盖该选项。
安装程序配置文件是安装程序脚本之间的一个有用的中间位置,理想情况下,安装程序不了解它。 1 ---以及安装脚本的命令行,它不在您的控制范围内,完全由安装程序决定。事实上, setup.cfg
(以及目标系统上存在的任何其他distuils配置文件)在安装脚本的内容之后,但在命令行之前进行处理。这有几个有用的结果:
安装程序可以覆盖您输入的某些内容
setup.py
通过编辑setup.cfg
您可以为不容易在中设置的选项提供非标准默认值。
setup.py
安装程序可以覆盖
setup.cfg
使用命令行选项setup.py
配置文件的基本语法很简单:
[command]
option=value
...
在哪里? 命令 是distutils命令之一(例如 build_py , install ) option 是命令支持的选项之一。可以为每个命令提供任意数量的选项,文件中可以包含任意数量的命令节。空白行将被忽略,注释也是如此,它们从 '#'
字符,直到行尾。长选项值可以通过缩进连续行跨多行拆分。
您可以通过Universal找到特定命令支持的选项列表 --help
选项,例如
$ python setup.py --help build_ext
[...]
Options for 'build_ext' command:
--build-lib (-b) directory for compiled extension modules
--build-temp (-t) directory for temporary files (build by-products)
--inplace (-i) ignore build-lib and put compiled extensions into the
source directory alongside your pure Python modules
--include-dirs (-I) list of directories to search for header files
--define (-D) C preprocessor macros to define
--undef (-U) C preprocessor macros to undefine
--swig-opts list of SWIG command line options
[...]
注意,一个选项拼写为 --foo-bar
命令行上的拼写 foo_bar
在配置文件中。
例如,假设您希望扩展被“就地”构建,也就是说,您有一个扩展 pkg.ext
,您需要编译的扩展文件 (ext.so
在Unix上,假设)与纯Python模块放在同一个源目录中 pkg.mod1
和 pkg.mod2
. 你可以一直使用 --inplace
命令行上的选项,以确保:
python setup.py build_ext --inplace
但这要求您始终指定 build_ext 明确命令,并记住提供 --inplace
. 一种更简单的方法是“设置并忽略”此选项,方法是将其编码为 setup.cfg
,此分发的配置文件:
[build_ext]
inplace=1
这将影响此模块分发的所有版本,无论您是否明确指定 build_ext . 如果你包括 setup.cfg
在源代码发行版中,它还会影响最终用户的构建——这对于这个选项来说可能是个坏主意,因为在适当的地方构建扩展会破坏模块发行版的安装。不过,在某些特殊情况下,模块是在其安装目录中构建的,因此这是一种很有用的能力。(不过,分发希望在安装目录中构建的扩展几乎总是一个坏主意。)
另一个例子是:某些命令有很多选项,它们在运行时不会发生变化;例如, bdist_rpm 需要知道生成用于创建RPM分发的“spec”文件所需的所有信息。其中一些信息来自安装脚本,一些信息由distuils自动生成(例如安装的文件列表)。但其中一些必须作为选择提供给 bdist_rpm 在命令行上执行每一次运行都会非常繁琐。因此,下面是distutils自己的代码片段 setup.cfg
:
[bdist_rpm]
release = 1
packager = Greg Ward <gward@python.net>
doc_files = CHANGES.txt
README.txt
USAGE.txt
doc/
examples/
请注意 doc_files
选项只是一个空格分隔的字符串,跨多行拆分以提高可读性。
参见
- 配置文件的语法 在“安装python模块”中
有关配置文件的更多信息,请参阅系统管理员手册。
脚注
- 1
在distutils完全支持自动配置之前,这种理想可能无法实现。