Advertisement

打包Python程序为独立exe,添加版本号、版权、公司等版本信息

阅读量:

点击上方**↑↑** 蓝字[协议分析与还原]关注我们


你还在为Python程序打包发愁吗?这份教程手把手教你设置版本信息。

为了让我们的Python程序能够在没有Python环境的Windows系统上独立,并方便地进行版本管理和更新,我们通常会将其打包成exe可执行文件。我们打包Python程序常用的是pyinstaller工具,它是一款功能强大的打包工具,它可以帮助我们轻松地将Python脚本打包成exe,并自定义版本信息,如版本号、发布日期、版权信息等。通过添加详细的版本信息,我们可以更好地跟踪程序的迭代过程,方便进行问题回溯和修复,同时也能提升程序的专业性,让用户更清楚地了解程序的开发情况。

通常使用pyinstaller的最简单用法是:

复制代码
    pyinstaller -F xxx.py
    
    css

执行完,在dist目录就出现了xxx.exe这个可执行程序了。

但当我们想稍微正规化一点的时候,首先必然想到的是给程序打上版本信息,就像这种:
3907743e49e77823e690b40bbb62ef13.png

查了下资料,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
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/TxhSpq4fZIEOeGczosR27yYQL6kn.png)

稍微理解一下,很容易在里面看见版本号、产品名称、版权、文件描述、公司这些信息,它描述了版本信息的数据结构。

一般要改的是这些:

复制代码
 filevers:文件版本数值

    
 prodvers:产品版本数值
    
 CompanyName:公司名称
    
 FileDescription:文件描述
    
 FileVersion:文件版本
    
 InternalName:内部名称
    
 LegalCopyright:版权信息
    
 OriginalFilename:原始文件名
    
 ProductName:产品名称
    
 ProductVersion:产品版本
    
    
    
    
    go
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/0RlXDGo1YTwiMvOIcSxq6n832ZNE.png)

把这个文件原封不动拷贝到我们的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的世界变得更加丰富多彩。

别忘点“在看”、“赞”和“分享”

新的规则,及时收推文要先给公号星标

别忘了星标一下,不然就错过了
89c3e6babfb0e29bc40f5d6cb76d53d8.jpeg

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

全部评论 (0)

还没有任何评论哟~