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

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

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

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

别。

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

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

当然, 你可以从C代码调用Python模块 ,只是这样做对osshutil等低级模块来说shutil 。 说到shutil的文件复制方法,在C代码中重新实现它们是微不足道的。 事实上,在Windows上,复制文件是通过调用操作系统来完成的,因此用C编写的代码也不多。

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