【问题标题】:Can pip list its binary wheels?pip 可以列出它的二进制轮子吗?
【发布时间】:2017-10-16 21:48:39
【问题描述】:

我正在尝试解决两个 python 安装之间的行为差​​异,这两个安装通常是确定性的,并且安装了相同的 python pip 包。

我怀疑不同的 .so 文件。是否有为什么要查看 pip 安装了哪些二进制文件以及安装了哪些架构?

更新——

% pip show Name: scipy Version: 1.0.0rc1 Summary: SciPy: Scientific Library for Python Home-page: https://www.scipy.org Author: SciPy Developers Author-email: scipy-dev@python.org License: BSD Location: /usr/local/lib/python2.7/dist-packages Requires: numpy

上面的包依赖于必须编译的 libopenblas 之类的东西。我不确定 pip 是否使用了系统安装,或者在 pip 安装期间编译了 BLAS,或者用作 i386 或 i686 的 BLAS 的预编译版本——谁知道呢。

上述情况我有:

/usr/local/lib/python2.7/dist-packages/scipy/.libs/libopenblasp-r0-39a31c03.2.18.so

我想看看哪个包在不同系统中安装的.sos有差异。

【问题讨论】:

  • 使用 python 代码:使用“pip list”命令(捕捉它的输出),然后将每个 package_name 放在“pip show”命令和“for”中,以显示它们的信息。
  • pip listpip show <package_name> 是快速检查@DRPK 提及的最简单方法,但是如果您正在深入研究单个文件,您可以通过打开查看每个 python 实例的站点包安装位置启动 python IDLE 或从 CLI 然后 import site site.getsitepackages() 然后将返回类似 ['/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages', '/usr/lib/site-python'] 的内容,您可以在其中验证文件是否相同,以防万一发生了奇怪的事情而不是另一个

标签: python pip


【解决方案1】:

信息在那里,但您必须在dist-info 和/或egg-info 子目录中搜索才能找到它。

  • 二进制发行版在其元数据子目录中包含一个RECORD 文件。
  • 源分发在其元数据子目录中包含一个installed-files.txt 文件。

RECORD 文件是 PEP-376 中记录的(路径、哈希、大小)的 csv 行。鸡蛋中较旧的installed-files.txt 只是文件名,您必须手动统计这些文件。

举个简单的例子,我的包copyingmock 的源代码和二进制分发版在PyPI 上可用。安装二进制发行版 (pip install copyingmock):

$ pip show --files copyingmock
Name: copyingmock
Version: 0.1
Summary: A subclass of MagicMock that copies the arguments
Home-page: https://github.com/wimglenn/copyingmock
Author: Wim Glenn
Author-email: hey@wimglenn.com
License: MIT
Location: /tmp/blah/venv/lib/python3.6/site-packages
Requires: 
Files:
  __pycache__/copyingmock.cpython-36.pyc
  copyingmock-0.1.dist-info/DESCRIPTION.rst
  copyingmock-0.1.dist-info/INSTALLER
  copyingmock-0.1.dist-info/LICENSE.txt
  copyingmock-0.1.dist-info/METADATA
  copyingmock-0.1.dist-info/RECORD
  copyingmock-0.1.dist-info/WHEEL
  copyingmock-0.1.dist-info/metadata.json
  copyingmock-0.1.dist-info/top_level.txt
  copyingmock.py
$ cat venv/lib/python3.6/site-packages/copyingmock-0.1.dist-info/RECORD 
copyingmock.py,sha256=DoLAuaS7KqGT87BIlD93G1M7q9bNWgHYu1m1TZP1D1g,345
copyingmock-0.1.dist-info/DESCRIPTION.rst,sha256=L_0CS_8XNYgAVfq3tj3GZEYg_9vML9nDP-FUU37GIbs,1541
copyingmock-0.1.dist-info/LICENSE.txt,sha256=sDdX5cBRRpk3rmZ8hbYEfAUIYRdDqrlXmChOUkqf62o,1066
copyingmock-0.1.dist-info/METADATA,sha256=bKJ5RXwvj0rGrg22p4K91WiJoLM5MqLHYqlpWYWUhPU,2031
copyingmock-0.1.dist-info/RECORD,,
copyingmock-0.1.dist-info/WHEEL,sha256=5wvfB7GvgZAbKBSE9uX9Zbi6LCL-_KgezgHblXhCRnM,113
copyingmock-0.1.dist-info/metadata.json,sha256=SLtuqq4tUGr0A2h4hQnZEdPIm_4MrvcunLzP-_1I7Qc,677
copyingmock-0.1.dist-info/top_level.txt,sha256=X3FsY_0npOxR5rKvOJ-b2rdiNfSiIivwVKN4JgY7cac,12
copyingmock-0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
__pycache__/copyingmock.cpython-36.pyc,,

然后强制使用源分发重新安装(pip uninstall copyingmock 然后pip install --no-binary=copyingmock copyingmock):

$ pip show --files copyingmock
Name: copyingmock
Version: 0.1
Summary: A subclass of MagicMock that copies the arguments
Home-page: https://github.com/wimglenn/copyingmock
Author: Wim Glenn
Author-email: hey@wimglenn.com
License: MIT
Location: /tmp/blah/venv/lib/python3.6/site-packages
Requires: 
Files:
  __pycache__/copyingmock.cpython-36.pyc
  copyingmock-0.1-py3.6.egg-info/PKG-INFO
  copyingmock-0.1-py3.6.egg-info/SOURCES.txt
  copyingmock-0.1-py3.6.egg-info/dependency_links.txt
  copyingmock-0.1-py3.6.egg-info/top_level.txt
  copyingmock.py
$ cat venv/lib/python3.6/site-packages/copyingmock-0.1-py3.6.egg-info/installed-files.txt 
../copyingmock.py
../__pycache__/copyingmock.cpython-36.pyc
dependency_links.txt
PKG-INFO
top_level.txt
SOURCES.txt

【讨论】:

  • 谢谢。 pip show --files scipy | grep -e \\.so 让我找到单个包的 .sos,尽管它的信息有点短,例如它是为哪个架构编译的,等等......这可能会显示出差异。我可以尝试对 .so 文件进行校验和,但我怀疑在哪里编译时使用调试信息渲染这个无用。
猜你喜欢
  • 2015-06-01
  • 2015-09-16
  • 2018-11-14
  • 2019-08-19
  • 2013-10-15
  • 1970-01-01
  • 2011-02-18
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多