2013-11-15 9 views
5

swigを使用してC++ファイルからPythonモジュールをビルドしています。また、OSX 10.8のホームディレクトリにpython 2.7のローカルビルドもあります。私は自分のローカルのPythonでビルドしたいが、osxにはシステムPythonがあり、それはいくつかの問題を引き起こす。私は周りの閲覧によると、それは実行私のpythonのためにですが、モジュールは、システムのpythonに対してリンク次のエラーOSX Lionの特定のPythonライブラリへのリンクを実装する

>>> import example 
Fatal Python error: PyThreadState_Get: no current thread 
Abort trap: 6 

を取得します。

私は十分

gcc -shared -I builddir/include/python2.7/ example.c example_wrap.c \ 
    -o _example.so -L builddir/lib/python2.7/ -lpython2.7 

は確かに次のように、_example.soは、フレームワークは、私が、解像度で最初に来るためか、システムのpythonに対して結合続けas from tutorial、小さながぶ飲み例を展開した後、リンクこれがリンク時であるか実行時であるかはわかりません。

_example.so: 
    _example.so (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.2) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 

どうすれば私自身のPythonライブラリに対して強制的にバインドできますか?

編集:私は正常にそれが

install_name_tool -change 
     /System/Library/Frameworks/Python.framework/Versions/2.7/Python 
     @executable_path/../lib/libpython2.7.dylib 

を実行して、インポートさせることに成功したが、それはハックのように感じています。リンカーに私のライブラリを見つけさせて、適切なリファレンスをそれに入れることはできませんか?ライブラリ名(libpython2.7.dylib)を指定して実行時に解決することはできませんか?

+1

dyldのためのldconfig equivelent(またはdyldが新しいライブラリを拾うために任意の新しいパスをシステム全体に追加する機能はないので、install_name_toolのほうがおそらく最も近いソリューションです(1)システムライブラリのパス(/ lib、/ usr/lib)、またはDYLD_ *環境変数へのインストールを含むもう1つの解決策は、静的Pythonライブラリ(.a)にリンクすることです。 – synthesizerpatel

+0

は、サイレント拡張のvirtualenvで、これは以前のバージョン(osx 10.7)で動作していましたが、何が変わったのかわからないので、権威のある答えを知りたいと思います。 ... –

+0

私はvirtualenvの中でこれを試みることを提案しようとしていましたが、@ qarmaがそこに同様の問題を抱えているのは興味深いです。 – cm2

答えて

1

私はここでそれをテストするための日焼けOSXマシンを持っていないので、あなたは、ソリューションをテストする必要がありますが、私は、これはあなたの問題を解決することができると思います。

の作成(または1つを編集)実行スクリプトと変更あなたのエイリアスまたはPATH変数:

alias python='/your/local/python' 
PATH=/your/local/python:$PATH 

# Run your app here 

これが役立つかどうか教えてください。

関連する問題