我已经使用谷歌搜索了很久了,但是没有结果。 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/

10-13 08:12