梅索斯示例Test.python框架在OSX上检查失败

2024-05-20 17:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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


我用于构建的步骤:

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

然后,在运行测试时

^{pr2}$

结果如下:

[...]
[ 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 Compatible Apple 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. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


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


Tags: buildfor环境isconfigurecd步骤cxx
1条回答
网友
1楼 · 发布于 2024-05-20 17:32:53

更新:

我以前的答案在mesos0.17.0中已经过时了,因为这个版本完全可以处理clang编译(Yay!)。因此,不需要再使用gcc编译它了,只需继续使用Xcode的clang(Xcode命令行实用程序)。在

如果您仍然无法使用Python绑定,请在StackOverflow或post上添加评论或新问题到Mesos邮件列表中。在


Mesos 0.16.0或更低版本:

如何修复OSX(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

[ 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蛋的动态链接失败了。在

在构建mesos 0.16时,可以在本模块的distutils构建步骤中找到理由。Pythondistutils直接从python-config派生其构建设置。由于您的Python是使用clang构建的,distutils也将尝试使用clang来构建您的原生鸡蛋。在

问题:

  • Mesos的autoconf阶段没有将编译器设置传播到distutils构建阶段。因此,尽管Mesos本身是使用上面描述的gcc-4.7构建的,但egg是使用clang构建的。结果是libc++和stdlibc++的混搭,它们不兼容ABI。
    • 这一部分正在修复中,Mesos也将在distutils构建阶段使用相同的编译器(参见MESOS-798MESOS-799)。当你读到这个答案的时候,这个问题很有可能已经被解决了。在
  • 默认的OS X Pythondistutils确实强制使用只有clang的gcc前端支持的参数来构建通用二进制文件(i386+x86_64)。这似乎没有解决办法,因此所有动态链接的依赖关系,该蛋将不得不建立为两个架构,以及(这似乎是一个遗留下来的OSX10.6)。在
  • Mesos本身是静态链接到该鸡蛋,因此它不必被构建为一个通用的二进制,鸡蛋建立和运行在一个64位平台上。然而,它将无法在32位平台上执行。在
  • 只要Mesos不支持clang编译(因此链接到libc++),唯一合适的解决方法似乎就是安装一个不同编译的Python。一个快速而简单的解决方案是使用homebrew安装python2.7.3。注意:不要安装Python2.7.6(当前的自制程序默认值),因为它的autoconf developer宏存在问题(请参见MESOS-617

相关问题 更多 >