You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

运行setup.py生成未指定版本的version.py,如何配置指定版本?附代码片段

解决setup.py生成version.py缺失指定版本的问题

运行setup.py脚本时,生成的version.py文件未包含指定版本信息。请问如何修改配置,使该文件中能正确指定版本?

你的setup.py代码片段:

from setuptools import setup, find_packages
from codecs import open
from os import path

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

with open(path.join(here, 'README.md'), encoding='utf-8') as f:
    long_description = f.read()

def parse_requirements(filename):
    lineiter = (line.strip() for line in open(filename))
    return [line for line in...

我来给你几种实用的解决方案,你可以根据自己的需求选择:

方法1:用setuptools-scm自动生成(推荐)

这是最省心的方式,它能从Git标签、提交记录自动生成版本号,还会帮你生成包含版本信息的version.py文件。

步骤很简单:

  • 先安装依赖:pip install setuptools-scm
  • 修改你的setup.py,添加scm相关配置:
setup(
    # 保留你原来的name、long_description、packages等配置
    use_scm_version={
        "write_to": "你的包名/version.py",  # 替换成实际的包路径,比如my_project/version.py
        "write_to_template": '__version__ = "{version}"',  # 自定义version.py的内容模板
    },
    setup_requires=['setuptools-scm'],
)

之后运行python setup.py sdist或者pip install .,就会自动在指定路径生成version.py,内容就是类似__version__ = "0.1.0"的版本信息。

方法2:手动指定版本并写入文件

如果不想用第三方库,也可以手动在setup.py里定义版本,然后直接写入version.py:

修改你的setup.py,添加这些代码:

# 先定义你的版本号
MY_VERSION = "0.1.0"

# 写入version.py文件,记得替换成你的包路径
with open(path.join(here, '你的包名', 'version.py'), 'w', encoding='utf-8') as f:
    f.write(f'__version__ = "{MY_VERSION}"\n')

setup(
    name='你的包名',
    version=MY_VERSION,  # 同时在setup里指定版本,保证一致性
    # 其他原有配置...
)

这样每次运行setup.py时,都会自动生成包含指定版本的version.py文件。

方法3:无需生成version.py,直接读取版本

如果其实你不需要生成version.py文件,只是想在代码里获取版本号,也可以用这种方式:

在你的包的__init__.py里添加这段代码:

from pkg_resources import get_distribution, DistributionNotFound

try:
    __version__ = get_distribution('你的包名').version
except DistributionNotFound:
    # 如果包还没安装,就显示unknown
    __version__ = "unknown"

这种方式不需要生成额外的version.py文件,只要包安装了(或者用pip install -e .开发模式)就能正确获取版本。

内容的提问来源于stack exchange,提问作者CrizR

火山引擎 最新活动