0

我想构建一个 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 日星期一 16:32:38 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 '] Traceback(最近一次调用最后一次):文件“D:\repos\cppCallPython\x64\Release\interface.py”,第 1 行,在 import numpy as np ModuleNotFoundError: No module named '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)

它在电源外壳中工作正常 在此处输入图像描述

4

1 回答 1

1

检查你的代码,python 内置包工作正常,例如 time 和 os 包。numpy是第三个包,它不是wotk,所以你需要像python库安装文件夹到C++程序链接器附加库。

在 VS 中,设置路径可能像这样 Project > Properties > Configuration Properties > Linker > General > Additional Library Directory

请检查。

于 2018-10-29T09:15:57.020 回答