问题描述
我使用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")],)