【问题标题】:Global OS X framework clashes with local one and prevents Canopy from opening全球 OS X 框架与本地框架发生冲突并阻止 Canopy 打开
【发布时间】:2014-06-29 01:53:53
【问题描述】:

在我的系统 (Mac OS X 10.6.8) 中,无法打开 Enthought Canopy,因为它会立即崩溃并在控制台中出现许多错误:

11/05/14 20.28.00 [0x0-0x1271270].com.Canopy[53010] objc[53015]:QCocoaPageLayoutDelegate 类在 /Users/name/Applications/Canopy.app/appdata/canopy-1.4 中实现.0.1938.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/PySide/../../../../lib/QtGui.framework/Versions/4/QtGui和/库/框架/QtGui.framework/Versions/4/QtGui。将使用两者之一。哪一个是未定义的。

紧随其后

11/05/14 20.28.00 [0x0-0x1271270].com.Canopy[53010] QObject::moveToThread: 当前线程 (0x102837760) 不是对象的线程 (0x120281040)。

11/05/14 20.28.00 [0x0-0x1271270].com.Canopy[53010] 无法移动到目标线程 (0x102837760)

11/05/14 20.28.00 [0x0-0x1271270].com.Canopy[53010] 在 Mac OS X 上,您可能会将两组 Qt 二进制文件加载到同一个进程中。检查所有插件是否针对正确的 Qt 二进制文件进行编译。导出 DYLD_PRINT_LIBRARIES=1 并检查是否只加载了一组二进制文件。

事实上,我在默认位置安装了一个 Qt 版本(所以我有许多 /Library/Frameworks/QtGui.framework 类型的框架),这似乎与 Canopy 内部的版本冲突。有没有办法在不删除预先存在的 Qt 安装的情况下解决此冲突?

具有讽刺意味的是,我决定安装 Canopy 以规避我在安装 chaco 时遇到的问题,这是我唯一需要的程序,因为它需要 Qt 和 pyside。这引发了一场漫长的牦牛剃须马拉松,我希望通过安装 Canopy 来逃避安装一个程序(Qt->pyQt->ets->vtk->mayavi->chaco->pyside->...)。因此,我当时非常绝望。

【问题讨论】:

  • 无论谁打包/构建 Canopy 都需要齐心协力并正确参考捆绑的框架。

标签: macos qt cocoa enthought canopy


【解决方案1】:

考虑到您的操作系统的使用年限,您可能也在运行旧版本的 Canopy。 我从他们的网站下载了当前(64 位)版本,并针对它运行了以下脚本:

#!/bin/tcsh #-x

# create a working directory
if (! -e ~/Canopy ) then
    mkdir ~/Canopy
endif

# get a list of all files (and their types)
if (! -e ~/Canopy/Canopy-files.txt ) then
    find /Volumes/Enthought/Canopy.app/ -type f -exec file {} \; > ~/Canopy/Canopy-files.txt
endif

# grep that list for all dylibs
if (! -e ~/Canopy/Canopy-dylibs.txt ) then
    grep 'dynamically linked shared library' ~/Canopy/Canopy-files.txt > ~/Canopy/Canopy-dylibs.txt
endif

# `otool -DL` all dylibs in that list looking for 'QtGui'
foreach line ( "`cat ~/Canopy/Canopy-dylibs.txt`" )
    set file = `echo $line | awk '{split($0,a,":"); print a[1]}'`
    otool -DL $file | grep 'QtGui'
end

所有报告的 QtGui 路径为:

    @rpath/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.5)

实际的 dylib 位于:

/Volumes/Enthought/Canopy.app//appdata/canopy-1.4.0.1938.macosx-x86_64/Canopy.app/Contents/lib/QtGui.framework/Versions/4/QtGui:

要检查您的应用程序,请将第 10 行的路径更改为您的应用程序版本的路径。

如果您发现无效路径,您可以通过“install_name_tool”进行更改。警告:此工具静默失败;始终检查它是否符合您的预期。

【讨论】:

    【解决方案2】:

    造成这种情况的一个可能原因是您的 PYTHONPATH 环境变量被设置为指向另一个 Python 安装。这是对 PYTHONPATH 的错误使用,它旨在指向尚未安装到 Python 中的模块和包(通常是内部的)。它并不打算指向任何 Python 安装的核心(甚至不是正在运行的那个,当然也不是另一个)。 Enthought 正在考虑如何使 Canopy 对此类错误更加稳健。同时,您需要在启动 Canopy 之前取消设置 PYTHONPATH。

    如果不是这种情况,请报告所有环境变量的值(根据需要编辑)。您可以通过在终端中输入env 命令来获取此信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多