为什么wheel安装将共享对象放在site-packages文件夹而不是package文件夹中?

问题描述

我通过

创建了一个 python 二进制发行版 [wheel]
python setup.py bdist_wheel

轮子如下图

 unzip -l dist/<package-name>-1.0.0-cp36-cp36m-linux_x86_64.whl
Archive:  dist/<package-name>-1.0.0-cp36-cp36m-linux_x86_64.whl
  Length      Date    Time    Name
---------  ---------- -----   ----
  2996432  2021-01-07 21:47   lib<xyz>.so
  7821608  2021-01-07 21:48   lib<abc>.so
  4414000  2021-01-07 21:48   <module>.cpython-36m-x86_64-linux-gnu.so
      581  2021-01-07 20:05   <package-name>/__init__.py
      636  2021-01-07 20:05   <package-name>/version.py

安装轮子后,为什么 *.so 文件会安装在 site-package 文件夹中?

/opt/conda/lib/python3.6/site-packages/

虽然其他文件安装在里面

/opt/conda/lib/python3.6/site-packages/<package-name>

解决方法

Wheel 本质上是一种压缩形式的包分发。因此它可以被解压缩[像一个 zip 文件]。压缩轮内的整个目录结构将按原样复制到 site-packages 文件夹中。这就是为什么

  1. 共享库存储在站点包中,并且
  2. 其余的包文件[例如__init__.py 存储在 site-packages 的 package 子文件夹中]。

wheel 基本上被解压到 site-packages 文件夹中。