pyinstaller打包完整python项目 pyinstaller如何给打包后的文件添加文件版本信息
项目前提描述
有个项目,是pipenv 管理的,含
有很多py文件,这些文件有的和主入口main.py同目录,有的在python包里面
包含一些静态资源,如图片、readme等
需要用到有些模块用pipenv安装不了,如腾讯云模块只支持pip安装,pypiwin32等
想要打包成绿色免安装的exe,并且生成版本信息到exe
参考:https://blog.csdn.net/u012219045/article/details/113977724
第一步:进入项目文件夹
cd 项目文件夹
第二步:创建虚拟环境自动安装依赖--进入虚拟环境--查看依赖
pipenv install
第三步:进入虚拟环境
这一步非常重要,如果没有进入,那打包后运行会各种报错,原因就是没有把虚拟环境中模块打包进去,模块缺失
pipenv shell
第四步:升级pip,用pip安装pyinstaller
python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
pip install pyinstaller
第五步:用pip安装pipenv安装不了的模块或者pipenv安装后会造成打包出错的那些模块到虚拟环境,如下面的这些模块:
pip install pypiwin32
pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python
第六步:确认所有模块都安装好了
pipenv graph
第七步:生成spec文件
我们在这一步添加各种参数,如 -D -c --version-file=file_version_info.txt 这些,生成spec文件:
pyi-makespec -D -c --version-file=file_version_info.txt main.py
file_version_info.txt是一个文本文件,需要放在和启动入口相同目录下,会根据这个文件生成版本信息,该文件说明见下:
# UTF-8 VSVersionInfo( ffi=FixedFileInfo( #filevers和prodvers应该始终是包含四个项的元组:(1、2、3、4),将不需要的项设置为0 filevers=(21, 10, 27, 0), # 文件版本******,鼠标悬浮exe会显示,也显示在 详细信息-文件版本,这个是检测版本的依据 prodvers=(4, 6, 9, 4), # 生产商,未见显示在哪里 mask=0x3f, # 两个位掩码 flags=0x0, OS=0x4, # 为其设计此文件的操作系统,0x4-NT,无需更改它 fileType=0x1, # 文件的常规类型,0x1-该文件是一个应用程序 subtype=0x0, # 文件的功能,0x0表示该文件类型未定义 date=(0, 0) # 创建日期和时间戳 ), kids=[ StringFileInfo( [ StringTable( u'040904B0', [StringStruct(u'CompanyName', u'上海xxoo公司'), # 鼠标悬浮exe会显示 StringStruct(u'FileDescription', u'PC微信自动化工具'), # 文件说明,鼠标悬浮exe会显示,也会显示在 详细信息-文件说明 StringStruct(u'FileVersion', u'1.1.0'), # 没见哪里显示 StringStruct(u'InternalName', u'SVN'), StringStruct(u'LegalCopyright', u'上海xxoo公司版权所有'), #版权,会显示在 详细信息-版权 StringStruct(u'OriginalFilename', u'小小微信机器人'), #原始文件名,会显示在 详细信息-原始文件名 StringStruct(u'ProductName', u'微信机器人'), #产品名称,会显示在 详细信息-产品名称 StringStruct(u'ProductVersion', u'21.10.26')]) #产品版本,会显示在 详细信息-产品版本 ]), VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) # 语言,中文简体 ] )
第八步:修改spec文件,添加找不到的dll、添加图片等静态资源、修改项目名、exe名等
第九步:根据编辑后的spec打包exe
之前没有版本信息的时候,我把-D参数放到这一步没问题,添加 --version-file=file_version_info.txt版本信息后,就会报错找不到版本信息的txt文件,把-D参数放到第七步就好了
pyinstaller main.spec
至此,一个pipenv管理的项目打包完毕