【问题标题】:Why does wheel installation put shared objects in site-packages folder instead of package folder?为什么轮子安装将共享对象放在站点包文件夹而不是包文件夹中?
【发布时间】:2021-04-14 19:12:51
【问题描述】:

我有一个通过

创建的 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>

【问题讨论】:

  • 我想知道这个问题的原因。特别是为什么专注于轮子。与任何其他分发格式不一样吗?或者干脆用python setup.py install 举例?
  • 为什么 *.so 文件会安装在 site-package 文件夹中?因为这是您在设置脚本中指定的内容。
  • 在安装脚本中我没有提到任何特定于 *.so 文件的内容。换句话说,为什么 *.so 文件不被打包在库内部而不是外部?
  • 您愿意将lib*.so 文件安装在包中吗?
  • 关于存储与包相关的 .so 文件的位置建议是什么?我在站点包内的​​ torch 目录中看到了 pytorch *.so 文件。所以我假设与包相关的 *.so 文件应该在包内而不是站点包内。有什么推荐的吗?

标签: python-c-api python-packaging python-wheel


【解决方案1】:

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

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

wheel 基本上会在 site-packages 文件夹中解压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多