2024-05-29 08:27:25 发布
网友
假设我有一个独立于任何Python机制构建的本机共享库(.dll或.so)和一个使用ctypes与库接口的Python模块。有没有办法把它们做成一个包?如果是,怎么做?
假设这是可能的,我想我需要安装wheel包并使用python setup.py bdist_wheel,但是setup.py需要什么样子?
python setup.py bdist_wheel
我想这样做,以便我可以上传到一个私人包索引的各种平台车轮,并能够pip安装一个适合我的平台上。
编辑:根据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 )
有几点需要注意:
Python ctypes代码可以加载相对于自身的DLL(此代码位于__init.py__):
__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安装md5-1.0-cp34-none-win32.whl,并使用我的软件包:
>>> import md5 >>> md5.digest('hello') '8d11aa0625ce42cfe9429d5e93b5ab0a'
尽管在撰写本文时选择的答案是正确的,this pull request破坏了此功能。
我认为this answer在更新版本的wheel包中正确地解决了这个问题。
(本应将此作为评论添加,但缺乏必要的声誉。)
编辑:根据Thomas D的建议为更新版本的wheel更新。
有个办法。例如,它使用libeay32.dll公开md5包。
项目结构为:
setup.py是:
有几点需要注意:
Python ctypes代码可以加载相对于自身的DLL(此代码位于
__init.py__
):在用pip安装了“wheel”之后,我可以运行
python setup.py bdist_wheel
来生成dist\md5-1.0-cp34-none-win32.whl。我碰巧在使用cpython 3.4,但是如果您想要一个通用的控制盘,可以添加setup.cfglike this one。现在我可以创建并激活一个新的虚拟环境,pip安装md5-1.0-cp34-none-win32.whl,并使用我的软件包:
尽管在撰写本文时选择的答案是正确的,this pull request破坏了此功能。
我认为this answer在更新版本的wheel包中正确地解决了这个问题。
(本应将此作为评论添加,但缺乏必要的声誉。)
相关问题 更多 >
编程相关推荐