C++调用python遇到的各种问题

6 篇文章 3 订阅

c++ 调用 conda 虚拟环境中的 Python

问题1 PyImport_ImportModule 函数返回空,但自己写的测试程序没有问题

出现这个问题直接原因是你所用的py脚本使用Torch之类的外部库,自己写的测试没有使用外部库。

所以自己写的可以被执行,但有其他非系统的库的py脚本执行时就报错。在当前环境中下载需要的库也许可以解决问题,但是会改变但当前python环境,解决问题的方向不对。

另一种方向是你的环境中装了多个Python。Py_SetPythonHome 设置的python.exe路径错误。你所设置的Python.exe环境没有装外部库。

比如你的Anaconda3 装在D盘,Anaconda3的虚拟环境在c盘, E盘装了python;此时Py_SetPythonHome 设置为E盘的python,在虚拟环境中正常运行的py脚本c++就调不动。

正确的做法是,你使用的py脚本在哪个环境中可以正常运行,Py_SetPythonHome设置那个环境中的python.exe路径。并且引入虚拟环境中的库和lib

以Qt调用python生成的yolo模型为例:

pro中设置为

INCLUDEPATH += $$(PYTHONPATH)/include    \
               $$(PYTHONPATH)/Lib/site-packages/numpy/core/include/numpy

LIBS += $$(PYTHONPATH)/libs/python39.lib

#PYTHONPATH  为  D:\Anaconda3  的路径 或者 为 虚拟环境 C:\Users\***\.conda\envs\yolo5
#(这俩本质好像是一致的,但我不清楚希望有人指出)

c++ Py_SetPythonHome参数

Py_SetPythonHome(L"C:/Users/**/.conda/envs/yolo5");

问题2 TypeError:type’types,GenericAlias’is not an acceptable base type

解决问题1,然后又这个问题那么说明你当前使用的Pyhton版本不对。
查看方法:CMD》Python 查看python版本,打开 Anaconda3查看 python 版本,你会发现这俩个版本不一致。
解决办法:在环境变量中添加 D:/Anaconda3/Scripts 路径和 D:/Anaconda3路径 并上移到最上边,这样保证系c++在调用Python时找到正确的环境

问题3 解决问题1依然缺链接库、import失败;诸如找不到models

出现这个问题说明你的py文件没有放在原本的工程文件夹下,正确的方式是在调用函数PyEun_SimpleString(“sys.path.appen(‘./yolov5-master’)”)时yolov5-master文件夹下满除了py文件外还要包含模型环境和依赖

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值