Ответ 1
Изменить: обновлено для более новых версий колес, как было предложено 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 отображается в виде данных пакета, так что она будет включена в колесо.
- A используется пользовательский distclass, который указывает, что это колесо имеет модуль расширения, и поскольку колесо строится на Windows, это колесо win32.
Код ctypes Python может загружать DLL относительно себя (этот код находится в __init.py__
):
lib_path = os.path.join(os.path.dirname(__file__), 'libeay32.dll')
lib = CDLL(lib_path)
После установки "колеса" с пипсом я могу запустить python setup.py bdist_wheel
для создания dist\md5-1.0-cp34-none-win32.whl. Я использую cpython 3.4, но если вы хотите универсальное колесо, вы можете добавить setup.cfg как этот.
Теперь я могу создать и активировать новую виртуальную среду, установить install md5-1.0-cp34-none-win32.whl и использовать мой пакет:
>>> import md5
>>> md5.digest('hello')
'8d11aa0625ce42cfe9429d5e93b5ab0a'