在OSX Lion上强制链接到特定的python库

时间:2013-11-15 14:25:22

标签: python macos

我正在使用swig从c ++文件构建一个python模块,我在OSX 10.8上的主目录中也有一个本地版本的python 2.7。我想使用我的本地python构建,但是osx有一个系统python,这会导致一些麻烦。我收到以下错误

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

根据浏览,这是由于我的python执行,但模块链接系统python。

我部署了一个小的swig示例as from tutorial,然后按如下方式链接

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,可能是因为框架在分辨率中排在第一位,虽然我不确定这是在链接时还是在执行时。

_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)并让它在运行时解析,因为它发生在Linux中?

1 个答案:

答案 0 :(得分:1)

你需要测试解决方案,因为我没有tan OSX机器来测试它,但我认为这可以解决你的问题:

创建(或编辑一个)运行脚本并更改别名或PATH变量:

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

# Run your app here

如果有帮助,请告诉我。