cx_Freeze 找不到 QtDesigner 框架
Posted
技术标签:
【中文标题】cx_Freeze 找不到 QtDesigner 框架【英文标题】:cx_Freeze cannot find QtDesigner framework 【发布时间】:2016-05-16 15:42:50 【问题描述】:我正在尝试将我的 Python 应用程序转换为可执行文件,我发现 cx_Freeze 最容易修改并用于我的需要。
这是我的setup.py
脚本:
from cx_Freeze import setup, Executable
includefiles = ['Leaderboard.txt']
includes = ['PyQt4.QtGui', 'PyQt4.QtCore', 'functools.partial', 'multiprocessing.Process', 'sys']
setup(
name = 'App',
version = '1.0',
description = 'Description',
author = 'ShellRox',
options = 'build_exe': 'include_files':includefiles,
executables = [Executable('Project.py', copyDependentFiles=True)]
)
完整代码here.
由于某种原因,我收到此错误:
error: [Errno 2] No such file or directory: 'QtDesigner.framework/Versions/4/QtDesigner'
完整日志here。
但是我不完全确定问题出在哪里,在做了一些研究后,我发现只有一个结果与我的问题相匹配,而且它根本没有帮助(我删除了包)。
我还在includes
中只添加了子模块,但它仍然无济于事,我猜它不是在寻找模块。
让我怀疑的一件事是我的reseources.py
文件是否有关联。
我还尝试将 QtDesigner 位置文件添加到 Path 中,但没有更新任何正在进行的内容。
问题:
问题可能是什么?我如何在 cx_Freeze 中将其列入黑名单,这样它就不会搜索 QtDesigner 框架(如果它没有用),或者我是否需要在路径中添加位置以便它可以查找 Qt Designer(如果是,路径在哪里?)。
【问题讨论】:
【参考方案1】:cx_Freeze 有一个排除二进制文件的选项。使用该选项来阻止搜索不需要的二进制文件。 来自文档
bin_excludes - 在确定通常包含的二进制文件的依赖关系时要排除的文件名列表;请注意,通常遵循共享对象扩展名的版本号在执行比较之前会被删除
将该选项添加到您的 setup.py 文件中的 build_exe 选项中,如下所示
build_exe_options =
"icon": iconPath,
"packages": packages,
"includes": includes,
"include_files": include_files,
"excludes": excludes,
"optimize": True,
"bin_excludes": ["QtDesigner"],
但是如果你的代码确实需要那个可执行文件呢?如果您使用“otool”查看依赖关系,您可能会发现 PySide.QtUiTools 模块需要 qtdesigner。
$ otool -L ~/lib/python2.7/site-packages/PySide/QtUiTools.so
/lib/python2.7/site-packages/PySide/QtUiTools.so:
@rpath/libpyside-python2.7.1.2.dylib (compatibility version 1.2.0, current version 1.2.2)
/usr/local/lib/QtDesigner.framework/Versions/4/QtDesigner (compatibility version 4.8.0, current version 4.8.6)
/usr/local/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.6)
/usr/local/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.6)
@rpath/libshiboken-python2.7.1.2.dylib (compatibility version 1.2.0, current version 1.2.2)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
因此,您最好找到 QtDesigner 所在的位置,并使用“install_name_tool”将搜索路径更改为 QtUiTools.so 模块的正确位置。
【讨论】:
以上是关于cx_Freeze 找不到 QtDesigner 框架的主要内容,如果未能解决你的问题,请参考以下文章
Cx_Freeze 找不到 pkg_resources/*.*'
cx_freeze/PyQt5: pywintypes.error: (2, 'BeginUpdateResource', '系统找不到指定的文件。'