Python setuptools如何从命令行覆盖版本号

5
我正在为一个Python项目设置持续交付系统,并试图通过egg_info设置项目构建的完整版本字符串。
我正在使用ThoughtWorks GO,它具有名为GO_PIPELINE_LABEL的内置版本跟踪标签。我想使用这个版本作为参数调用setup_tools egg构建命令,完全覆盖setup.py中的版本。
例如:
GO_PIPELINE_LABEL='1.2.3.4' python setup.py egg_info --tag-build=$GO_PIPELINE_LABEL bdist_egg

似乎会导致
'dist/myproject-0.0.01.2.3.4-py2.7.egg' 

它似乎总是连接 setup.py 版本和命令行版本。我的 setup.py 如下所示:

import os
from setuptools import setup, find_packages
from setuptools.command.install import install

ROOT_DIR = os.path.dirname(__file__)
SOURCE_DIR = os.path.join(ROOT_DIR)

# python setup.py egg_info -rb14 bdist_egg rotate -m.egg -k5
# python setup.py egg_info --tag-build=1.2.3.4 bdist_egg

version = ''

setup(name='myproject',
    version=version,
    description='baa',
    author='Me',
    author_email='irrelevant@domain.com',
    packages=['submodule', 'another.submodule'],
    package_data = {
                       '': ['*.xsd'],
                       },
    install_requires=['cmd2',
                    'dnspython',
                    'ordereddict',
                    'prettyprint',
                    'pycontrol',
                    'simplejson',
                    'suds',
                    'pyparsing<2.0.0',
                    'urllib3',
                    'lxml',
                    ]
    )

我已经尝试在我的setup.py中将版本变量设置为null /删除,但无论我做什么,似乎都会导致版本值的连接,并且null似乎等同于“0.0.0”。 有人知道如何利用setup_tools并设置我的版本字符串吗?
谢谢, K
2个回答

0

您可以尝试将版本作为位置参数传递给命令行,然后在执行设置之前将其删除:

import sys
from setuptools import setup

version = sys.argv[1]
del sys.argv[1]

setup(name='myproject',
    version=version,
    ...

然后你可以这样执行它:

python setup.py '1.2.3.4' egg_info

-1
一种选择是在调用设置之前解析选项并设置版本,如下所示。
from optparse import OptionParser
parser = OptionParser("")
parser.add_option("--tag-build", dest="version")
(info,a)=parser.parse_args()
version = info.version
print "version is ", version

这是无法工作的,并且会破坏 easy_install 的 setup.py 脚本。 - Tay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接