2014-01-10 42 views
2

我在OSX 10.9上運行python的自制版本:Maverick。OpenNI模塊導入的Python分段錯誤11 - Homebrew boost和python問題?

短版:

我遇到一個Python segmentation fault 11,當我嘗試導入OpenNI模塊爲蟒蛇。我曾嘗試重新命名我的readline.so文件,如下面的鏈接提示,所以我假定這是一個不同的問題:

Python crashing when running two commands (Segmentation Fault: 11)

我想知道這可能是我自制的升壓問題安裝不鏈接到Python的正確版本。雖然我似乎無法修復它,但很可能會咆哮錯誤的樹。

很長的版本:

我一直在試圖安裝以下從這個網站方向PyOpenNI Python模塊: http://www.justinfx.com/2012/06/21/getting-started-with-xbox-360-kinect-on-osx/

,而無需手動安裝OpenNI,NITE和Kinect的傳感器我使用的是我在這裏找到的brew版本: https://github.com/totakke/homebrew-openni

一切似乎一直很好,直到我到達最後一步,安裝PyOpenN一世。創建make文件時遇到了CMake錯誤;它沒有找到OpenNI庫和包含目錄。我手動將這些放在CMakeCache.txt文件中,然後安裝似乎正常工作。

一旦我試圖導入openni模塊中的Python Shell中,我得到了:

Fatal Python error: PyThreadState_Get: no current thread 
Abort trap: 6 

谷歌搜索這個了一下,有些人認爲這是一個加速的錯誤,已經安裝到Mac打造Python而不是Homebrew版本。 Homebrew + Python on mac os x 10.8: Fatal Python error: PyThreadState_Get: no current thread importing mapnik

運行otool -L $(brew list boost | grep 'python.*.dylib')輸出建議是這樣的話:

的利益線:

/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.5) 

全輸出:

/usr/local/Cellar/boost/1.55.0/lib/libboost_python-mt.dylib: 
/usr/local/lib/libboost_python-mt.dylib (compatibility version 0.0.0, current version 0.0.0) 
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.5) 
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 
/usr/local/Cellar/boost/1.55.0/lib/libboost_python.dylib: 
/usr/local/lib/libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0) 
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.5) 
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 

我卸載升壓並與brew install boost --build-from-source

重新安裝了它

有趣的是,在安裝後,它給了這樣的警告:

The Boost bottle's module will not import into a Homebrew-installed Python. 
If you use the Boost Python module then please: 
    brew install boost --build-from-source 

這是因爲我只是這樣做顯然滑稽。再次運行otool

的利益線:

/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0) 

全輸出:

/usr/local/Cellar/boost/1.55.0/lib/libboost_python-mt.dylib: 
/usr/local/lib/libboost_python-mt.dylib (compatibility version 0.0.0, current version 0.0.0) 
/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0) 
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 
/usr/local/Cellar/boost/1.55.0/lib/libboost_python.dylib: 
/usr/local/lib/libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0) 
/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0) 
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 

所以現在它似乎指向一個不同的Python框架目錄,但似乎仍然沒有Homebrew Python框架目錄。

我是在本評估報告提振仍沒有鏈接到蟒蛇的自制軟件版本是否正確?這可能是導致分段錯誤11,還是由其他內容完全導致?

+0

也許它會幫助別人 - 我已閱讀在一些Homebrew問題的評論中,分段錯誤通常意味着錯誤的Python二進制文件。例如,某些東西是針對系統python構建的,但是針對釀造的python運行。 – Tony

回答

0

我知道答案是遲,但因爲它是對我來說可能會有所幫助的人。顯然這個解決方案是由akakcolin發佈的,作爲與Github上的PyOpenNI相關的問題之一的答案。

  1. 重建自制的Python:

    brew update然後brew doctor

    brew rm python

    brew install python --force --install-lib --install-headers --install-data --verbose

  2. 符號鏈接:

    ln -s /usr/local/Cellar/python/2.7.x/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib /usr/local/lib/(您正在使用要注意的Python版本)

  3. cmake並做:

    cmake ../PyOpenNI你可能已經指定-D OPENNI_INCLUDE_DIR

    make

這與工作對我來說Python 2.7.10和boost(使用boost-python)1.58.0