尝试添加图标时 Cx_freeze 失败:[WinError 2] 系统找不到指定的文件

Wil*_*ang 7 python file-not-found cx-freeze

这是一个非常有趣的问题,

我试图向我的 cx_freeze 可执行文件添加一个图标,但每当我这样做时,它就会崩溃,

注意:我正在运行 Windows 10 并使用 python 3.8.2

我的 setup.py 文件如下:

from cx_Freeze import setup, Executable 
import os

include_files = ["res/"]

build_exe_options = {"includes": ["pygame"], "include_files": include_files}

icondir = os.getcwd()+'\icon.ico'

exe = Executable(
      script="client.py",
      base="Win32GUI",
      icon=icondir
     )
setup(
      name="Syndicate Zero",
      version="1.4.0",
      author="Wilson F. Wang",
      description="Testing Build",
      options = {"build_exe": build_exe_options},
      executables=[exe]
      )

Run Code Online (Sandbox Code Playgroud)

当从主文件所在的目录运行时,它会产生:

running build
running build_exe
copying C:\Users\Wilson\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\cx_Freeze\bases\Win32GUI.exe -> build\exe.win-amd64-3.8\client.exe
copying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1008.0_x64__qbz5n2kfra8p0\python38.dll -> build\exe.win-amd64-3.8\python38.dll
error: [WinError 2] The system cannot find the file specified: 'build\\exe.win-amd64-3.8\\client.exe'

Run Code Online (Sandbox Code Playgroud)

但是,在没有 icon="icon.ico" 的情况下运行时,它可以毫无问题地工作

当前目录树如下:

    .
    |
    ??? build
    ?   ??? **exe.win-amd64-3.8**
    ??? util
    ?   ??? camera.py
    ?   ??? network.py
    ??? res
    ?   ??? icon.PNG
    ?   ??? bg.PNG
    ??? client.py
    ??? game.py
    ??? server.py
    ??? entity.py
    ??? stats.py
    ??? **icon.ico**
    ??? index.html

Run Code Online (Sandbox Code Playgroud)

我在解决这个问题时的尝试和发现。

有趣的发现,当尝试读取和打开 cx_freeze 声称找不到的文件时,python 可以毫无问题地读取它。

此外,我尝试使用提升的命令提示符来运行安装程序,以防万一这是无济于事的权限错误。

尝试更改图标文件的文件路径也不能修复它,并且将其添加为它自己的包含文件要求也失败了。

有趣的是,在文件上运行 pyinstaller 时,生成的可执行文件不起作用,但是可以正确导入图标

我已经重写了 cx_freeze 设置代码,使其在视觉上更加清晰,也许这有助于找到此问题的原因。另外,我尝试在另一台笔记本电脑上进行冻结,但没有成功。

即使尝试icon="C:/Users/Wilson/OneDrive - University of Waterloo/Documents/SyndicateZero/SyndicateZero/icon.ico" CX_Freeze的完整路径也会返回相同的错误。

嗯,我看过几个关于如何使用 cx_freeze 和冻结带有图标的示例应用程序的教程。我想知道使用 pypackage 是否更有效

正如@dsgdfg 所建议的,我已将图标路径修改为 python os 拉取地址,但没有成功,但是,这是个好主意。