ubuntu c++ 调用 conda的python虚拟环境

环境 ubuntu16.04

1.前言

之前写过一篇博客是关于c++调用系统的python环境的.
ubuntu c++ 调用 python
那么如果我想调用conda的环境可以吗?
答案是可以的(qtcreator中需要配置Python环境)


2021/5/17 更新 感谢评论区老哥的提醒!在qtcreator中想要使用python,有两种设置方式

  • 终端添加Python到环境变量中,然后打开qtcreator
export PYTHONHOME=/home/jinye/anaconda3/envs/tensorflow-gpu
  • 打开qtcreator->项目->run->Run Environment 添加变量PYTHONHOME
    在这里插入图片描述

2.c++

2.1cpp

cpp文件与之前相同

#include <Python.h>
int main(int argc, char *argv[]) {
    Py_Initialize();

    //判断初始化是否成功
    if(!Py_IsInitialized())
    {
        printf("Python init failed!\n");
        return -1;
    }
    PyRun_SimpleString("import sys");
    //PyRun_SimpleString("sys.path.append('./')");//若python文件在c++工程下
    // 添加python文件所在的位置
    PyRun_SimpleString("sys.path.append('/home/jinye/projects/D3Feat')");
    PyObject* pModule = NULL;
    PyObject* pFunc = NULL;

	//导入python文件
    pModule = PyImport_ImportModule("forcpp");
    if (!pModule) {
        printf("Can not open python file!\n");
        return -1;
    }

    pFunc = PyObject_GetAttrString(pModule, "printHello");
    //PyEval_CallObject(pFunc, NULL);
    PyObject_CallObject(pFunc, NULL);

    Py_DECREF(pFunc);
    Py_DECREF(pModule);
    Py_Finalize();
    return 0;
}

2.2CMakeLists.txt

只是修改了头文件和库文件的路径

cmake_minimum_required(VERSION 2.8)
project(python_test)
include_directories(
    /home/jinye/anaconda3/envs/tensorflow-gpu/include/python3.7m
)
add_executable(main
    main.cpp)
target_link_libraries(main
    /home/jinye/anaconda3/envs/tensorflow-gpu/lib/libpython3.7m.so
)

3.python

py文件与之前的相比只是增加了tensorflow库,没错,打印了tf的消息证实我们调用的是另一个python环境.

import tensorflow as tf
import sys

def printHello():
    print(sys.version)
    print('tf -V: ', tf.__version__)
    print("hello world!")

4.在qtcreator中碰到的问题

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f63049dc700 (most recent call first):
The program has unexpectedly finished.
The process was ended forcefully.

被这个问题折磨了好久,脑阔疼!
两种处理方式

  • 终端编译时指定路径:
cmake .. "-DCMAKE_PREFIX_PATH=/path/to/anaconda/envs/env_name"

哇,我在终端测试了一下,编译没有问题,可执行文件也可以运行,这就说明我所指向的conda虚拟环境中的头文件和库文件没有问题.

  • qtcreator添加Python路径
    打开qtcreator->项目->run->Run Environment 添加变量PYTHONHOME
    在这里插入图片描述

在这里插入图片描述
参考
https://zhuanlan.zhihu.com/p/103219038

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值