cx_Freeze: 构建过程中出现“系统找不到指定的文件”错误 [win10] [PyQt4] [python2.7]

sma*_*jli 3 cx-freeze python-2.7

我正在尝试从 python 脚本(使用 PyQt4 GUI 和 matplotlib)创建一个 .exe 文件。我将 cx_Freeze 5.1.1 版用于 64 位 Windows,并具有以下功能setup.py

import cx_Freeze
import sys
import matplotlib

base = "Win32GUI"

includes = ["atexit"] 

buildOptions = dict(
    #create_shared_zip=False,
    #append_script_to_exe=True,
    includes=includes
) 

executables = [cx_Freeze.Executable(script = "main.py", base = base)] # icon = "chart32.jpg")]
cx_Freeze.setup(
    name= "1ChPlotGUI",
    options = dict(build_exe=buildOptions), # {"build_exe": {"packages": ["matplotlib"], "include_files":["chart32.jpg"]}},
    version = "0.01",
    description = "1 Channel Plotting app with GUI",
    executables = executables
)
Run Code Online (Sandbox Code Playgroud)

跑完后

python setup.py build
Run Code Online (Sandbox Code Playgroud)

在 cmd 中的位置

C:\Users\Us.Er\Pyth-examples\Qt\UI-examples\ChannelplotGUI-to-exe
Run Code Online (Sandbox Code Playgroud)

我有这样的事情:

running build
running build_exe
copying c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site- 
packages\cx_Freeze\bases\Win32GUI.exe -> build\exe.win-amd64-2.7\main.exe
copying 
c:\users\Us.Er\appdata\local\enthought\canopy\user\scripts\python27.dll -> 
build\exe.win-amd64-2.7\python27.dll
Traceback (most recent call last):
  File "setup.py", line 23, in <module>
    executables = executables
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
distutils.core.setup(**attrs)
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\core.py", line 151, in setup
dist.run_commands()
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\command\build.py", line 127, in run
self.run_command(cmd_name)
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\cmd.py", line 326, in run_command
self.distribution.run_command(command)
 File "C:\Users\Us.Er\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\cx_Freeze\dist.py", line 219, in run
freezer.Freeze()
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\cx_Freeze\freezer.py", line 626, in Freeze
self._FreezeExecutable(executable)
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\cx_Freeze\freezer.py", line 232, in _FreezeExecutable
self._AddVersionResource(exe)
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\cx_Freeze\freezer.py", line 172, in _AddVersionResource
stamp(fileName, versionInfo)
 File "c:\users\Us.Er\appdata\local\enthought\canopy\user\lib\site-packages\win32\lib\win32verstamp.py", line 159, in stamp
h = BeginUpdateResource(pathname, 0)
pywintypes.error: (2, 'BeginUpdateResource', 'The system cannot find the file specified.')
Run Code Online (Sandbox Code Playgroud)

上述问题的可能解决方案是什么?

编辑
要清楚:我现在不想添加任何图标。我对一个简单的、有效的 .exe 感到满意,
我以这种方式添加了目标:

executables = [cx_Freeze.Executable(script = "main.py", base = base, targetName="main.exe")]
Run Code Online (Sandbox Code Playgroud)

我试图添加

targetDir = "C:\Users\Us.Er\Pyth-examples\Qt\UI-examples\ChannelplotGUI-to-exe"
Run Code Online (Sandbox Code Playgroud)

无论如何,回报是:

TypeError: __init__() got an unexpected keyword argument 'targetDir'  
Run Code Online (Sandbox Code Playgroud)

主要问题和以前一样 - 最后一行的错误为:

h = BeginUpdateResource(pathname, 0)
pywintypes.error: (2, 'BeginUpdateResource', 'The system cannot find the file specified.')
Run Code Online (Sandbox Code Playgroud)

Ton*_*pia 7

在我的情况下,问题是通过更改解决的

'build_exe': 'build_folder'
Run Code Online (Sandbox Code Playgroud)

'build_exe': './/build_folder'
Run Code Online (Sandbox Code Playgroud)

这是因为open(pathname)将在 上工作pathname='build_folder\\executable.exe',允许代码在标记方法开始时的检查期间前进,但BeginUpdateResource(pathname, 0)只能在'.//build_folder\\executable.exe'