嵌入python:与ProgramFullPath不一致的版本

时间:2016-08-22 11:44:48

标签: python python-2.7 anaconda embedding python-embedding

我首先在我的路径上安装了anaconda Python,但是一个简单的Python嵌入示例显示了我的Mac系统python版本,即使ProgramFullPath正确指向anaconda python。有没有办法正确查找/使用anaconda python?

最小例子:

#include <Python.h>
#include <stdio.h>

int main(void) {
    Py_Initialize();
    printf("Python version:\n%s\n", Py_GetVersion());
    printf("Python Program Full Path:\n%s\n", Py_GetProgramFullPath());
    Py_Finalize();
    return 0;
}

我编译,

gcc `python-config --cflags` example.c `python-config --ldflags`

或者,扩展python-config来电的结果

gcc -I/Users/ryandwyer/anaconda/include/python2.7 \
    -I/Users/ryandwyer/anaconda/include/python2.7 \
    -fno-strict-aliasing -I/Users/ryandwyer/anaconda/include \
    -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes \
    example.c -lpython2.7 -ldl -framework CoreFoundation -u _PyMac_Error

运行程序,

Python version:
2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]
Python Program Full Path:
/Users/ryandwyer/anaconda/bin/python

这似乎与Embed python in c++: choose python version的问题相同。我还尝试设置PYTHONHOMEPy_SetProgramNamePy_SetPythonHome,但无法让Python_GetVersion()返回anaconda版本。

1 个答案:

答案 0 :(得分:1)

您关联的帖子中有部分答案。

选项1:按如下方式运行您的程序

LD_LIBRARY_PATH = / path_to_anaconda / lib ./program

选项2:在终端中运行以下命令,然后运行程序

export LD_LIBRARY_PATH = / path_to_anaconda / lib  ./program

选项3:将以下行添加到.bashrc文件的末尾

LD_LIBRARY_PATH = / path_to_anaconda / lib中

为什么在嵌入python时必须这样做,而不是在正常运行解释器时呢?我不知道,但如果有一些Python / C向导在这篇文章中发现,我很想知道原因。