gpt4 book ai didi

python - Mesos ExamplesTest.PythonFramework 检查在 OSX 上失败

转载 作者:行者123 更新时间:2023-11-28 16:39:58 25 4
gpt4 key购买 nike

成功编译 Mesos 0.16.0 后,在检查 PythonFramework 时运行测试失败。所有其他测试均成功通过。

我用于构建的步骤:

./bootstrap
mkdir build
cd build
../configure CXX=g++4.7 CC=gcc-4.7
make

然后,在运行测试时;
make check
结果如下所示:
[...]
[ RUN ] ExamplesTest.PythonFramework
../../src/tests/script.cpp:78: Failure
Failed
python_framework_test.sh exited with status 1
[ FAILED ] ExamplesTest.PythonFramework (201 ms)
[...]

环境:

OS X 10.9.1 (Mavericks)

Python 2.7.5 (default, Aug 25 2013, 00:04:04) [GCC 4.2.1 CompatibleApple LLVM 5.0 (clang-500.0.68)] on darwin

gcc-4.7 (GCC) 4.7.3 Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. Thereis NO warranty; not even for MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE.



如何构建适当的 Mesos Python 绑定(bind)以通过此环境中的测试?

最佳答案

更新:

我以前的答案在 Mesos 0.17.0 中大部分已经过时了,因为这个版本确实完全处理了 clang 编译(耶!)。所以不再需要使用 gcc 来编译它——只需继续使用 Xcode 的 clang(Xcode 命令行实用程序)。

如果您仍然无法让 Python 绑定(bind)正常工作,请在 StackOverflow 上添加评论或新问题,或发布到 Mesos 邮件列表。

Mesos 0.16.0 或更低版本:

如何在 OS X (10.9) 上修复 Mesos 的 Python 绑定(bind)。

通过自制软件安装 Python 2.7.3

找出可用的版本
brew versions python

2.7.6 git checkout 3c86d2b /usr/local/Library/Formula/python.rb

2.7.5 git checkout a04b443 /usr/local/Library/Formula/python.rb

2.7.3 git checkout 865f763 /usr/local/Library/Formula/python.rb

2.7.4 git checkout 280581d /usr/local/Library/Formula/python.rb

[...]



选择 Python 2.7.3
cd /usr/local/Library/Formula/ git checkout 865f763 /usr/local/Library/Formula/python.rb brew install python
确保不要强制安装通用版本(32 + 64 位),因为这会再次导致下面解释的相同问题。默认只有 64 位,这很好。

结合您的自定义 Python 安装重建 Mesos
rm -rf build rm -rf ~/.python-eggs mkdir build cd build ../configure CXX=g++-4.7 CC=gcc-4.7 PYTHON=/usr/local/bin/python make make check
您现在应该看到一个正常运行的测试,因此是一个完美的 Mesos Python 绑定(bind):

[ RUN ] ExamplesTest.PythonFramework

[ OK ] ExamplesTest.PythonFramework (1682 ms)



由于要求用户安装自定义 Python 版本通常是错误的,但在这种情况下似乎是不可避免的,让我草拟一下这个问题的解释。也许其中一位读者知道更好的解决方法。

使用详细输出设置手动执行该测试确实有助于确定确切的问题。
bin/mesos-tests.sh --gtest_filter="*.PythonFramework" --verbose

Traceback (most recent call last): File "/Users/till/Documents/Development/github/mesos-master/build/../src/examples/python/test_framework.py", line 23, in import mesos File "build/bdist.macosx-10.9-intel/egg/mesos.py", line 26, in File "build/bdist.macosx-10.9-intel/egg/_mesos.py", line 7, in
File "build/bdist.macosx-10.9-intel/egg/_mesos.py", line 6, in bootstrap ImportError: dlopen(/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so, 2): Symbol not found: __ZNSoD0Ev Referenced from: /Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so Expected in: flat namespace in /Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so



重要的细节是原生 Python 鸡蛋的动态链接失败了。

原因可在 distutils 中找到。构建 mesos 0.16 时此模块的构建步骤。 python distutils直接从 python-config 导出它们的build设置.由于您的 Python 是使用 clang 构建的, distutils将尝试使用 clang 构建您的原生鸡蛋也是。

问题:
  • Mesos 的 autoconf 阶段没有将编译器设置传播到 distutils构建阶段。因此,尽管在上面的描述中 Mesos 本身是使用 gcc-4.7 构建的,但 egg 是使用 clang 构建的。结果是不兼容 ABI 的 libc++ 和 stdlibc++ 的混杂。
  • 该部分正在修复中,Mesos 将在 distutils 中使用相同的编译器构建阶段(见 MESOS-798MESOS-799 )。当您阅读此答案时,很有可能已经解决了该特定问题。
  • 默认 OS X Python distutils使用只有 clang 的 gcc-frontend 支持的参数强制构建通用二进制文件 (i386 + x86_64)。似乎没有解决方法,因此也必须为这两种架构构建该 egg 的所有动态链接依赖项(这似乎是 OS X 10.6 的遗留物)。
  • Mesos 本身静态链接到该 Egg 中,因此不必将其构建为通用二进制文件,即可在 64 位平台上构建和运行 Egg。但是,它将无法在 32 位平台上执行。
  • 只要 Mesos 不支持 clang 编译(因此与 libc++ 链接),唯一合适的解决方法似乎是安装不同编译的 Python。一个快速简单的解决方案是使用 homebrew安装 Python 2.7.3。 备注 : 不要安装 Python 2.7.6(当前默认的自制软件),因为它的 autoconf 开发者宏有问题(见 MESOS-617)
  • 关于python - Mesos ExamplesTest.PythonFramework 检查在 OSX 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733512/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com