无法在C ++中导入python pkgs

时间:2018-10-29 08:47:18

标签: python c++ pythoninterpreter

我想构建一个C ++程序来运行导入numpy的python脚本,我的python版本是anaconda,我运行该程序,但报告“没有名为numpy的模块”。这是代码

#include <iostream>
#include <Python.h>

int main(int argc, char *argv[])
{
    if (argc < 1) {
        fprintf(stderr, "Usage: call pythonfile funcname [args]\n");
        return 1;
    }
    wchar_t *pName = Py_DecodeLocale(argv[0], NULL);
    if (pName == NULL) {
        fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
        exit(1);
    }
    // std::cout << pName << std::endl;
    Py_SetProgramName(pName);
    Py_Initialize();
    PyRun_SimpleString("from time import time,ctime\n"
        "print('Today is', ctime(time()))\n");
    PyRun_SimpleString("import sys, os");
    PyRun_SimpleString("print(os.getcwd())");
    PyRun_SimpleString("sys.path.append(os.getcwd())");
    PyRun_SimpleString("sys.path.append(\"D:/repos/cppCallPython/x64/Release\")");
    PyRun_SimpleString("print(sys.path)");
    // PyRun_SimpleString("import numpy");
    PyObject *moduleName, *pModule;
    moduleName = PyUnicode_DecodeFSDefault("interface");
    // moduleName = PyUnicode_DecodeFSDefault(argv[1]);
    pModule = PyImport_Import(moduleName);
    if (pModule == NULL) {
        PyErr_Print();
        fprintf(stderr, "Fails to import the module.\n");
    }
    Py_DECREF(moduleName);
    if (Py_FinalizeEx() < 0) {
        exit(120);
    }
    PyMem_RawFree(pName);
    system("pause");
    return 0;
}
  

>   今天是2018年10月29日星期一   D:\ repos \ cppCallPython \ cppCallPython   ['C:\ Users \ Bryan Zoe \ Anaconda3 \ python36.zip','C:\ Users \ Bryan Zoe \ Anaconda3 \ Lib','C:\ Users \ Bryan Zoe \ Anaconda3 \ DLLs,'C:\ Program Files \ Python36 \ Lib','C:\ Program Files \ Python36 \ DLLs','D:\ repos \ cppCallPython \ x64 \ Release','C:\ Program Files \ Python36','C:\ Program Files \ Python36 \ lib \ site-packages','D:\ repos \ cppCallPython \ cppCallPython','D:/ repos / cppCallPython / x64 / Release']   追溯(最近一次通话):     文件“ D:\ repos \ cppCallPython \ x64 \ Release \ interface.py”,第1行,在       将numpy导入为np   ModuleNotFoundError:没有名为“ numpy”的模块   无法导入模块。

interface.py位于'D:/ repos / cppCallPython / x64 / Release'中。看来python解释器是一个纯解释器,代码创建了一个新的python virtualenv。我不知道该如何解决。 这是interface.py

的代码
import numpy as np
zeros = np.zeros((3, 3))
print("Succeeds to call python scripts")
print(zeros)

在电源外壳中工作正常 enter image description here

1 个答案:

答案 0 :(得分:1)

检查您的代码,python内置软件包可以正常工作,例如time和os软件包。 numpy是第三个软件包,它不是wotk,因此您需要将python库安装文件夹放入C ++程序链接器附加库中。

在VS中,设置路径可能是这样的 项目>属性>配置属性>链接器>常规>其他库目录

请检查。