因业务需要进行c++调用python
基本流程:
建立project,分别编写cpp、py文件。
在project里边进行属性设置(三个)建立 c++与python联系:
①属性->c/c++常规->附加包含目录 里面加上自己的python下的include路径。
②属性-> 链接器->输入->附加依赖项 中添加python37.lib。然后配置此lib文件的路径,可以将python37.lib直接复制到工程中去,也可以直接添加系统中python37.lib的绝对路径。
③属性->VC++目录->包含目录->python安装目录下得include
属性->VC++目录->库目录->python安装目录下得libs
三个注意点
①确认已安装python (32位还是64位)对应VS编译时选择x86还是x64,否则会报错无法解析外部符号(python类)。
②python是否安装debug插件,否则会报错。
解决办法是要么安装python debug binaries,要么vs采用release进行编译。
③ 如果将py文件和cpp文件放在同一文件夹,注意py文件要和cpp一个目录层级,否则会找不到导入的python文件模块。
使用如下命令导入py文件:
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')"); //放在cpp的同一路径下
若目录不同,则导入
PyRun_SimpleString("sys.path.append('./')"); // ' '导入实际绝对路径
补充文件路径盲区:
绝对路径:
Linux和MacOS下的绝对路径和Windows系统不同,主要区别如下:
- 根文件夹不同,Windows的根文件夹是盘符,如
D:\
、C:\
;而在Linux和MacOS中,根文件夹是/
,你可以理解为所有的文件都在一个盘下,自然不需要用C
、D
这样的字符去区分了。 - 分隔符不同,在Windows 上,路径书写使用倒斜杠
\
作为文件夹之间的分隔符。但在MacOS和Linux上,使用正斜杠/
作为它们的路径分隔符。 - 大小写区分不同,文件夹名称和文件名在Windows和MacOS上是不区分大小写的,但在Linux上是区分大小写的。
相对路径是指以当前工作目录为参照基础,链接到目标文件资源(或文件夹)的路径。
相对路径的表示符号如下:
以./开头,代表当前目录和文件目录在同一个目录里,./也可以省略不写;
以../开头:向上走一级,代表目标文件在当前文件所在的上一级目录;
以../../开头:向上走两级,代表父级的父级目录,也就是上上级目录,再说明白点,就是上一级目录的上一级目录;
以/开头,代表根目录。
Python表示文件路径
在Python中,一般使用字符串存储文件路径。但需要注意的是,字符反斜杠\在Python中表示转义字符。因此,在表示Windows系统下的文件路径(Windows系统的分隔符是\)时需注意以下要点:
以路径D:\files\data\ndvi.tif为例;
在字符串前加个字符r,表示该字符串为原始字符串,会完全忽略所有的转义字符。例如,r"D:\files\data\ndvi.tif";
对转义字符进行转义,例如,"D:\\files\\data\\ndvi.tif";
将分隔符替换为/,在Windows系统下,将分隔符替换为/Python也能正确识别。例如,"D:/files/data/ndvi.tif"。
Linux和MacOS下,直接将路径放到单引号或者双引号里就行。