【问题标题】:Embedding Scipy into C将 Scipy 嵌入到 C 中
【发布时间】:2014-09-17 23:09:39
【问题描述】:

这是一个非常基本的问题,但它让我很难过。

我正在尝试将一些 scipy 例程嵌入到 c 程序中。但是,我无法成功完成导入任何 scipy 模块的初始步骤。

我可以导入顶级的scipy,而不会得到一个空返回值,所以我很确定安装没有问题......

PyObject *pckg_name, *pckg;

pckg_name = PyString_FromString("scipy");
pckg = PyImport_Import(pckg_name);
if (!pckg)
{
        printf("Error importing python module %s.\n");
        return;
} 

...但我无法达到任何较低的水平。我已经尝试了 PyImport_Import 和 PyImport_ImportModule 的各种组合,例如将“scipy.stats”作为第 1 步导入,或在导入 scipy 后将 stats 作为第 2 步导入,但没有任何效果。

我能够从“随机”模块导入和使用函数,所以我认为我的基础 Python 安装没有问题。我知道我在这里遗漏了一些明显的东西,但我无法弄清楚它是什么。

【问题讨论】:

    标签: python c scipy


    【解决方案1】:

    对于它的价值,这对我有用:

    try_scipy.c

    #include <Python.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        PyObject *pckg_name;
        PyObject *pckg;
    
        Py_Initialize();
    
        pckg_name = PyString_FromString("scipy.stats");
        pckg = PyImport_Import(pckg_name);
        if (!pckg) {
            printf("fail\n");
        }
        else {
            printf("got it!\n");
            Py_DECREF(pckg);
        }
        Py_DECREF(pckg_name);
    
        Py_Finalize();
    
        return EXIT_SUCCESS;
    }
    

    编译运行:

    $ gcc try_scipy.c `python-config --cflags --ldflags` -o try_scipy
    $ ./try_scipy
    got it!
    

    【讨论】:

    • 我已经尝试使用 PyImport_Import 作为我的第一步导入 scipy.stats(以及 scipy.stats.beta),但总是返回 null。如果这应该工作,我倾向于怀疑安装有问题,但我不知道什么样的问题会让我加载 scipy,而不是 scipy.stats。
    • 你能在 python 脚本中导入 scipy.stats 吗?
    • 好建议(我应该早点尝试);这至少隔离了我的问题。当我将from scipy import stats 放在我拥有的工作python 脚本的顶部时,结果是一条错误消息,上面写着numpy.ufunc has the wrong size, try recompiling。所以看起来问题很可能出在我的安装中,而不是在我的 c 程序中。谢谢。
    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多