首页 > 编程语言 >C++调用python过程+Anaconda使用arcpy包踩的坑

C++调用python过程+Anaconda使用arcpy包踩的坑

时间:2023-05-17 18:23:42浏览次数:73  
标签:python py Anaconda SimpleString sys popt arcpy

C++调python(python文件包含第三方库):

工具:VS2017 QT5插件 Pycharm Anaconda

1.下载Anaconda,配置一个虚拟环境

2.将这个环境里的DLLs和Lib包以及相应py文件,放至C++项目生成.exe文件同级目录下

 3.将include和libs放在项目某文件夹下,在VS里添加附加包含目录、附加库目录和附加依赖项

 

 4.调用python代码

C++:
void Risk_HLProduct::PowerFit() {//调用py文件,获取拟合a,b Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化 QString str; if (!Py_IsInitialized()) { printf("初始化失败!"); //return res; } PyRun_SimpleString("import sys"); //PyRun_SimpleString("sys.path.append('./')"); PyRun_SimpleString("sys.path.append('E:/bin')");//.exe文件所在目录 PyRun_SimpleString("sys.path.append('E:/bin/DLLs')");//从anaconda复制来的DLLs PyRun_SimpleString("sys.path.append('E:/bin/Lib')");//从anaconda复制来的Lib PyRun_SimpleString("print(sys.path)"); PyObject * pModule = NULL;//声明变量 PyObject * pFunc = NULL;// 声明变量 pModule = PyImport_ImportModule("PowerFit");//这里是要调用的文件名PowerFit.py if (pModule == NULL) { qDebug()<< "没找到" << endl; } pFunc = PyObject_GetAttrString(pModule, "power_fit");//这里是要调用的函数名 PyObject* pReturn = PyObject_CallObject(pFunc, NULL);//无参数调用 //直接解析 PyArg_ParseTuple(pReturn, "f|f", &a, &b);//返回两个float值 //这里的f|f是两个float的意思,返回值解析可参考https://blog.csdn.net/qq_38770597/article/details/128061813?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-128061813-blog-81224381.235%5Ev35%5Epc_relevant_increate_t0_download_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-128061813-blog-81224381.235%5Ev35%5Epc_relevant_increate_t0_download_v2&utm_relevant_index=4 Py_Finalize(); // 与初始化对应 system("pause"); //return res; }
Python:
# encoding: utf-8 from scipy.optimize import curve_fit ### 定义拟合函数, y = a * x^b ### def target_func(x, a, b): return a * (x ** b) def power_fit(): # 幂函数拟合 xdata = [10, 4, 8.96, 7.5, 13.34, 10.8, 16.45, 15, 7.92, 18, 15, 13.75, 33.54, 30] ydata = [28, 60, 134.4, 187.5, 200, 216, 246.75, 300, 318, 360, 630, 1265, 1509, 4500] ### 利用拟合函数求特征值 ### popt, pcov = curve_fit(target_func, xdata, ydata) # 拟合的值 y = [target_func(i, popt[0], popt[1]) for i in xdata] return popt[0], popt[1] if __name__ == '__main__': popt = power_fit() print("a = %f b = %f " % (popt[0], popt[1]))

 

Anaconda中使用arcpy:

1.创建新环境arcpyP27,可参考https://zhuanlan.zhihu.com/p/591010245

2.缺什么模块都在这下载,记得一定一定要把对应的依赖包也下载上

https://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

记得选择对应位数和python版本的依赖包:比如netCDF4,我这边是python2.7和win32,下载了对应的netCDF4‑1.5.3‑cp27‑cp27m‑win32.whl(cp后面是python版本,win后面是位数)

 3.把下载的whl文件放在D:\conda\envs\arcpyP27\Lib\site-packages下,打开Anaconda Prompt,先cd到这个文件夹下,然后activate arcpyP27环境:

 4.运行对应的py文件:cd到py对应文件夹下,转arcpyP27环境:python xxx.py

标签:python,py,Anaconda,SimpleString,sys,popt,arcpy
From: https://www.cnblogs.com/cjhtxdy/p/17409565.html

相关文章

  • 用Python开发输入法后台(2)——输入‘我’的消息交互过程
    用户操作用户输入‘w’,显示以‘w’开始的单字用户输入数字键,比如‘1’,选择一个单字‘我’‘我’字上屏,回到初始状态消息交互过程init,onActivate切换到当前输入法时,后台会发送这两个消息filterKeyDown用户输入‘w’时,后台发送此消息,表示指定keycode是否处理还是忽略,pyth......
  • Python中,如何使得图像的中文和负号正常显示
    问题描述运行的图像结果里面,发现里面有许多空心框框,中文不见了,负号也不见了问题解决解决中文乱码问题:plt.rcParams['font.sans-serif']=['SimHei']解决负号乱码问题:plt.rcParams['axes.unicode_minus']=False以上两条代码均引用于这个包:importmatplotlib.pyplot......
  • python调用企业微信webhook发送消息
    官方文档:群机器人配置说明-文档-企业微信开发者中心发送图片解决:{"errcode":301019,"errmsg":"mediamd5notmatch,hint:[1684315383531332325922225],fromip:222.71.242.114,moreinfoathttps://open.work.weixin.qq.com/devtool/query?e=301019"}这个是瞎......
  • Python中,y轴数据逆序问题的解决
    问题描述想要从高到低表示数据的变化,发现y轴数据与实际的二维坐标轴不相符问题解决在使用了x轴和y轴之后,加上这样一条代码:plt.gca().invert_yaxis()即可实现y轴由高到低变化,恢复正常实际!......
  • python实现数据库备份与恢复
    1.概述首先,数据库的备份理论上只是一句命令的事,但是也可以通过循环遍历数据库的表实现备份,但是无疑那样会使代码量提升很多,不过就是用SQL语句,原理倒是非常简单。当然,现在市面上用的最多的还是用命令的,这条命令如果手动操作应该是在命令窗口就可以实现的,用代码的话不过是拼接下字......
  • CentOS6 基于 Python 安装 Sentry
    概述Sentry是一款可用于Production环境的错误跟踪工具,可实时通知Production环境中用户由于一些不可预料行为(或者程序写的有问题)导致程序Crash或Exception,Sentry可以通过Integration如HipChat来发送通知,并且可以通过JIRAIntegration来快速创建Issue,然后开发者......
  • Scala中实现和Python一致的整数除法和整数求余
    \[\color{black}{\text{Inscala,it'sweirdtomimic`%``//`ofpython}}\]/*Python's%operatorreturnsaresultwiththesamesignasthedivisor,and//roundstowardsnegativeinfinity.InScala,%and/don'tbehavethesameway.......
  • python:ERROR: Could not build wheels for wordcloud, which is required to install
    pycharm里无法下载,在下面下载出现问题 需要下载error里的文件https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud这个网站找。输入Python,看自己电脑是怎样的 下载文件后,放到对应位置,下载成功 ......
  • Python枚举类型enum
    为什么需要枚举枚举(Enum)是一种数据类型,也是一种特别的类,是绑定到唯一值的符号表示,可以使用它来创建用于变量和属性的常量集枚举类可以看成是一个下拉菜单,给出特定的选项且这些选项不可修改,更贴近自然语言的方式表达数据,可以让代码更容易阅读、维护,减少转换或者错误值引......
  • 48024 python 代码分析
    ComputerScience220SC(2023)Assignment3(Basicgraphalgorithmsandtraversals)SeeCanvasforduedateThisassignmentrequiresyoutosubmitprogramsinPythonthatyouhavewrittenyourselftotheautomarker,https://www.automarker.cs.auckland.ac.nz.Yo......