更新:
我以前的答案大多是由於這樣的事實,這個版本沒有完全處理鐺compilage變得過時作爲Mesos 0.17.0或更新的(耶!)。因此,沒有必要使用gcc再編譯它 - 只要繼續使用Xcode的鐺(Xcode中的命令行實用工具)。
如果你仍然陷入麻煩的Python綁定工作,請在這裏發表評論或新問題在計算器上或張貼到Mesos郵件列表。
Mesos 0.16.0或更低版本:
如何解決Mesos在OS X(10.9)的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位,這就好了。
重建在連接Mesos與您的自定義Python安裝
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版本通常是錯誤的,但在這種情況下似乎是不可避免的,讓我起草一個問題的解釋。也許其中一位讀者知道更好的解決方法。
使用verbosive輸出設置手動執行該測試有助於確定確切的問題。
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本地雞蛋的動態鏈接失敗的事實。
當建立0.16時,推理可在distutils
構建步驟中找到。 Python distutils
直接從派生它們的構建設置。由於您的Python是使用clang
構建的,因此distutils
也會嘗試使用clang
來構建您的本地蛋。
問題:
- Mesos' autoconf的階段並沒有傳播編譯器設置成
distutils
構建階段。因此,即使Mesos本身是在上面的描述中使用gcc-4.7構建的,但是蛋是使用clang構建的。結果是libC++和stdlibC++不兼容ABI。
- 該部分現在正在修復,Mesos將在
distutils
構建階段也使用相同的編譯器(請參閱MESOS-798和MESOS-799)。當你讀到這個答案時,機會非常高,這個問題已經得到了解決。
- 默認OS X的Python
distutils
不執行構建使用僅鐺的GCC-前端支持參數通用二進制代碼(I386 + x86_64的)。似乎沒有解決方法,因此所有動態鏈接的依賴關係都必須爲兩種體系結構構建(這似乎是OS X 10.6剩餘的)。
- Mesos本身被靜態鏈接到那個蛋中,因此它不必被構建爲一個通用的二進制文件,以便在64位平臺上構建和運行。但是它將無法在32位平臺上執行。
- 只要Mesos不支持clang compilage(因此與libC++鏈接),唯一適當的解決方法似乎是安裝一個不同編譯的Python。一個快速而簡單的解決方案是使用
homebrew
來安裝Python 2.7.3。 注意:不安裝Python 2.7.6(自制的當前默認)作爲一個在其開發的autoconf宏連接有問題(見MESOS-617)