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

gec*_*cco 25 python pyd python-c-extension

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

有没有差异(除了文件名)?

我发现了一篇非官方的文章.这是pyc的秘密吗?为什么我找不到关于这个主题的官方文章?

zch*_*nah 23

pyd文件只是为python导入准备好的DLL文件.

为了区别于正常的dll,我建议在windows中使用pyd not dll.

有关于此问题的官方文档:

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


obm*_*arg 7

根据Windows上构建C和C++扩展的" 创建自己的项目"步骤("The Cookbook方法"的第7步)

输出文件应称为spam.pyd(在发布模式下)或spam_d.pyd(在调试模式下).选择扩展名.pyd是为了避免与您的模块可能是Python接口的系统库spam.dll混淆.

因此.pyd文件只是一个重命名的DLL,以节省混淆.

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

python -vv
>>> import fakemodule
Run Code Online (Sandbox Code Playgroud)

您会注意到输出显示:

尝试/usr/lib/python2.5/site-packages/fakemodule.so


Joh*_*hin 6

假设您的Python扩展foo旨在用作可通过其访问的模块,import foo您不需要知道在哪个操作系统上应该使用文件扩展名.你刚才用distutils.您将在Windows上获得.pyd,在Linux上获得.so等.阅读本文档.

更新以响应@gecko的评论"""import foo正在同时使用两种扩展类型:dll和pyd.扩展名在这里无关紧要......""":

对我来说(Python 2.7.1,Windows 7),python -vv只显示正在搜索的pyd,py,pyw和pyc扩展(按此顺序).如果我foo.pydC:\python27\lib\site-packages,import foo工作.如果我将该文件重命名为foo.dll,则import foo失败.