cx_Freeze:'系统在构建期间找不到指定的文件'错误[win10] [PyQt4] [python2.7]

问题描述 投票:1回答:2

我正在尝试从python脚本(使用PyQt4 GUI和matplotlib)创建.exe文件。我正在使用cx_Freeze版本5.1.1来使用以下setup.py的64位窗口:

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
)

跑完之后

python setup.py build

在cmd中的位置

C:\Users\Us.Er\Pyth-examples\Qt\UI-examples\ChannelplotGUI-to-exe

我有这样的事情:

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.')

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

编辑 要明确:我现在不想添加任何图标。我很高兴只是一个简单的工作.exe 我已经以这种方式添加了目标:

executables = [cx_Freeze.Executable(script = "main.py", base = base, targetName="main.exe")]

我试过补充一下

targetDir = "C:\Users\Us.Er\Pyth-examples\Qt\UI-examples\ChannelplotGUI-to-exe"

无论如何,回报是:

TypeError: __init__() got an unexpected keyword argument 'targetDir'  

主要问题与之前一样 - 最后一行的错误如下:

h = BeginUpdateResource(pathname, 0)
pywintypes.error: (2, 'BeginUpdateResource', 'The system cannot find the file specified.')
python-2.7 cx-freeze
2个回答
2
投票

在我的情况下,问题通过改变解决了

'build_exe': 'build_folder'

'build_exe': './/build_folder'

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


1
投票

感谢用户jpeg的帮助,我设法成功冻结了脚本。 为了消除路径问题,我在第159行之前在print(pathname)中添加了一行win32verstamp.py。 print语句工作正常,显示新生成的.exe文件的相对路径。 尽管显示了正确的路径,但错误仍然存​​在。我去了stamp()win32verstamp.py定义并找到了一个尝试 - 除了块,并在那里插入print(pathname)。 部分是:

def stamp(pathname, options):
# For some reason, the API functions report success if the file is open
# but doesnt work!  Try and open the file for writing, just to see if it is
# likely the stamp will work!
#print("Current path is " + pathname)
try:
    f = open(pathname, "a+b")
    f.close()
    print("Possible to open" + pathname) #<---line added
except IOError, why:
    print "WARNING: File %s could not be opened - %s" % (pathname, why)r code here
....

既然冻结是可能的。 (不知道为什么,如果有解释,我很乐意添加一些信息)

© www.soinside.com 2019 - 2024. All rights reserved.