私はPython拡張子がCで書かれていて、Windowsでファイル拡張子DLLまたはPYDを使用する必要があるかどうか疑問に思っています。Linuxで何を使用しますか?)
(ファイル名以外に)違いはありますか?
非公式記事 を見つけました。これはpycの秘密ですか?このトピックに関する公式の記事が見つからないのはなぜですか?
pydファイルは、pythonインポートの準備ができているdllファイルです。
それらを通常のdllと区別するために、Windowsでは.dllではなく.pydをお勧めします。
この問題に関する公式ドキュメントは次のとおりです。
http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll
Creating Your Own Projectステップ(「The Cookbook Approach」のステップ7)の Building C and C++ Extensions onウィンドウズ
出力ファイルは、spam.pyd(リリースモードの場合)またはspam_d.pyd(デバッグモードの場合)と呼ばれます。拡張子.pydは、モジュールがPythonインターフェイスである可能性があるシステムライブラリspam.dllとの混乱を避けるために選択されました。
したがって、.pydファイルは単なるDLL混乱を避けるために名前が変更されています。
ただし、Linuxでは、経験から言えば、python dllsの場合は.so拡張子を使用する必要があります。これは単なる標準のUNIX共有ライブラリです。ソースや理由を提供できません。理由pythonはファイル拡張子を変更しませんが、それを示す方法を示すことができます。シェルで次のコマンドを実行します。
python -vv
>>> import fakemodule
出力には次のように表示されます。
/usr/lib/python2.5/site-packages/fakemodule.soを試す
Python拡張子foo
は、import foo
を介してアクセス可能なモジュールとして使用することを目的としているため、ファイル名拡張子が何であるかを知る必要はありません。どのオペレーティングシステム。distutils
を使用するだけです。Windowsでは.pyd、Linuxでは.soなどが表示されます。これをお読みください ドキュメント 。
Update@gecko "" "import fooによるコメントへの応答で、dllとpydの両方の拡張タイプが機能しています。拡張機能はここでは重要ではありません。 。 "" ":
私(Python 2.7.1、Windows 7)の場合、python -vv
は、検索されているpyd、py、pyw、およびpyc拡張のみをこの順序で表示します。 foo.pyd
にC:\python27\lib\site-packages
がある場合、import foo
は機能します。そのファイルの名前をfoo.dll
に変更すると、import foo
が失敗します。
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での多くの簡単な例を示します。