1. 在window下
必须具备以下条件:
系统添加了
PYTHONHOME
变量。可能的报错信息:否则你可能会遇到以下报错信息
Py_Initialize: unableto load the file system codec
添加方法:新建
PYTHONHOME
变量,赋值为你的python根目录,比如我的是C:\Users\wangjiang\Anaconda3
,然后追加path
变量%PYTHONHOME%;%PYTHONHOME%/Scripts
C++应用位数和Python位数一致。(比如我新建的C++win控制台应用程序为64位;我的anaconda也是64位的)
然后开始配置编程环境(我用的是VS2013):
- 为C++程序添加include、lib。
右击项目属性,进入配置属性-->VC++目录
:
(1)在包含目录
下追加你的pythoninclude
目录。我这里是C:\Users\wangjiang\Anaconda3\include
(2)在库目录
下追加你的pythonlibs
目录。我这里是C:\Users\wangjiang\Anaconda3\libs
- 添加依赖库。
进入配置属性-->连接器-->输入-->附加依赖项
。追加你的python*.lib库。我这里是C:\Users\wangjiang\Anaconda3\libs\python35.lib
修改Python.h文件。
做法:打开include
目录下Python.h
文件,在#ifndef Py_PYTHON_H #define Py_PYTHON_H
下面追加一行
#define MS_NO_COREDLL
或者#define Py_NO_ENABLE_SHARED
如果不进行此步骤:可能会出现以下报错信息
cannot open file 'python35_d.lib'
然后你就可以愉快地写代码了。这里展示一下简单的示例
一个简单的栗子
c++书写以下代码:
// ConsoleApp64bit.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "Python.h"
int _tmain(int argc, _TCHAR* argv[])
{
Py_Initialize();
PyRun_SimpleString("import sys; sys.path.append('.')");
PyRun_SimpleString("import mytest;");
PyRun_SimpleString("print(mytest.myabs(-2.0))");
Py_Finalize();
while (1){ # 死循环,防止程序自动退出。
int i = 0;
}
return 0;
}
在你的源文件
下建立一个文件叫mytest.py
,文件内容为:
import math
def myabs(x):
return math.fabs(x)
运行,然后会输出
2
2. 在linux下
首先配置变量
打开/etc/bashrc
,添加PYTHONHOME
,LD_LIBRARY_PATH
。PYTHONHOME=/home/nlp/anaconda3/bin export LD_LIBRARY_PATH=/home/nlp/anaconda3/lib PATH=$PATH:PYTHONHOME
用g++编译源程序
g++ main.cpp -I /home/nlp/anaconda3/include/python3.5m -L /home/nlp/anaconda3/lib -lpython3.5m
Ref
在VS2012中C++嵌入python
Python编程->cannot open file ‘python27_d.lib’
Calling a python method from C/C++, and extracting its return value