无法导入模块的PyImport_Import模块

时间:2020-04-03 12:33:03

标签: python c importerror python-c-api

这是我第一次在这里发布问题,所以希望我做得正确,否则请告诉我。

我正在尝试使用c ++进行包装,并调用python模块。我可以调用一个简单的python模块,但是,一旦我包含了一个导入模块的python模块,就会出现分段错误。

我将代码导入为使用助手类的地方:

setenv("PYTHONPATH", "./AugmentedAutoencoder/auto_pose/test", 0);

    CPyInstance hInstance;  
    if(!Py_IsInitialized()){
        std::cout << "unable to init Py" << std::endl;
    }
    else{
        CPyObject pName = PyUnicode_FromString("aae_webcam");

        CPyObject pModule = PyImport_Import(pName);




        if(pModule)
        {
            std::cout << "Module imported.. " << std::endl;

        }
        else
        {
            printf("ERROR: Module not imported \n");
            PyErr_Print();
        }
    }

导入的python模块的开头类似于:

import cv2
import argparse
import tensorflow as tf
import numpy as np
import os
import configparser

from auto_pose.ae import factory
from auto_pose.ae import utils as u
from webcam_video_stream import WebcamVideoStream

parser = argparse.ArgumentParser()
parser.add_argument("experiment_name")
arguments = parser.parse_args()

full_name = arguments.experiment_name.split('/')

experiment_name = full_name.pop()
experiment_group = full_name.pop() if len(full_name) > 0 else ''

我尝试在线寻找答案,但是没有成功。因此,我希望您能够向我提供帮助。

编辑: CPyObject是一个类的实例:

class CPyInstance
{
public:
    CPyInstance()
    {
        Py_Initialize();
    }

    ~CPyInstance()
    {
        Py_Finalize();
    }
};


class CPyObject
{
private:
    PyObject *p;
public:
    CPyObject() : p(NULL)
    {}

    CPyObject(PyObject* _p) : p(_p)
    {}


    ~CPyObject()
    {
        Release();
    }

    PyObject* getObject()
    {
        return p;
    }

    PyObject* setObject(PyObject* _p)
    {
        return (p=_p);
    }

    PyObject* AddRef()
    {
        if(p)
        {
            Py_INCREF(p);
        }
        return p;
    }

    void Release()
    {
        if(p)
        {
            Py_DECREF(p);
        }

        p= NULL;
    }

    PyObject* operator ->()
    {
        return p;
    }

    bool is()
    {
        return p ? true : false;
    }

    operator PyObject*()
    {
        return p;
    }

    PyObject* operator = (PyObject* pp)
    {
        p = pp;
        return p;
    }

    operator bool()
    {
        return p ? true : false;
    }
};

0 个答案:

没有答案