我想以一种稍微非常规的方式调用Python的distutils或setuptools的setup()函数,但我不确定distutils是否适合这种用法。
举个例子,假设我当前有一个“setup.py”文件,它看起来像这样(从 distutils 文档中逐字提取 - setuptools 用法几乎相同):
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='[email protected] /cdn-cgi/l/email-protection',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
通常,要仅为该模块的 RPM 构建 .spec 文件,我可以运行python setup.py bdist_rpm --spec-only
,它解析命令行并调用“bdist_rpm”代码来处理特定于 RPM 的内容。 .spec 文件以“./dist”结尾。
如何更改我的 setup() 调用,以便它使用“--spec-only”选项运行“bdist_rpm”命令,而不解析命令行参数?我可以将命令名称和选项作为参数传递给 setup() 吗?或者我可以手动构造一个命令行,并将其作为参数传递吗?
注意:我已经知道我可以使用 os.system() 或 subprocess 模块或类似的东西,使用实际的命令行在单独的进程中调用脚本。我试图避免使用任何类型的外部命令调用。我正在专门寻找在当前解释器中运行 setup() 的解决方案。
作为背景,我将一些发布管理 shell 脚本转换为单个 Python 程序。其中一项任务是运行“setup.py”来生成 .spec 文件以进行进一步的预发布测试。将“setup.py”作为外部命令运行,并带有自己的命令行选项,似乎是一种尴尬的方法,并且它使程序的其余部分变得复杂。我觉得可能还有更 Pythonic 的方式。