我使用的是conda版本4.5.11,python 3.6.6和Windows 10 .
我使用conda创建一个虚拟环境
conda create --name venv
当我检查已安装的软件包时
conda list
它(如预期的那样)是空的 .
但
pip list
很长
问题1:为什么? - 当我使用创建虚拟环境时
python -m venv venv
点子列表是空的 .
当我不在激活的虚拟环境中时,那么
conda list
也很长,但它与点子列表不同(*见下面的跟进)一般来说,点子列表是conda列表的一个子集 . 至少有一个例外(点子列表中的'表',而不是conda列表中),但我没有过分分析 . conda列表更改/显示一些(所有?)连字符到下划线(或pip反向) . 还有一些版本不同的实例 .
问题2:为什么? (并跟进问题 - 它们可以吗?我应该关心吗?)
我希望有一个基线conda'环境'(可能不是正确的词)-ie,我已经安装/更新到Ananconda / conda的软件包,然后所有虚拟环境都将从中拉出来 . 如果我需要安装新的东西,它将首先安装到基线中 . 只有当我需要使用基线中不同版本的软件包创建应用程序时(我在可预见的未来才会想到),我需要以不同方式更新虚拟环境 .
问题3:我是否过度思考这个?我正在寻找一致性并希望了解 .
- 谢谢 . 克雷格
跟进#1:在我的空conda venv中安装了一些软件包之后,conda list和pip list的结果仍然不同,但是pip列表比它更短,但它是conda列表的一个子集(它不是包括我不使用的两个包,所以我不在乎)
跟进#2:在空的环境中,我运行了一些代码
python my-app.py
它只是轻微地感到惊讶,它运行没有错误 . 正如所料,当我安装一个软件包(pytest)时,由于缺少依赖项而无法运行 . 所以......空虚不是空的 .
1 回答
1. conda list vs pip list
如果您所做的只是创建环境(
conda create -n venv
),那么就不会安装任何内容,包括pip
. 你的操作系统仍然会尝试解决你的PATH上的pip
,因此很可能在Anaconda / miniconda安装中找到了基础pip
.2. pip list is subset of conda list outside env
这可能仅仅是
conda
安装除了Python软件包以外的其他东西,pip
并不是100,但是对我而言,conda
,这是一个更通用的软件包管理器,可以识别更多的软件包,这一点也不奇怪 .3. Overthinking
我认为这更像是一个工作流风格的问题,而且通常超出了SO的范围,因为它会得到自以为是的答案 . 尝试搜索最佳实践建议并选择适合您目标的样式 .
就个人而言,我永远不会尝试将所有内容安装到我的base / root conda env中,因为安装的越多,您在不同方向上的依赖性要求就越多 . 最后,conda将集中所有包(
anaconda/pkgs
或miniconda3/pkgs
),因此我专注于制作用于特定目的的模块化env .