编辑:根据Thomas D 的建议更新了新版本的轮子。
这是一种方法。例如,这使用 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 被列为包数据,因此它将包含在轮子中。
-
custom distclass is used 表示此轮具有扩展模块,并且由于轮是在 Windows 上构建的,因此这是一个 win32 轮。
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.cfglike this one。
现在我可以创建并激活一个新的虚拟环境,pip install md5-1.0-cp34-none-win32.whl,然后使用我的包:
>>> import md5
>>> md5.digest('hello')
'8d11aa0625ce42cfe9429d5e93b5ab0a'