我已经使用这个多年,现在没有结果。 PyInstaller手册说:
--version-file =文件 从文件添加一个版本资源到exe文件
听起来不错。 我想把版本信息放在我的可执行文件中。 问题是,我不知道“版本文件”是什么样子,我找不到一个我可以使用的例子。 我会考虑一个版本文件的例子作为这个问题的可接受的答案。
手册还说:
版
只有Windows NT家族。 版本= 'myversion.txt'。 使用GrabVersion.py从可执行文件中窃取版本资源,然后编辑输出以创build自己的。 (版本资源的语法太神秘了,我不会试图从头开始编写一个。)
我已经尝试过从我的系统中无数的可执行文件。 我只是不断收到这些错误:
回溯(最近一次通话最后): 文件“C:\ pyinstaller-2.0 \ utils \ GrabVersion.py”,第42行, vs = versioninfo.decode(sys.argv [1]) 在解码的文件“C:\ pyinstaller-2.0 \ PyInstaller \ utils \ versioninfo.py”,第33行 nm = win32api.EnumResourceNames(h,RT_VERSION)[0] IndexError:列表索引超出范围
在没有版本信息的可执行文件上,并且:
回溯(最近一次通话最后): 文件“C:\ pyinstaller-2.0 \ utils \ GrabVersion.py”,第43行, 打印vs 在__repr__文件“C:\ pyinstaller-2.0 \ PyInstaller \ utils \ versioninfo.py”,第147行 %(indent,self.ffi .__ repr __(indent),indent, 在__repr__文件“C:\ pyinstaller-2.0 \ PyInstaller \ utils \ versioninfo.py”,第251行 “filevers =%s”,%fv, TypeError:不是在string格式化过程中转换的所有参数
其余的。
只是看了一下资料。 看来,版本文件预计是Python源自身作为提供的版本文件与读取,然后eval
。
GrabVersion.py
脚本似乎已经找到了错误,所以我修改了__repr__
函数以手动将元组参数转换为字符串。
Windows cmd.exe
具有嵌入的Windows版本资源,这里是来自GrabVersion.py
的输出,您将其保存到文件并提供给PyInstaller。
VSVersionInfo( ffi=FixedFileInfo( filevers=(6, 1, 7601, 17514), prodvers=(6, 1, 7601, 17514), mask=0x3f, flags=0x0, OS=0x40004, fileType=0x1, subtype=0x0, date=(0, 0) ), kids=[ StringFileInfo( [ StringTable( u'040904B0', [StringStruct(u'CompanyName', u'Microsoft Corporation'), StringStruct(u'FileDescription', u'Windows Command Processor'), StringStruct(u'FileVersion', u'6.1.7601.17514 (win7sp1_rtm.101119-1850)'), StringStruct(u'InternalName', u'cmd'), StringStruct(u'LegalCopyright', u'\xa9 Microsoft Corporation. All rights reserved.'), StringStruct(u'OriginalFilename', u'Cmd.Exe'), StringStruct(u'ProductName', u'Microsoft\xae Windows\xae Operating System'), StringStruct(u'ProductVersion', u'6.1.7601.17514')]) ]), VarFileInfo([VarStruct(u'Translation', [1033, 1200])]) ] )
我还没有尝试使用PyInstaller设置版本资源,所以我不确定这是否可行,我会对你的反馈感兴趣。
我在Python 3中遇到Pyinstaller –version-file选项的问题,我使用简单版本资源工具来解决它。
使用此工具,您可以显示任何版本资源的内容,只需使用/ vo选项与任何可执行文件: verpatch.exe /vo c:\Windows\System32\cmd.exe
要将新 版本资源添加到可执行文件,请按照以下示例进行操作:
verpatch.exe script.exe 1.0.0.0 /va /pv 1.0.0.0 /s description "Your product description" /s product "Your product name" /s copyright "Your company name, 2016" /s company "Your company name"
使用较早的答案创建您的版本文件,将其保存为version.rc
找到filename.spec
文件打开它。 接下来在该脚本中找到:
exe = EXE(pyz,...)
在整个部分的末尾添加这段代码,以便将版本信息自动嵌入到您的exe文件中
version='version.rc'
保存它,然后再次启动pyinstaller,这次使用下面的代码运行安装程序:
pyinstaller filename.spec
这不仅会创建exe文件本身,还包括所有的版本信息。
如果你没有想到它,用你的程序的文件名替换filename
名
请注意,版本文件是一个Python代码,所以你可以给它一个.py
扩展名,以便在你的IDE中很好的看到它的格式,检查错误(当然,忽略未解决的引用),以及做Python允许的任何东西做。