没有这样的文件或目录:cx_freeze

问题描述

我使用PyQT5开发了使用python的软件。 现在我有main.ui和main.py 我已经使用以下命令行读取main.ui文件:

FORM_CLASS,_=loadUiType(path.join(path.dirname(__file__),"main.ui"))

现在我的main.ui已连接到写入主要python代码的main.py文件。

我还按照cx_freeze指令创建了setup.py

然后我使用了cmd命令:

python setup.py build_exe

完成后,我收到以下错误:

No such file or directory:'main.ui'

那我可以解决这个问题吗?

解决方法

如果您要使用外部资源,则应该对data files使用cx_freeze手册:

使用数据文件除代码外,应用程序通常还需要数据文件, 例如图标。使用安装脚本,您可以列出数据文件或 build_exe的include_files选项中的目录。他们会 复制到可执行文件旁边的构建目录。然后找到 他们,使用这样的代码:

def find_data_file(filename):
    if getattr(sys,'frozen',False):
        # The application is frozen
        datadir = os.path.dirname(sys.executable)
    else:
        # The application is not frozen
        # Change this bit to match where you store your data files:
        datadir = os.path.dirname(__file__)
    return os.path.join(datadir,filename)

另一种方法是将数据嵌入代码中,例如使用Qt的 资源系统。

因此,您可以将代码修改为:

import os.path
import sys
# ...

def find_data_file(filename):
    if getattr(sys,filename)

# ...

FORM_CLASS,_=loadUiType(find_data_file("main.ui"))

# ...

并更改setup.py以包含.ui:

from cx_Freeze import setup,Executable

setup(
    name="mytest",version="0.1",description="",options={"build_exe": {"include_files": "main.ui"}},executables=[Executable("main.py")],)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...