Python打包:从版本字符串获取开发状态
在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'