You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyInstaller与Python应用中统一管理版本号

统一PyInstaller打包时的版本号管理方案

因为PyInstaller的版本资源文件(如file_version_info.py)是特定格式的配置文件,并非可执行的Python模块,所以无法直接导入其他Python文件复用版本号。以下是几种可行的统一管理方案:

方案1:用Python脚本自动生成版本资源文件

通过脚本读取统一版本文件的内容,自动生成符合PyInstaller要求的版本资源文件:

  1. 保留你的version_info.py,定义版本常量:
# version_info.py
MAJOR = 1
MINOR = 2
PATCH = 3
VERSION = f"{MAJOR}.{MINOR}.{PATCH}"
  1. 编写生成脚本generate_version_info.py:
from version_info import MAJOR, MINOR, PATCH, VERSION

# PyInstaller版本资源模板
template = '''
VSVersionInfo(
  ffi=FixedFileInfo(
    filevers=({MAJOR}, {MINOR}, {PATCH}, 0),
    prodvers=({MAJOR}, {MINOR}, {PATCH}, 0),
    mask=0x3f,
    flags=0x0,
    OS=0x40004,
    fileType=0x1,
    subtype=0x0,
    date=(0, 0)
    ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        u'040904B0',
        [StringStruct(u'CompanyName', u'你的公司名'),
        StringStruct(u'FileDescription', u'你的应用描述'),
        StringStruct(u'FileVersion', u'{VERSION}'),
        StringStruct(u'ProductName', u'你的产品名'),
        StringStruct(u'ProductVersion', u'{VERSION}')])
      ]),
    VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
  ]
)
'''

# 填充模板并写入文件
with open('file_version_info.py', 'w', encoding='utf-8') as f:
    f.write(template.format(MAJOR=MAJOR, MINOR=MINOR, PATCH=PATCH, VERSION=VERSION))
  1. 打包前先执行脚本生成资源文件:python generate_version_info.py
  2. 用PyInstaller打包时指定该文件:pyinstaller --version-file file_version_info.py your_app.py
  3. 应用内部直接导入version_info.py即可使用版本号。

方案2:在.spec文件中直接读取版本号

修改PyInstaller生成的.spec文件,直接从统一版本文件读取信息并配置:

  1. 先生成基础.spec文件:pyinstaller your_app.py
  2. 修改your_app.spec,导入版本信息并配置到打包参数:
# your_app.spec
from version_info import VERSION, MAJOR, MINOR, PATCH

# 定义版本资源字典
version_config = {
    'file_version': VERSION,
    'product_version': VERSION,
    'company_name': '你的公司名',
    'file_description': '你的应用描述',
    'product_name': '你的产品名'
}

a = Analysis(
    ['your_app.py'],
    # 保留其他默认参数
)
pyz = PYZ(a.pure, a.zipped_data)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='your_app',
    debug=False,
    strip=False,
    upx=True,
    console=True,  # 按需改为False(无控制台窗口)
    version=version_config,  # 传入版本配置
    # 保留其他默认参数
)
  1. 用修改后的.spec文件打包:pyinstaller your_app.spec
  2. 应用内部依然通过import version_info访问版本号。

方案3:将版本号定义在主模块/包的__init__.py中

如果你的项目是结构化包,可将版本号放在包的__init__.py:

# your_package/__init__.py
__version__ = "1.2.3"

然后在.spec文件中导入包获取版本号,再按方案2的方式配置打包参数即可。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:02:51