Python打包:从版本字符串获取开发状态

0 投票
1 回答
833 浏览
提问于 2025-04-18 11:28

在setup.py这个文件里,设置函数需要提供版本号和开发状态的信息(你可以查看这个链接了解更多: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的标准库里有没有这样的函数?如果没有,怎么做才比较聪明呢?

1 个回答

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'

撰写回答