Tag: python embedding

在初始化时嵌入python错误

当我运行C代码来调用python函数时,Py_Initialize()上出现错误错误是ImportError:没有名为site的模块。 我试过把Py_SetProgramName(argv [0])但它不起作用。 cmd调用是cInterfacePython Test.py乘以3 2(exe是cInterfacePython)

在嵌入式Python解释器中打印变量

我编写了一个嵌入Python的小程序。 我正在使用Py_Initialize()和Py_Finalize()正确设置它,并且能够使用PyRun_SimpleString或PyRun_SimpleFile运行脚本。 但是,我不知道在打印变量时如何模仿Python自己的解释器的行为。 特别: a = (1, 2, 3) print a 适合我的工作:打印出来(1,2,3) 然而: a = (1, 2, 3) a 什么都没打印出来。 在Python自己的解释器中,这也会打印出(1,2,3)。 如何让我的代码执行用户期望的操作并打印出值? 提前致谢!

在C中嵌入python,未定义的符号:PyExc_ImportError

我正在尝试为Audacious Media Player编写一个加载python模块的插件。 python嵌入代码来自python-2.6源代码(embed / Demo)。 这用命令行编译, gcc -o demo demo.c -lpython2.6 -lm -L/usr/lib/python2.6/config 我将-lpython2.6 -lm -L/usr/lib/python2.6/config到CC args中。 它加载了一个导入pygtk和gtk模块的Python脚本,这很好用。 但是在我编译插件(共享库)之后发生以下错误(这不是特定于gtk因为我发现,对于任何使用本机库的python模块都是一样的) Traceback (most recent call last): File “”, line 1, in File “./xyz.py”, line 7, in import gtk File “/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py”, line 30, in import gobject as _gobject File “/usr/lib/pymodules/python2.6/gtk-2.0/gobject/__init__.py”, line 26, in from glib import spawn_async, […]

在C中嵌入Python:链接时出错 – 对PyString_AsString的未定义引用

我试图在C程序中嵌入一个python程序。 我的操作系统是Ubuntu 14.04 我尝试在相同的C代码库(作为单独的应用程序)中嵌入python 2.7和python 3.4解释器。 编译和链接在嵌入python 2.7时有效,但不适用于python 3.4。 它在链接器阶段失败。 这是我的C代码(只是一个例子不是真正的代码) simple.c #include #include int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pFunc, *pValue; char module[] = “get_version”; char func[] = “get_version”; char module_path[] = “.”; Py_Initialize(); PyObject *sys_path = PySys_GetObject(“path”); PyList_Append(sys_path, PyUnicode_FromString(module_path)); pName = PyUnicode_FromString(module); pModule = PyImport_Import(pName); Py_DECREF(pName); if(pModule != NULL) { […]

嵌入时Python 3解释器是否会泄漏内存?

此错误报告指出,截至2007年6月,Python解释器在使用嵌入式Python解释器的C / C ++应用程序中调用Py_Finalize后,将不会清除所有已分配的内存。 建议在应用程序终止时调用Py_Finalize一次。 此错误报告指出,从版本3.3和2011年3月开始,解释器仍会泄漏内存。 有谁知道这个问题的当前状态? 我很担心,因为我有一个应用程序,其中每个运行实例多次调用解释器,我遇到内存泄漏。 我已经使用boost :: python来处理引用计数,并清除了在运行之间运行Python程序所创建的所有引用的全局字典。 我有一些单身人士课 – 这可能是问题吗? 这是一个易处理的问题还是Python解释器中的错误?

在Python模块中嵌入Python脚本时的ImportError和PyExc_SystemError(.so文件)

我正在尝试用C语言编写一个演示PAM模块,该模块使用C语言中的嵌入式Python来运行用python(2.7)编写的脚本,在pam_sm_authenticate()函数内部,该函数用C文件(pam_auth.c)编写。 这是python脚本:test.py import math import numpy def test_func(): a = “test” return a test.py的路径是/usr/lib/Python2.7/,以便我可以轻松导入它。 这是C文件: #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #include #include #include #include #include #include #include #define NOBODY “nobody” /*PAM Stuffs*/ PAM_EXTERN int pam_sm_authenticate( pam_handle_t* pamh, int flags, int argc, const char** argv) { const char *user; int retval; user = NULL; retval […]

嵌入式Python 2.7.2从用户定义的目录导入模块

我将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 我过去曾经管理过(为了概念validation)使用以下类型的代码完成这项工作: PyObject* pName = PyString_FromString(“userscript.py”); PyObject* pModule = PyImport_Import(pName); PyObject* pDict = PyModule_GetDict(pModule); PyObject* pClass = PyDict_GetItemString(pDict, “userscript”); PyObject* scriptHandle = PyObject_CallObject(pClass, NULL); 现在我处于更多的生产环境中,这在PyImport_Import行失败了 – 我想这可能是因为我正在尝试将目录添加到脚本名称,例如 PyObject* pName = PyString_FromString(“E:\\scriptlocation\\userscript.py”); 现在,为了让您了解我尝试过的内容,我尝试在所有这些调用之前修改系统路径以使其搜索此模块。 […]

嵌入python

我试图从C代码调用python函数,我从这里跟随样本 我也有正确的包含文件目录,库目录,并链接python32.lib(即时使用python 32)但是错误是python / C API,如PyString_FromString,PyInt_FromLong,PyInt_AsLong未定义(调试器中的错误) 这很奇怪,因为我也使用其他API,但它们都很好…… 这是什么问题? int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; int i; if (argc < 3) { fprintf(stderr,"Usage: call pythonfile funcname [args]\n"); return 1; } Py_Initialize(); pName = PyString_FromString(argv[1]); /* Error checking of pName left out */ pModule = PyImport_Import(pName); Py_DECREF(pName); if (pModule […]

Python C API不加载模块

我正在尝试使用C API加载包含C中的math和numpy导入的python模块。 我可以加载并运行模块但是,如果我导入数学模块它不起作用。 我正在使用Arch Linux,Python 2.7.2和gcc。 这里的代码: #include #include #include int main(int argc, char **argv) { PyObject *pName, *pModule, *pFunc, *pArg, *pDict, *pReturn, *pT1, *pT2, *pX, *pY; int i; double x, y; Py_Initialize(); PySys_SetPath(“.”); pName = PyString_FromString(“func”); if (!pName) { printf(“pName\n”); return 0; } pModule = PyImport_Import(pName); pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict, “get_vals”); pArg […]