gpt4 book ai didi

python - 从 C 程序中调用 Python 函数

转载 作者:行者123 更新时间:2023-11-28 20:22:00 25 4
gpt4 key购买 nike

我有一个 C 语言的应用程序,有时我需要解决一个非线性优化问题。不幸的是,AFAIK 在 C 中执行此操作的资源非常有限(否则请告诉我)。但是用 Python 做起来很简单,例如scipy.optimize.minimize .

当我尝试这样做时,我遇到了一些似乎非常常见的陷阱,例如Python.h 未找到,模块未加载,函数调用段错误等

对于新手来说,有什么快速简便的方法可以将这两个程序联系起来?

最佳答案

为了完成这项工作,您必须确保具备一些条件:

  1. 确保安装了 Python(您可能需要 python-dev 软件包)。
  2. 找到您的 Python.h文件,例如通过 locate Python.h .其中一个事件应该在 include 的子(子)文件夹中。文件夹,例如路径应该类似于 ../include/python2.7/Python.h .
  3. 插入 #include “<path_to_Python.h>"在您的 C 代码中,以便能够使用 Python API。
  4. 使用任何教程调用您的 Python 函数。我用了this one它成功了。然而,有几个小问题遗漏了:

    • 每当您使用任何 Py<Name>功能,例如PyImport_Import() , 总是检查结果以确保没有错误,例如

      // Load the module object
      pModule = PyImport_Import(pName);

      if (!pModule)
      {
      PyErr_Print();
      printf("ERROR in pModule\n");
      exit(1);
      }
    • 在初始化 Python 解释器后立即执行,即在 Py_Initialize(); 之后,您必须将当前路径附加到 sys.path为了能够加载您的模块(假设它位于您当前的目录中):

      PyObject *sys = PyImport_ImportModule("sys");
      PyObject *path = PyObject_GetAttrString(sys, "path");
      PyList_Append(path, PyString_FromString("."));
  5. 请记住,当您为 Python 文件命名时,它必须没有扩展名 .py .
  6. 最后,您必须在编译/链接期间执行以下操作:
    • 记住 ../include/python2.7/Python.h你以前用过的文件?包括 include头文件目录列表中的文件夹,带有 -I gcc 中的选项编译期间的选项,例如-I /System/Library/Frameworks/Python.framework/Versions/2.7/include .
    • 同时将包含所需库的文件夹传递给链接器。它应该位于 include 所在的同一文件夹内文件夹位于,例如-L /System/Library/Frameworks/Python.framework/Versions/2.7/lib , 以及 -lpython2.7选项(当然会根据您的 Python 版本进行调整)。

现在您必须能够成功编译和执行调用 Python 程序的 C 程序。

我希望这对您有所帮助,祝您好运!

来源:

关于python - 从 C 程序中调用 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com