【问题标题】:Python setuptools override version from command linePython setuptools 从命令行覆盖版本
【发布时间】:2013-11-07 09:00:55
【问题描述】:

我正在为一个 python 项目设置一个持续交付系统,我正在尝试弄清楚如何通过 egg_info 设置项目构建的整个版本字符串。

我正在使用 thinkworks 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 似乎等同于“0.0.0”。任何人都知道我可以如何使用 setup_tools 并设置我的版本字符串?

谢谢, 克

【问题讨论】:

    标签: python setuptools thoughtworks-go


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      一个选项是在调用 setup 之前解析选项并设置如下版本

      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 脚本。
      猜你喜欢
      • 2017-07-27
      • 2020-12-20
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2016-10-18
      相关资源
      最近更新 更多