设置python环境变量
在安装好python后,需要将python安装目录设置为系统环境变量。设置步骤为:
- 编辑系统环境变量
- 新建环境变量,变量名为PYTHONHOME,变量值为pythoon安装目录,默认安装时一般为一下路径
1
2
|
//该目录为python.exe所在目录
C:\Users\UserName\AppData\Local\Programs\Python\Python36-32
|
设置完毕后保存,重启电脑以确保环境变量生效。
CMake配置工程
windows配置调用python的VS工程比较麻烦,使用CMake构建比较方便。在此之前请确保已经安装matplotlib,
安装cmake,并将cmake.exe所在目录添加至path环境变量(在安装时会提示是否选择添加,注意勾选就不需要手动添加)
以下面例子说明,创建工程c++文件
1
2
3
4
5
6
7
8
9
10
11
|
//main.cpp
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
int main()
{
plt::plot({1,3,2,4});
plt::show();
return 0;
}
|
拷贝matplotlibcpp.h库文件到main.cpp同级目录,matplotlibcpp.h文件可到github下载:matplotlibcpp,在main.cpp同级目录新建CMakeLists.txt,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# cmake最低版本要求
cmake_minimum_required(VERSION 3.7)
# 项目名称
project (cpp_call_matplotlib)
# 设置c++编译器语言标准版本11以上
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加python路径,这里从环境变量里面搜索,加入你没有设置PYTHONHOME系统环境变量,这里需要填入python安装目录的绝对路径
include_directories($ENV{PYTHONHOME}/include)
# numpy可以不需要
include_directories($ENV{PYTHONHOME}/Lib/site-packages/numpy/core/include)
link_directories($ENV{PYTHONHOME}/libs)
# 添加头文件定义
add_definitions(-DMATPLOTLIBCPP_PYTHON_HEADER=Python.h)
# 可执行文件
add_executable(${PROJECT_NAME} main.cpp)
|
接下来使用cmake生成VS工程,在CMakeLists.txt同级目录下打开Powershell终端
1
2
3
4
5
6
7
8
9
|
# 创建build目录
mkdir build
# cd 到build目录
cd build
# 如果你安装的VS为2017,且python为32位
cmake -G "Visual Studio 15 2017" -A Win32 ..
# 如果python安装为64位
cmake -G "Visual Studio 15 2017" -A Win64 ..
# 如果你使用的版本位VS2019,将以上"Visual Studio 15 2017"替换位"Visual Studio 16 2019"即可
|
执行完毕后,build目录下生成对应的VS工程,使用VS打开编译即可。生成的工程是自动配置了debug与releas版本的,但默认安装并未安装python版本,所以若想debug版本使用,需要在matplotlibcpp.h文件前面添加如下定义:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma once
// Python headers must be included before any system headers, since
// they define _POSIX_C_SOURCE
//-------添加部分--------
#ifdef _DEBUG
#undef _DEBUG
//-------添加部分--------
#include <Python.h>
#define _DEBUG
#else
#include <Python.h>
#endif
//...
|
使得debug版本工程依然调用release的python包。
本文由芒果浩明发布,转载请注明出处。
本文链接:https://blog.mangoeffect.net/cpp/call-matplotlib-on-cpp3.html