从Python C扩展中导入和使用标准Python模块

时间:2012-02-11 04:39:16

标签: python c python-c-api python-extensions

我有用C编写的Python扩展模块。我想在这个C代码中使用标准Python模块之一,例如osshutil。怎么做到最好?

2 个答案:

答案 0 :(得分:8)

PyObject* os = PyImport_ImportModuleNoBlock("os");
if (os == NULL)
  return NULL;
someattr = PyObject_GetAttrString(os, "someattr");
Py_DECREF(os);

如果您只导入一次模块,例如,在init_yourmodule()函数中,请使用PyImport_ImportModule("os")

答案 1 :(得分:2)

唐'吨

相反,更改扩展模块以便它为Python提供服务,然后编写调用osshutil和模块的Python代码。

事实上,对于os模块中的大量内容,编写本机C代码而不是调用Python可能更好。

当然,you can call Python modules from C code,对于osshutil这样的低级别模块来说,这样做太过分了。当谈到shutil中的文件复制方法时,在C代码中重新实现它们是微不足道的。事实上,在Windows上,复制文件是通过调用操作系统完成的,所以即使用C语言编写也没有太多代码。

如果Python模块是用C语言编写的,你甚至可以复制所需方法的代码。