参考 setup.cfg 和 setup.py 中现有的 distutils 选项
Referring to existing distutils options inside setup.cfg and setup.py
我正在使用 Python 2.7 和 Distutils 来分发和安装我自己创建的包。我的 setup.cfg 看起来像这样:
[install]
prefix=/usr/local/MODULENAME
record=installation.txt
我有两个问题:
是否可以在定义其他setup.cfg选项时引用setup.cfg中设置的变量(但也使用命令行选项)?例如,对于:
install-scripts=PREFIX/my-scripts
我希望 PREFIX
是在 setup.cfg 中或使用 --prefix 命令行参数定义的前缀,类似于使用 ConfigParser 时变量的插值。
是否可以从我的 setup.py 中引用 setup.cfg 中设置的变量,而无需使用 ConfigParser 手动解析配置文件?
引用内部变量 setup.cfg
您可以参考 setup.cfg
文件中的其他 variables/options。语法为$variable
,例如:
[install]
prefix = /my/prefix
install-scripts = $base/scripts
请注意,我使用了 $base
,因为此变量会受到您在 setup.cfg
和使用 setup.py install --prefix
命令行选项中提供的前缀设置的影响。在这种情况下,除非用户使用命令行指定另一个前缀,否则您的脚本将安装到 /my/prefix/scripts
。
也可以在 setup.cfg
中使用 $prefix
,但这似乎不受自定义配置的影响。
访问 setup.py 内的变量值(在 setup()
之后)
也可以读取 setup.py
中所有 variables/options 的值。函数setup
returnsclassDistribution的一个实例。 class 包含所有按命令分组的变量值(例如 install),您可以使用 get_option_dict
方法获取它们。例如:
#!/usr/bin/env python
from distutils.core import setup
d = setup(
# Here come your setup arguments
)
print(d.get_option_dict('install'))
将打印:
{'prefix': ('setup.cfg', '/my/prefix'),
'install_scripts': ('setup.cfg', '$base/scripts')}
访问 setup.py 内的变量值(在 setup()
之前)
也可以在setup()
甚至运行之前获得classDistribution的一个实例。为此,我们可以复制 setup()
在内部所做的事情,并自己构建一个 class 的实例。然后,关于安装参数值的决定可以基于一些安装选项的值。让我们看一个例子:
from distutils.core import setup
from distutils.dist import Distribution
# Get our own instance of Distribution
dist = Distribution()
dist.parse_config_files()
dist.parse_command_line()
# Get prefix from either config file or command line
prefix = dist.get_option_dict('install')['prefix'][1]
print("Prefix is: " + prefix)
# Use the prefix to decide on the data path for data.txt
setup(data_files=[('/first/path/to/data' if prefix == '/some/prefix'
else '/second/path/to/data',
['data.txt'])])
我正在使用 Python 2.7 和 Distutils 来分发和安装我自己创建的包。我的 setup.cfg 看起来像这样:
[install]
prefix=/usr/local/MODULENAME
record=installation.txt
我有两个问题:
是否可以在定义其他setup.cfg选项时引用setup.cfg中设置的变量(但也使用命令行选项)?例如,对于:
install-scripts=PREFIX/my-scripts
我希望
PREFIX
是在 setup.cfg 中或使用 --prefix 命令行参数定义的前缀,类似于使用 ConfigParser 时变量的插值。是否可以从我的 setup.py 中引用 setup.cfg 中设置的变量,而无需使用 ConfigParser 手动解析配置文件?
引用内部变量 setup.cfg
您可以参考 setup.cfg
文件中的其他 variables/options。语法为$variable
,例如:
[install]
prefix = /my/prefix
install-scripts = $base/scripts
请注意,我使用了 $base
,因为此变量会受到您在 setup.cfg
和使用 setup.py install --prefix
命令行选项中提供的前缀设置的影响。在这种情况下,除非用户使用命令行指定另一个前缀,否则您的脚本将安装到 /my/prefix/scripts
。
也可以在 setup.cfg
中使用 $prefix
,但这似乎不受自定义配置的影响。
访问 setup.py 内的变量值(在 setup()
之后)
也可以读取 setup.py
中所有 variables/options 的值。函数setup
returnsclassDistribution的一个实例。 class 包含所有按命令分组的变量值(例如 install),您可以使用 get_option_dict
方法获取它们。例如:
#!/usr/bin/env python
from distutils.core import setup
d = setup(
# Here come your setup arguments
)
print(d.get_option_dict('install'))
将打印:
{'prefix': ('setup.cfg', '/my/prefix'),
'install_scripts': ('setup.cfg', '$base/scripts')}
访问 setup.py 内的变量值(在 setup()
之前)
也可以在setup()
甚至运行之前获得classDistribution的一个实例。为此,我们可以复制 setup()
在内部所做的事情,并自己构建一个 class 的实例。然后,关于安装参数值的决定可以基于一些安装选项的值。让我们看一个例子:
from distutils.core import setup
from distutils.dist import Distribution
# Get our own instance of Distribution
dist = Distribution()
dist.parse_config_files()
dist.parse_command_line()
# Get prefix from either config file or command line
prefix = dist.get_option_dict('install')['prefix'][1]
print("Prefix is: " + prefix)
# Use the prefix to decide on the data path for data.txt
setup(data_files=[('/first/path/to/data' if prefix == '/some/prefix'
else '/second/path/to/data',
['data.txt'])])