Python C API不加载模块

Python C API不加载模块,第1张

概述我正在尝试使用C API加载一个包含C中的数学和numpy导入的 python模块.我可以加载并运行模块但是,如果我导入数学模块它不起作用. 我使用的是Arch Linux,Python 2.7.2和gcc. 这里的代码: #include <stdio.h>#include <stdlib.h>#include <python2.7/Python.h>int main(int argc 我正在尝试使用C API加载一个包含C中的数学和numpy导入的 python模块.我可以加载并运行模块但是,如果我导入数学模块它不起作用.

我使用的是Arch Linux,Python 2.7.2和gcc.

这里的代码:

#include <stdio.h>#include <stdlib.h>#include <python2.7/Python.h>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 = PyTuple_New(2);    PyTuple_SetItem(pArg,Pyfloat_FromDouble(4.0));    PyTuple_SetItem(pArg,1,Pyfloat_FromDouble(2.0));    pReturn = PyObject_CallObject(pFunc,pArg);    pT1 = PyTuple_GetItem(pReturn,0);    pT2 = PyTuple_GetItem(pReturn,1);    for (i = 0; i < PyTuple_Size(pT1); i++)    {        pX = PyTuple_GetItem(pT1,i);        pY = PyTuple_GetItem(pT2,i);        x = Pyfloat_AsDouble(pX);        y = Pyfloat_AsDouble(pY);        Py_XDECREF(pX);        Py_XDECREF(pY);        pX = NulL;        pY = NulL;        printf("Point p position is: %.2fx,%.2fy",x,y);    }    Py_XDECREF(pname); Py_XDECREF(pModule); Py_XDECREF(pFunc); Py_XDECREF(pArg); Py_XDECREF(pDict); Py_XDECREF(pReturn); Py_XDECREF(pT1); Py_XDECREF(pT2);    Py_Finalize();    return 0;}

func.py

from math import cosdef get_vals(wIDth,height):    x = (1,2)    y = (cos(3),4)    return x,y

如何在不需要使用脚本的情况下将Python脚本嵌入到C中?

解决方法 PySys_SetPath(“.”)清除了python路径,因此无法再找到任何库.你真正需要做的是导入sys.path然后将你的字符串附加到它:

PyObject *sys = Pyimport_importModule("sys");PyObject *path = PyObject_GetAttrString(sys,"path");PyList_Append(path,PyString_FromString("."));

(我没有测试上面的代码,但应该关闭.另外,你应该做错误检查)

总结

以上是内存溢出为你收集整理的Python C API不加载模块全部内容,希望文章能够帮你解决Python C API不加载模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存