編集: Thomas Dによって提案された新しいバージョンの wheel 用に更新されました。
ここに方法があります。たとえば、これは libeay32.dll を使用して md5 パッケージを公開します。
プロジェクトの構造は次のとおりです。
MD5
│ setup.py
│
└───md5
__init__.py
libeay32.dll
setup.py は次のとおりです。
from setuptools import setup, Distribution
class BinaryDistribution(Distribution):
def has_ext_modules(foo):
return True
setup(
name='md5',
version='1.0',
description='MD5 Library',
packages=['md5'],
package_data={
'md5': ['libeay32.dll'],
},
distclass=BinaryDistribution
)
注意すべき点がいくつかあります。
- DLL は、ホイールに含まれるようにパッケージ データとしてリストされます。
- このホイールに拡張モジュールがあり、ホイールが Windows 上に構築されているため、これが win32 ホイールであることを示すカスタムdistclass が使用されます。
Python ctypes コードは、DLL をそれ自体に関連してロードできます (このコードは にあります__init.py__
)。
lib_path = os.path.join(os.path.dirname(__file__), 'libeay32.dll')
lib = CDLL(lib_path)
pip で「wheel」をインストールした後、python setup.py bdist_wheel
dist\md5-1.0-cp34-none-win32.whl を生成するために実行できます。私はたまたま cpython 3.4 を使用していますが、ユニバーサル ホイールが必要な場合は、このようなsetup.cfg を追加できます。
これで、新しい仮想環境を作成してアクティブ化し、pip install md5-1.0-cp34-none-win32.whl を実行して、パッケージを使用できるようになりました。
>>> import md5
>>> md5.digest('hello')
'8d11aa0625ce42cfe9429d5e93b5ab0a'