成功编译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(小牛队)
Python 2.7.5(默认,2013年8月25日,00:04:04)[GCC 4.2.1兼容 darwin上的Apple LLVM 5.0(clang-500.0.68)]
gcc-4.7(GCC)4.7.3版权所有(C)2012 Free Software Foundation,Inc。 这是免费软件;查看复制条件的来源。那里 不保修;甚至不适用于A的适销性或适用性 特别目的。
如何构建在此环境中通过测试的适当Mesos Python绑定?
答案 0 :(得分:3)
<强>更新强>
由于此版本完全处理了clang compilage(Yay!),我之前的回答大部分已经过时,因为Mesos 0.17.0已经过时了。所以不再需要使用gcc编译它 - 只需继续使用Xcode的clang(Xcode命令行实用程序)。
如果你仍然遇到麻烦让Python绑定工作,请在StackOverflow上添加评论或新问题或发布到Mesos邮件列表。
Mesos版本0.16.0或更低版本:
如何在OS X(10.9)上修复Mesos的Python绑定。
通过自制软件安装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绑定:
[RUN] ExamplesTest.PythonFramework
[确定] ExamplesTest.PythonFramework(1682 ms)
由于要求用户安装自定义Python版本通常是错误的,但在这种情况下似乎是不可避免的,让我起草一个问题的解释。也许其中一位读者知道更好的解决方法。
使用verbosive输出设置手动执行该测试有助于确定确切的问题。
bin/mesos-tests.sh --gtest_filter="*.PythonFramework" --verbose
Traceback(最近一次调用最后一次):文件 “/Users/till/Documents/Development/github/mesos-master/build/../src/examples/python/test_framework.py” 第23行,在 import mesos文件“build / bdist.macosx-10.9-intel / egg / mesos.py”,第26行,在文件中 “build / bdist.macosx-10.9-intel / egg / _mesos.py”,第7行,中
文件“build / bdist.macosx-10.9-intel / egg / _mesos.py”,第6行,in bootstrap ImportError:dlopen(/Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so, 2):找不到符号:__ ZNSoD0Ev参考自: /Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so 预计在:平面命名空间中 /Users/till/.python-eggs/mesos-0.16.0-py2.7-macosx-10.9-intel.egg-tmp/_mesos.so
重要的细节是这个原生Python蛋的动态链接失败了。
在构建mesos 0.16时,可以在此模块的distutils
构建步骤中找到推理。 Python distutils
直接从python-config
派生出他们的构建设置。由于您的Python是使用clang
构建的,distutils
也会尝试使用clang
构建您的原生蛋。
的问题:
distutils
构建阶段。因此,尽管Mesos本身是在上面的描述中使用gcc-4.7构建的,但是鸡蛋正在使用clang构建。结果是libc ++和stdlibc ++的混杂,它们不兼容ABI。
distutils
使用只有clang的gcc-frontend支持的参数来强制构建通用二进制文件(i386 + x86_64)。似乎没有解决方法,因此必须为这两种架构构建该鸡蛋的所有动态链接依赖项(这似乎是OS X 10.6的剩余部分)。homebrew
安装Python 2.7.3。 注意:不要安装Python 2.7.6(当前的homebrew默认设置),因为它与autoconf开发人员宏有关的问题(参见MESOS-617)