首页 > 解决方案 > conda 创建环境中的 conda list vs pip list 差异

问题描述

我正在使用 conda 版本 4.5.11、python 3.6.6 和 Windows 10。

我使用 conda 创建了一个虚拟环境

conda create --name venv

当我检查已安装的软件包时

conda list

它(如预期的那样)是空的。

pip list

很长。

问题一:为什么?- 当我使用创建虚拟环境时

python -m venv venv

点列表为空。

当我不在激活的虚拟环境中时,然后

conda list

也很长,但它与 pip 列表不同(* 请参阅下面的后续内容)通常,pip 列表是 conda 列表的子集。至少有一个例外(点列表中的“表”,而不是 conda 列表中的),但我没有仔细分析。conda 列表将一些(全部?)连字符更改/显示为下划线(或 pip 反过来)。还有一些版本不同的实例。

问题2:为什么?(以及后续问题——可以吗?我应该关心吗?)

我希望有一个基线 conda '环境'(这可能不是正确的词) - 即,我已经安装/更新到 Ananconda/conda 的软件包,然后所有虚拟环境都将从中提取。如果我需要安装新的东西,它会首先安装到基线中。只有当我需要使用来自基线的不同版本的包创建应用程序时(在可预见的将来我不会想到),我才需要以不同的方式更新虚拟环境。

问题3:我想太多了吗?我正在寻找一致性并希望得到理解。

- 谢谢。克雷格

跟进#1:将一些包安装到我的空conda venv后,conda list和pip list的结果仍然不同,但是pip list比以前短了很多,但是是conda list的一个子集(它不是包括两个我不使用的包,所以我不在乎)

跟进#2:在空的环境中,我运行了一些代码

python my-app.py

并且对它没有错误地运行感到有点惊讶。正如预期的那样,当我安装一个包(pytest)时,由于缺少依赖项,它无法运行。所以……空不空。

标签: python-3.xpipconda

解决方案


1.conda list对比pip list

如果您所做的只是创建环境 ( conda create -n venv),那么其中没有安装任何东西,包括pip. 尽管如此,shell 仍然会尝试pip使用 PATH 环境变量来解决问题,并且可能会pip在 Anaconda/Miniconda基础环境中找到它。

2.pip listconda list外部环境的子集

这可能只是conda安装 Python 包以外的东西的问题,它pip没有安装选项。Conda 是一个更通用的包管理器,它引入了运行每个包所需的所有依赖项(例如,共享库)——根据定义,这比 PyPI 提供的范围更广。

3. 想太多

我认为这更像是一个工作流风格的问题,而且通常超出了 StackOverflow 的范围,因为它会得到固执己见的答案。尝试四处搜索最佳实践建议并选择适合您目标的风格。

就个人而言,我永远不会尝试将所有东西都安装到我的基本/Conda 环境中,因为安装的越多,就越有不同方向的依赖需求。最后,无论如何,Conda 将集中所有包(anaconda/pkgsminiconda3/pkgs),因此我专注于制作用于特定目的的模块化环境。


推荐阅读