【问题标题】:Where does pip and conda keep the list of installed packages so that they know who installed what?pip 和 conda 在哪里保存已安装软件包的列表,以便他们知道谁安装了什么?
【发布时间】:2020-10-26 00:43:53
【问题描述】:

我在conda 环境中做了一些pip install,似乎condapip 都遵循python 约定,将包安装到site-packages 文件夹中。

当我使用pip listconda list 时,它们似乎很好地记录了谁安装了哪些软件包。问题是,这两个安装列表在 Linux 上存储在哪里?

【问题讨论】:

  • 可以关注pip list的源代码。
  • 你用的是什么操作系统?

标签: python pip conda


【解决方案1】:

对于pip listpkg_resources 库用于访问 Python 库的资源文件。

为此,Working Set 访问活动分布。从文档中,一个工作集

表示当前在 sys.path 上处于活动状态的分布。

因此,当调用WorkingSet 的实例时,默认情况下它将搜索位于sys.path 上的模块。

例如,当我运行sys.path

['/opt/conda/lib/python37.zip',
 '/opt/conda/lib/python3.7',
 '/opt/conda/lib/python3.7/lib-dynload',
 '',
 '/opt/conda/lib/python3.7/site-packages',
 '/opt/conda/lib/python3.7/site-packages/IPython/extensions'
]

这些是用于搜索已安装包的路径。下面是一个例子

import pkg_resources

# Define working set
working_set = pkg_resources.working_set

# Package, version and location 
[d for d in working_set]
>>>
[zipp 3.1.0 (/opt/conda/lib/python3.7/site-packages),
 zict 2.0.0 (/opt/conda/lib/python3.7/site-packages),
...,
attrs 19.3.0 (/opt/conda/lib/python3.7/site-packages),
 async-generator 1.10 (/opt/conda/lib/python3.7/site-packages),
 alembic 1.4.2 (/opt/conda/lib/python3.7/site-packages)]

【讨论】:

  • 为了补充这个答案,我发现在上面提到的文件夹中,pip list 查找一个名为 package_name.egg-info 的文件,其中包含一个 Version 字段,或者一个名为的文件夹package_name-x.y.z.dist-info,其中有一个名为 METAFILE 的文件。
  • conda list<CONDA_PREFIX>/conda-meta 文件夹中的每个包搜索合法的.json 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 2019-07-09
  • 2017-10-24
相关资源
最近更新 更多