Python C扩展:使用扩展PYD或DLL?

2024-05-12 23:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用C编写的Python扩展名,我想知道是否应该在Windows下使用文件扩展名DLL或PYD。(我在Linux中会使用什么?)

有什么区别吗(除了文件名之外)?

我找到了an unofficial article。这是pyc的秘密吗? 为什么我找不到关于这个话题的官方文章?


Tags: 文件an官方文件名linuxwindowsarticle文章
3条回答

根据Building C and C++ Extensions on Windows创建自己的项目步骤(Cookbook方法的步骤7)

The output file should be called spam.pyd (in Release mode) or spam_d.pyd (in Debug mode). The extension .pyd was chosen to avoid confusion with a system library spam.dll to which your module could be a Python interface.

因此.pyd文件只是一个被重命名的DLL,以避免混淆。

然而,在linux上,从经验来看,您似乎需要为python DLL使用.so扩展。这只是一个标准的unix共享库。我无法提供python在linux上不更改文件扩展名的来源或原因,但是我可以向您展示如何演示它。在shell中,运行以下命令:

python -vv
>>> import fakemodule

您会注意到输出显示:

trying /usr/lib/python2.5/site-packages/fakemodule.so

假设您的Python扩展foo打算用作模块,可以通过import foo访问,那么您不需要知道哪个操作系统上的文件扩展名应该是什么。你只要用distutils。在Windows上会得到一个.pyd,在Linux上会得到一个.so。请阅读这个documentation

Update响应@gecko“”的注释“import foo同时处理两种扩展类型:dll和pyd。这里的分机不重要…“”以下内容:

对于我(Python 2.7.1,Windows 7),python -vv只显示正在搜索的pyd、py、pyw和pyc扩展(按顺序)。如果我在C:\python27\lib\site-packages中有foo.pyd,那么import foo可以工作。如果我将该文件重命名为foo.dllimport foo将失败。

pyd文件只是为python导入做好准备的dll文件。

为了区别于普通的dll,我建议在windows中使用.pyd而不是.dll。

这是关于这个问题的官方文件:

http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

相关问题 更多 >