打包Python程序为独立exe,添加版本号、版权、公司等版本信息
点击上方**↑↑↑** 蓝字[协议分析与还原]关注我们
“ 你还在为Python程序打包发愁吗?这份教程手把手教你设置版本信息。”
为了让我们的Python程序能够在没有Python环境的Windows系统上独立,并方便地进行版本管理和更新,我们通常会将其打包成exe可执行文件。我们打包Python程序常用的是pyinstaller工具,它是一款功能强大的打包工具,它可以帮助我们轻松地将Python脚本打包成exe,并自定义版本信息,如版本号、发布日期、版权信息等。通过添加详细的版本信息,我们可以更好地跟踪程序的迭代过程,方便进行问题回溯和修复,同时也能提升程序的专业性,让用户更清楚地了解程序的开发情况。
通常使用pyinstaller的最简单用法是:
pyinstaller -F xxx.py
css
执行完,在dist目录就出现了xxx.exe这个可执行程序了。
但当我们想稍微正规化一点的时候,首先必然想到的是给程序打上版本信息,就像这种:

查了下资料,pyinstaller是可以添加版本信息的:
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data <SRC;DEST or SRC:DEST>] [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR] [--hidden-import MODULENAME] [--collect-submodules MODULENAME]
[--collect-data MODULENAME] [--collect-binaries MODULENAME] [--collect-all MODULENAME] [--copy-metadata PACKAGENAME] [--recursive-copy-metadata PACKAGENAME] [--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES] [--splash IMAGE_FILE] [-d {all,imports,bootloader,noarchive}] [--python-option PYTHON_OPTION] [-s] [--noupx] [--upx-exclude FILE] [-c] [-w]
[-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">] [--disable-windowed-traceback] [--version-file FILE] [-m <FILE or XML>] [--no-embed-manifest] [-r RESOURCE] [--uac-admin] [--uac-uiaccess]
[--win-private-assemblies] [--win-no-prefer-redirects] [--argv-emulation] [--osx-bundle-identifier BUNDLE_IDENTIFIER] [--target-architecture ARCH] [--codesign-identity IDENTITY]
[--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH] [--bootloader-ignore-signals] [--distpath DIR] [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
scriptname [scriptname ...]
css
简单地,只需要编写一个版本文件vesion.txt,然后打包时加上--version-file参数带上版本文件的路径就能搞定了。但是,这个版本文件的内容怎么搞呢?来个简单的办法,从其他软件里抄。
我们找到一个软件,例如chrome,打开目录,打开命令行,输入如下命令:
pyi-grab_version chrome.exe
css
会在当前目录下输出一个文件file_version_info.txt:
Version info written to: file_version_info.txt
nginx
这个就是我们需要的版本文件。
大概长这样:
# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0.
filevers=(129, 0, 6668, 101),
prodvers=(129, 0, 6668, 101),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x17,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x4,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
'040904b0',
[StringStruct('CompanyName', 'Google LLC'),
StringStruct('FileDescription', 'Google Chrome'),
StringStruct('FileVersion', '129.0.6668.101'),
StringStruct('InternalName', 'chrome_exe'),
StringStruct('LegalCopyright', 'Copyright 2024 Google LLC. All rights reserved.'),
StringStruct('OriginalFilename', 'chrome.exe'),
StringStruct('ProductName', 'Google Chrome'),
StringStruct('ProductVersion', '129.0.6668.101'),
StringStruct('CompanyShortName', 'Google'),
StringStruct('ProductShortName', 'Chrome'),
StringStruct('LastChange', '129d018cd38423003cd025fe9ef01c75a897203b-refs/branch-heads/6668@{#1705}'),
StringStruct('Official Build', '1')])
]),
VarFileInfo([VarStruct('Translation', [1033, 1200])])
]
)
bash

稍微理解一下,很容易在里面看见版本号、产品名称、版权、文件描述、公司这些信息,它描述了版本信息的数据结构。
一般要改的是这些:
filevers:文件版本数值
prodvers:产品版本数值
CompanyName:公司名称
FileDescription:文件描述
FileVersion:文件版本
InternalName:内部名称
LegalCopyright:版权信息
OriginalFilename:原始文件名
ProductName:产品名称
ProductVersion:产品版本
go

把这个文件原封不动拷贝到我们的python程序一起,修改里面的想要修改的部分,然后保存,就可以使用了:
pyinstaller --version-file=file_version_info.txt -F -n "xxx.exe" xxx.py
nginx
看下生成的文件,里面已经带了我们填的版本信息了。里面还有一些别的信息,如果想改也可以修改,就看自己的了。
Python的奇妙冒险
在一个充满代码的世界里,住着一只名叫Py的小蟒蛇。Py是一名非常聪明的程序员,它用Python语言创造出了各种各样的程序,从简单的计算器到复杂的机器学习模型,无所不能。
有一天,Py决定用Python写一个游戏。它想创造一个充满挑战和乐趣的世界,让所有人都能享受编程的乐趣。Py花了几天几夜的时间,终于设计出了一个精妙的游戏关卡。
在这个关卡中,玩家需要操控一个机器人,通过一系列的编程指令,躲避障碍物,收集能量,最终到达终点。Py在游戏中设置了各种各样的陷阱和谜题,让玩家不断地思考和尝试。
游戏发布后,立刻受到了大家的欢迎。许多人都被Py的创意所折服,纷纷加入了这个充满乐趣的编程世界。他们通过学习Python,不仅提高了编程能力,还结识了许多志同道合的朋友。
Py很高兴自己的作品能给这么多人带来快乐。它决定继续努力,创造出更多有趣的游戏和程序,让Python的世界变得更加丰富多彩。
别忘点“在看”、“赞”和“分享”
新的规则,及时收推文要先给公号星标
别忘了星标一下,不然就错过了

长按进行关注,时刻进行交流。
