cx_Freeze无法找到QtDesigner框架

时间:2016-05-16 15:42:51

标签: python pyqt4 cx-freeze errno

我正在尝试将我的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 个答案:

答案 0 :(得分:0)

cx_Freeze可以选择排除二进制文件。使用该选项阻止搜索不需要的二进制文件。 来自文档

  

bin_excludes - 确定通常包含的二进制文件的依赖关系时要排除的文件的名称列表;请注意,在执行比较之前,将删除通常在共享对象扩展名后面的版本号

将此选项添加到build_exe选项中的setup.py文件中,如此

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模块的正确位置。