29

私はCで書かれたPython拡張機能を持っていますが、Windowsでファイル拡張子DLLまたはPYDを使用する必要があるのでしょうか。(そして私はLinuxで何を使うでしょうか?)

(ファイル名以外に)違いはありますか?

非公式の記事を見つけました。これがpycの秘密ですか?このトピックに関する公式記事が見つからないのはなぜですか?

4

4 に答える 4

28

pydファイルは、Pythonインポートの準備ができている単なるdllファイルです。

それらを通常のdllと区別するために、Windowsでは.dllではなく.pydをお勧めします。

この問題に関する公式ドキュメントは次のとおりです。

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

于 2011-12-12T07:23:03.713 に答える
9

WindowsでCおよびC++拡張機能を構築するための独自のプロジェクトの作成ステップ(「クックブックアプローチ」のステップ7)によると

出力ファイルは、spam.pyd(リリースモードの場合)またはspam_d.pyd(デバッグモードの場合)と呼ばれる必要があります。拡張子.pydは、モジュールがPythonインターフェイスになる可能性のあるシステムライブラリspam.dllとの混同を避けるために選択されました。

したがって、.pydファイルは、混乱を避けるために名前が変更されたDLLにすぎません。

ただし、Linuxでは、経験から言えば、Pythondllには.so拡張子を使用する必要があるようです。これは単なる標準のUNIX共有ライブラリです。Linux上のPythonがファイル拡張子を変更しない理由やソースを提供することはできませんが、それを示す方法を紹介することはできます。シェルで、次を実行します。

python -vv
>>> import fakemodule

出力には次のように表示されます。

/usr/lib/python2.5/site-packages/fakemodule.soを試します

于 2011-12-15T13:29:30.850 に答える
8

Python拡張機能fooがモジュールとして使用されることを意図しており、を介してアクセスできると仮定するimport fooと、ファイル名拡張子がどのオペレーティングシステムにあるべきかを知る必要はありません。を使用するだけdistutilsです。Windowsでは.pydを、Linuxなどでは.soを取得します。このドキュメントをお読みください。

@geccoによるコメントに応じて更新

import fooは、dllとpydの両方の拡張タイプで動作します。ここでは拡張子は関係ありません...:

私の場合(Python 2.7.1、Windows 7)、python -vv検索されているpyd、py、pyw、pyc拡張機能のみが(この順序で)表示されます。私が持っている場合foo.pydC:\python27\lib\site-packagesimport foo動作します。そのファイルの名前をに変更するとfoo.dllimport foo失敗します。

于 2011-11-24T22:46:18.827 に答える
3

Windowsでは*.pydを使用してPythonから直接インポートできますimport fooが、*。dllの場合は次のように使用する必要があります。

from ctypes import cdll
#load dll file , the file in the same .py file location or enter the full path
mylib=cdll.LoadLibrary("foo.dll") 
#call a function from this dll (c-ext) 
ReturnedValue=mylib.FunctionName()

このDLLでエクスポートされる関数を調べたい場合は、このツールを使用してください

更新:これは、distutilsとSWIGを使用して拡張機能を構築する例です。この記事をチェックしてください。WindowsとLinuxでの多くの簡単な例が示されています。

于 2011-12-15T13:14:57.960 に答える