我已经使用谷歌搜索了很久了,但是没有结果。 PyInstaller手册说:
--version-file = FILE
从FILE向exe添加版本资源
听起来很棒。我想将版本信息放入可执行文件中。问题是我不知道“版本文件”的外观,也找不到我可以使用的单个示例。我认为将版本文件的示例作为对此问题的可接受答案。
我尝试过的
该手册还说:
我现在尝试使用来自系统的无数可执行文件进行此操作。我只是不断得到这些错误:
追溯(最近一次通话):
在第42行的“C:\pyinstaller-2.0\utils\GrabVersion.py”文件中
vs = versioninfo.decode(sys.argv [1])
文件“C:\pyinstaller-2.0\PyInstaller\utils\versioninfo.py”,第33行,在解码中
nm = win32api.EnumResourceNames(h,RT_VERSION)[0]
IndexError:列表索引超出范围
没有版本信息的可执行文件上,以及:
追溯(最近一次通话):
在第43行的文件“C:\pyinstaller-2.0\utils\GrabVersion.py”
打印与
__repr__中的文件“C:\pyinstaller-2.0\PyInstaller\utils\versioninfo.py”,第147行
%(缩进,self.ffi .__ repr __(缩进),缩进,
__repr__中的文件“C:\pyinstaller-2.0\PyInstaller\utils\versioninfo.py”,第251行
“filevers =%s”,%fv,
TypeError:并非在字符串格式化期间转换了所有参数
其余的。
最佳答案
只是快速浏览了一下来源。似乎该版本文件应该是Python源本身,作为提供的版本文件已被读取,然后被eval
编辑。
正如您已经发现的那样,GrabVersion.py
脚本似乎会生成错误,因此我修改了__repr__
的FixedFileInfo
函数,以手动将元组参数转换为字符串。
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 - “version file”是什么样的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14624245/