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 错误:找不到模块 tkinter

Cx_Freeze 找不到 pkg_resources/*.*'

找不到模块'cx_Freeze__init__'

cx_Freeze 应用程序找不到 tk.tcl

cx_freeze/PyQt5: pywintypes.error: (2, 'BeginUpdateResource', '系统找不到指定的文件。'

cx_freeze 找不到 python 3 路径 mac