Python:CX_freeze 在 win32verstamp 中构建失败 struct.error

Python: CX_freeze build failing struct.error in win32verstamp

我试图使用 Anaconda Spyder 在 Python 的 Win10 机器上冻结 python 程序。这以前像 1-2 个月前使用此脚本一样有效。从那以后,我对剧本做了很多改动,所以我不知道发生了什么,也无法自己追踪。

这是 cx-freeze 给出的输出:

PS C:\Users\Test\Documents\AMS_Jannis\Mk-medA\SimAMR> python setup_CX.py build
running build
running build_exe
creating directory C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024
copying C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\bases\Console.exe -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\SimAMR.exe
copying C:\ProgramData\Anaconda3\api-ms-win-crt-stdio-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-stdio-l1-1-0.dll
copying C:\ProgramData\Anaconda3\python36.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\python36.dll
copying C:\ProgramData\Anaconda3\VCRUNTIME140.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\VCRUNTIME140.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-math-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-math-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-locale-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-locale-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-string-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-string-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-runtime-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-runtime-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-convert-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-convert-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-time-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-time-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-environment-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-environment-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-process-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-process-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-heap-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-heap-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-conio-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-conio-l1-1-0.dll
copying C:\ProgramData\Anaconda3\api-ms-win-crt-filesystem-l1-1-0.dll -> C:\Users\Test\Desktop\SimAMR-Builds\Build_20180110_152024\api-ms-win-crt-filesystem-l1-1-0.dll
Traceback (most recent call last):
  File "setup_CX.py", line 46, in <module>
    executables=[Executable(r"C:\Users\Test\Documents\AMS_Jannis\Mk-medA\SimAMR\simulation\simamr.py", targetName="SimAMR.exe", base = base)])
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
    distutils.core.setup(**attrs)
  File "C:\ProgramData\Anaconda3\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\ProgramData\Anaconda3\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\ProgramData\Anaconda3\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\ProgramData\Anaconda3\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\ProgramData\Anaconda3\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\ProgramData\Anaconda3\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\dist.py", line 219, in run
    freezer.Freeze()
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\freezer.py", line 618, in Freeze
    self._FreezeExecutable(executable)
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\freezer.py", line 227, in _FreezeExecutable
    self._AddVersionResource(exe)
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\freezer.py", line 167, in _AddVersionResource
    stamp(fileName, versionInfo)
  File "C:\ProgramData\Anaconda3\lib\site-packages\win32\lib\win32verstamp.py", line 157, in stamp
    vs = VS_VERSION_INFO(vmaj, vmin, vsub, vbuild, sdata, vdata, is_debug, is_dll)
  File "C:\ProgramData\Anaconda3\lib\site-packages\win32\lib\win32verstamp.py", line 101, in VS_VERSION_INFO
    ffi = VS_FIXEDFILEINFO(maj, min, sub, build, debug, is_dll)
  File "C:\ProgramData\Anaconda3\lib\site-packages\win32\lib\win32verstamp.py", line 45, in VS_FIXEDFILEINFO
    0x00000000, # dwFileDateLS
struct.error: argument out of range

我能够解决问题。我太蠢了,在我的 setup.py-cxfreeze 构建文件中插入了错误的冻结应用程序版本号。在那里,我想像 2 个月前有一个版本号,里面有一些其他字符,但当时没有测试它。版本号最后有下划线,这是不允许的!只有 X.X-某物是。

我可以通过更改版本号来解决这个问题。

我的版本号是 7.1.90003,因为它是 7.2 的测试版(即 7.2 beta 3)。有多年Windows经验,有人告诉我,也许版本号被限制为16位值,所以我将版本号更改为7.1.9003,并且有效。

底线:版本号 7.1.90003 导致错误,但将其更改为 7.1.9003 修复了它。