关于在setup.cfg文件中引用变量
您可以在setup.cfg
文件中引用其他变量/选项。语法是$variable
,例如:
[install]
prefix = /my/prefix
install-scripts = $base/scripts
请注意,我使用了
$base
,因为该变量受到您在
setup.cfg
中提供的前缀设置和使用
setup.py install --prefix
命令行选项影响。在这种情况下,除非用户使用命令行指定另一个前缀,否则您的脚本将安装到
/my/prefix/scripts
。
同样可以在
setup.cfg
中使用
$prefix
,但似乎不受自定义配置的影响。
访问
setup()
之后
setup.py
中变量的值
还可以读取
setup.py
中所有变量/选项的值。函数
setup
返回类
Distribution的实例。该类按命令(例如install)分组保存所有变量的值,并且您可以使用
get_option_dict
方法获取它们。例如:
from distutils.core import setup
d = setup(
)
print(d.get_option_dict('install'))
将打印:
{'prefix': ('setup.cfg', '/my/prefix'),
'install_scripts': ('setup.cfg', '$base/scripts')}
在 setup.py 的 setup()
之前访问变量的值
在运行 setup()
之前,也可以获得类Distribution的实例。为此,我们可以复制 setup()
内部正在执行的操作,并自己构建该类的一个实例。然后,可以基于某些安装选项的值来决定设置参数的值。我们看一个例子:
from distutils.core import setup
from distutils.dist import Distribution
dist = Distribution()
dist.parse_config_files()
dist.parse_command_line()
prefix = dist.get_option_dict('install')['prefix'][1]
print("Prefix is: " + prefix)
setup(data_files=[('/first/path/to/data' if prefix == '/some/prefix'
else '/second/path/to/data',
['data.txt'])])
ConfigParser
?如果依赖Python标准库是一个问题,那么可以使用一个简单的、单一目的的解析器,在您自己的模块中编写来解析配置文件。 - NuclearPeonConfigParser
将无用。 - zaufisetup.py
的方法,使其1:
读取setup.cfg
文件并获取其所有值,2:
将setup.cfg
中的值与setup.py
的命令行参数关联起来,而不使用ConfigParser
,并且3:
运行安装过程。在尝试解决这个问题之前,我只是想确认您的意图。 - NuclearPeonsetup.py
中访问真正的前缀(通过CLI或从setup.cfg
指定,我不在乎)。我坚信它确切地知道用户想要安装我的软件包的位置,所以问题是_如何访问和使用真正的前缀_。对于构建系统(如CMake或autotools)或打包工具(如RPM/DEB规范),您可以随时轻松访问它。为什么setup.py
没有类似的东西(或者至少很难/不明显)? - zaufisetup.py
中解析setup.cfg
呢?毕竟,它只是一个带有部分的简单键/值配置文件。真正的问题是,一旦你有了一个嵌套的选项字典,你想做什么呢? - James Mills