【问题标题】:Python packaging: get Development Status from version stringPython 打包:从版本字符串中获取开发状态
【发布时间】:2014-06-29 10:43:31
【问题描述】:

应该在 setup.py 文件中同时提供 setup 函数 版本字符串和开发状态(参见 https://python-packaging-user-guide.readthedocs.org/en/latest/tutorial.html 和作为例子给出的项目 https://github.com/pypa/sampleproject/blob/master/setup.py)

这里有一个更简单的例子:

from setuptools import setup

import os
here = os.path.abspath(os.path.dirname(__file__))

# Get the version from the relevant file 
with open(os.path.join(here, 'namepackage/_version.py')) as f: 
    exec(f.read()) 

# In namepackage/_version.py, there is just something like
# __version__= '1.1a2', where 'a' means alpha (see
# http://legacy.python.org/dev/peps/pep-0386/).

setup(
    name='namepackage',
    version=__version__,
    # skip arguments for clarity
    classifiers=[
        # How mature is this project? Common values are
        # 3 - Alpha
        # 4 - Beta
        # 5 - Production/Stable
        'Development Status :: 4 - Beta'
        ]
)

在这种情况下,版本字符串写在文件名package/_version.py中,它还包含有关开发状态的信息,因此应该有一种方法可以将开发状态作为字符串('3 - Alpha ' 在本例中)来自版本字符串。否则,必须以一致的方式更改 _version.py 和 setup.py,这似乎不是很聪明(而且很容易忘记,这会导致信息不一致,如示例中所示!)。

Python 标准库中是否有执行此操作的函数?否则,有什么聪明的方法可以做到这一点?

【问题讨论】:

    标签: python packaging setuptools


    【解决方案1】:

    对于如何在版本字符串中指定 alpha 或 beta 没有真正的标准,也不需要分类器进行关联。例如,我可能会标记 0.x 发布 beta 甚至 alpha 状态,因为我还想继续改进 API,而不是在 1.x 之前进入生产/稳定版。

    所以什么时候切换分类器,如果与版本字符串相关,就自己实现一些字符串解析,这取决于你自己的项目发布策略。

    这可以很简单:

    devstatus = ''Development Status :: 5 - Production/Stable'
    if 'b' in __version__:
        devstatus = ''Development Status :: 4 - Beta'
    elif 'a' in __version__:
        devstatus = ''Development Status :: 3 - Alpha'
    

    【讨论】:

    • 感谢您的回答。建议的代码中有太多 ' ,否则它会起作用。如果我必须自己实现,我会使用from pkg_resources import parse_version 做一些更安全的事情。我仍然认为奇怪的是,可以将“开发状态 :: 5 - 生产/稳定”与明显是 alpha 或 beta 的版本字符串一起使用,如 PEP 386 中所定义。
    • parse_version 非常适合对版本进行排序,但对于测试 alpha 或 beta 状态不再有用,除非您的项目有关于使用什么术语的政策。 any(p.startswith('*a') for p on parse_version(__version__)) 感觉过于冗长,一个简单的字符串包含就足够了。
    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2014-12-09
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多