Rya*_*nch 8 python distutils setuptools
我想以一种稍微不同寻常的方式调用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='gward@python.net',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
Run Code Online (Sandbox Code Playgroud)
通常,只为这个模块的RPM构建.spec文件,我可以运行python setup.py bdist_rpm --spec-only,它解析命令行并调用'bdist_rpm'代码来处理RPM特定的东西..spec文件以'./dist'结尾.
如何更改我的setup()调用,以便它使用'--spec-only'选项运行'bdist_rpm'命令,无需解析命令行参数?我可以将命令名称和选项作为参数传递给setup()吗?或者,我可以手动构建命令行,并将其作为参数传递吗?
注意:我已经知道我可以在一个单独的进程中使用实际的命令行,使用os.system()或子进程模块或类似的东西来调用脚本.我试图避免使用任何类型的外部命令调用.我正在寻找一个在当前解释器中运行setup()的解决方案.
对于后台,我将一些发布管理shell脚本转换为单个Python程序.其中一项任务是运行'setup.py'来生成.spec文件,以进行进一步的预发布测试.运行'setup.py'作为外部命令,使用自己的命令行选项,似乎是一个尴尬的方法,它使程序的其余部分复杂化.我觉得可能有更多的Pythonic方式.
ig0*_*774 12
从来没有试过这个,但我确实碰巧看了distutils/core.py,我注意到这一点接近开头setup():
if 'script_name' not in attrs:
attrs['script_name'] = os.path.basename(sys.argv[0])
if 'script_args' not in attrs:
attrs['script_args'] = sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)
因此,看起来好像你可以通过添加"假冒"setup():
setup(
...
script_name = 'setup.py',
script_args = ['bdist_rpm', '--spec-only']
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2506 次 |
| 最近记录: |