我一直在寻找我的问题的答案很长一段时间,但没有找到我发现的问题似乎解决了我的问题。在C++中嵌入python:选择python版本
我想通过Python提供的功能(Python.h,Py_xxx函数等)将Python嵌入到我的C++代码中。但是,我在让我的C++程序调用正确的Python解释器方面遇到了麻烦。事实上,我的机器上有几个解释器(顺便说一下,它是运行OSX 10.7.5的Mac)。我已经预装了操作系统(版本2.7.1)的Python的默认版本,并且我有另一个由anaconda(版本2.7.7)安装的版本。我需要使用由anaconda安装的版本,因为我需要额外的anaconda库,这些库不是默认安装在OSX的Python中的。
我的C++代码如下:
char* python_home_ = (char*) "/anaconda";
char* program_name_ = (char*) "/anaconda/bin/python2.7";
Py_SetPythonHome(python_home_);
Py_SetProgramName(program_name_);
Py_Initialize();
printf("python home: %s\n", Py_GetPythonHome());
printf("program name: %s\n", Py_GetProgramName());
printf("get path: %s\n", Py_GetPath());
printf("get prefix: %s\n", Py_GetPrefix());
printf("get exec prefix: %s\n", Py_GetExecPrefix());
printf("get prog full path: %s\n", Py_GetProgramFullPath());
PyRun_SimpleString("import sys");
printf("path: ");
PyRun_SimpleString("print sys.path");
printf("version: ");
PyRun_SimpleString("print sys.version");
而结果:
python home: /anaconda
program name: /anaconda/bin/python2.7
get path: /anaconda/lib/python27.zip:/anaconda/lib/python2.7/:/anaconda/lib/python2.7/plat-darwin:/anaconda/lib/python2.7/plat-mac:/anaconda/lib/python2.7/plat-mac/lib-scriptpackages:/anaconda/lib/python2.7/../../Extras/lib/python:/anaconda/lib/python2.7/lib-tk:/anaconda/lib/python2.7/lib-old:/anaconda/lib/python2.7/lib-dynload
get prefix: /anaconda
get exec prefix: /anaconda
get prog full path: /anaconda/bin/python2.7
path: ['/anaconda/lib/python2.7/site-packages/sphinxcontrib_googleanalytics-0.1dev_20140616-py2.7.egg', '/anaconda/lib/python27.zip', '/anaconda/lib/python2.7', '/anaconda/lib/python2.7/plat-darwin', '/anaconda/lib/python2.7/plat-mac', '/anaconda/lib/python2.7/plat-mac/lib-scriptpackages', '/anaconda/Extras/lib/python', '/anaconda/lib/python2.7/lib-tk', '/anaconda/lib/python2.7/lib-old', '/anaconda/lib/python2.7/lib-dynload', '/anaconda/lib/python2.7/site-packages', '/anaconda/lib/python2.7/site-packages/PIL', '/anaconda/lib/python2.7/site-packages/setuptools-2.2-py2.7.egg']
version: 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]
然而,当我在终端运行的水蟒的蟒蛇,这里是我得到
Alexs-MacBook-Pro:lib alex$ /anaconda/bin/python2.7
Python 2.7.7 |Anaconda 1.9.1 (x86_64)| (default, Jun 2 2014, 12:48:16)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
并用默认的python结果
Alexs-MacBook-Pro:lib alex$ /usr/bin/python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
因此,即使我为可执行文件指定了另一个路径,OSX的默认python也会被调用(并与以后要导入的anaconda库冲突)。
我的问题很简单:我做错了什么,为什么我通过Py_Setxxx指定的路径没有指向正确的可执行文件?
非常感谢您的帮助!
Alex
您编译的Python不会更重要吗?你用什么命令编译? – asmeurer 2014-08-29 18:50:21
这里是我如何编译'g ++ -fno-strict-aliasing -DIL_STD -I/anaconda/include/python2.7 -O3 -g3 -pedantic -Wall -c -fmessage-length = 0'这里是我如何链接' g ++ -ansi -pedantic -DIL_STD -ggdb -m64 -w -g -L/anaconda/lib -lpython2.7'。这是你的问题的答案吗? 编辑:我也设置PYTHONHOME的值为'/ anaconda'和PYTHONPATH为'/anaconda/lib/python27.zip:/anaconda/lib/python2.7:/anaconda/lib/python2.7/plat-darwin :/anaconda/lib/python2.7/plat-mac:/anaconda/lib/python2.7/plat-mac/lib-scriptpackages:...'。但它也没有任何影响。 – 2014-09-01 07:56:08