не может импортировать Python Pkgs в C ++ - PullRequest
0 голосов
/ 29 октября 2018

Я хочу создать программу на C ++ для запуска Python Scripts, которая импортирует numpy, моя версия на 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;
}

> Сегодня понедельник, 29 октября 16:32:38 2018 D: \ репо \ cppCallPython \ cppCallPython ['C: \ Users \ Bryan Zoe \ Anaconda3 \ python36.zip', 'C: \ Users \ Bryan Zoe \ Anaconda3 \ Lib', 'C: \ Users \ Брайан Zoe \ Anaconda3 \ DLLs', 'C: \ Programme Файлы \ 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, в импортировать 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 голосов
/ 29 октября 2018

проверьте ваш код, встроенный пакет python работает нормально, например, пакет time и os. Numpy - это третий пакет, это не wotk, так что вам нужно, как папка установки библиотеки python в дополнительную библиотеку компоновщика программ C ++.

В VS настройка пути может выглядеть следующим образом Проект> Свойства> Свойства конфигурации> Компоновщик> Общие> Каталог дополнительных библиотек

пожалуйста, проверьте.

...