开发关联C++的Python包,求教TensorFlow/PyTorch共享库分发方式
TensorFlow/PyTorch这类库的共享库分发方式解析
你提到的TensorFlow、PyTorch这类Python库,不会在单个包中嵌入全平台的共享库文件,而是通过以下几种精准的方式分发对应平台的二进制文件:
平台专属预编译Wheel包
PyPI上的官方包都是按「操作系统+架构」拆分发布的独立Wheel包,比如Linux x86_64、Linux ARM64、macOS Intel、macOS Apple Silicon、Windows x64等。用户执行pip install时,pip会自动检测当前系统环境,下载匹配的Wheel包,里面仅包含对应平台的共享库(.so/.dylib/.dll)。共享库隐藏在包的内部目录
预编译Wheel包中的共享库会被放在包的专属子目录里(比如torch/lib、tensorflow/core/lib),不会直接暴露在包根目录。Python的扩展模块(以.so/.pyd/.dll形式存在的原生模块)会通过动态链接机制加载这些库,用户日常调用Python API时感知不到底层共享库的存在。全量打包核心依赖,避免系统库冲突
为了保证跨环境的兼容性,这类库会把所有核心C++依赖(比如BLAS、CUDA相关组件)都打包进Wheel,不会依赖系统已安装的库,避免版本冲突导致的运行错误。
为什么你没找到共享库?
- 你可能查看的是源码包(sdist)而非预编译Wheel包:PyPI上的源码包仅包含源代码,没有预编译的二进制文件,需要用户自行编译。而绝大多数用户安装的是预编译Wheel包。
- 已安装的包默认存放在Python的
site-packages目录下,而非你项目的开发目录。比如Linux系统下路径通常是/usr/local/lib/pythonX.Y/site-packages/torch/lib,Windows在Python安装目录/Lib/site-packages/torch/lib,macOS同理,进入对应路径就能找到对应平台的共享库文件。
内容的提问来源于stack exchange,提问作者Ronan M Kelly
相关产品推荐
相关产品推荐

