嵌入式Python2.7.2从用户定义的目录导入模块

2024-06-13 12:48:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Python嵌入到具有定义API的C/C++应用程序中。在

应用程序需要实例化脚本中定义的类,这些类的结构大致如下:

class userscript1:
    def __init__(self):
        ##do something here...

    def method1(self):
        ## method that can be called by the C/C++ app...etc

我过去曾设法(为了概念验证)使用以下类型的代码来完成这项工作:

^{pr2}$

现在我处于一个更大的生产环境中,在PyImport_Import行失败了-我想这可能是因为我试图在脚本名前面添加一个目录,例如

PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");

现在,为了让您了解我所做的,我尝试在所有这些调用之前修改系统路径,让它搜索这个模块。基本上试过修改系统路径以编程方式:

PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);

这些行运行正常,但对代码的工作没有影响。显然,我真正的代码有一大堆错误检查,我已经排除了,所以不用担心!在

所以我的问题是:如何正确地将嵌入式解释器指向我的脚本,以便能够实例化类?在


Tags: path实例代码self路径脚本api应用程序
1条回答
网友
1楼 · 发布于 2024-06-13 12:48:37

您需要指定userscript而不是userscript.py也使用PyImport_ImportModule,它直接接受char *

userscript.py表示包userscript中的模块py

这个代码适用于我:

#include <stdio.h>
#include <stdlib.h>
#include <Python.h>

int main(void)
{
    const char *scriptDirectoryName = "/tmp";
    Py_Initialize();
    PyObject *sysPath = PySys_GetObject("path");
    PyObject *path = PyString_FromString(scriptDirectoryName);
    int result = PyList_Insert(sysPath, 0, path);
    PyObject *pModule = PyImport_ImportModule("userscript");
    if (PyErr_Occurred())
        PyErr_Print();
    printf("%p\n", pModule);
    Py_Finalize();
    return 0;
}

相关问题 更多 >