从 Python C 扩展内部导入和使用标准 Python 模块
我有用 C 编写的 Python 扩展模块。我想在此 C 代码中使用标准 Python 模块之一,例如 os
或 shutil
。如何最好地做到这一点?
I have Python extension module written in C. I want to use in this C code one of the standard Python modules, for example os
or shutil
. How is best to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您仅导入模块一次,例如在
init_yourmodule()
函数中,则使用PyImport_ImportModule("os")
。If you import the module only once e.g., in
init_yourmodule()
function then usePyImport_ImportModule("os")
.不。
相反,更改您的扩展模块,以便它向 Python 提供服务,然后编写调用
os
、shutil
和您的模块的 Python 代码。事实上,对于 os 模块中的许多内容,编写本机 C 代码可能比调用 Python 更好。
当然,你可以从 C 代码调用 Python 模块,只是这样做对于像 os 和 Shututil 这样的低级模块来说有点过分了。当谈到
shutil
中的文件复制方法时,在 C 代码中重新实现它们是很简单的。事实上,在 Windows 上,复制文件是通过调用操作系统来完成的,因此甚至不需要用 C 编写太多代码。如果 Python 模块是用 C 编写的,您甚至可以只复制所需方法的代码。
Don't.
Instead, change your extension module so that it provides a service to Python, and then write Python code which calls
os
,shutil
and your module.In fact, for a lot of the content in the
os
module it is probably better to write native C code rather than call into Python.Of course, you can call Python modules from C code, it's just that doing that is overkill for low level modules like
os
andshutil
. When it comes to the file copying methods inshutil
reimplementing them in your C code is trivial. In fact, on Windows, copying a file is done by a call to the OS so there is not much code to even write in C.If the Python module is written in C you could even just copy the code for the methods that you need.