创建空环境时conda的奇怪行为

时间:2017-08-24 12:56:07

标签: anaconda conda

我创建了一个conda环境,但没有使用以下命令指定任何包:

conda create --name test_env

然后,我可以使用test_env中的根环境中的所有包(但它们不会出现在conda list和conda env export的输出中)。这对我来说已经出乎意料了,但是当我在那个环境中安装一些东西时,真正的问题开始了,例如:

conda install pywavelets

之后,pywavelet可用,但所有其他不依赖于pywavelet的包在环境中消失(例如pandas)。我不明白为什么会这样。有人对此有解释吗?

更重要的是,这对于使用conda环境的最佳实践意味着什么?我应该总是创建我的环境至少指定python(conda create --name test_env python)吗?但是,我必须在那个非常麻烦的环境中手动安装所有东西。所以,我现在的想法是为我创建的所有环境指定anaconda:

conda create --name test_env anaconda

然而,缺点是conda list和conda env export列出的依赖项列表不必要地长(例如,甚至列出Anaconda Navigator)。有人有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

在环境创建期间未指定Python版本时,可以使用根环境中的所有软件包的原因是因为您实际上正在使用根环境的Python可执行文件!您可以查看which pythonpython -c "import sys; sys.executable"。另请参阅我的other answer here

安装pywavelets时,其中一个依赖项(可能)是Python,因此在您的环境中安装了一个新的Python可执行文件。因此,当您运行Python时,它只会获取test_env

中安装的软件包

如果您想要来自其他环境的所有软件包,您可以创建一个列出所有软件包的文件,然后使用该文件创建一个新环境,详见Conda文档:https://conda.io/docs/user-guide/tasks/manage-environments.html#building-identical-conda-environments 总结

conda list --explicit > spec-file.txt
conda create --name myenv --file spec-file.txt

或安装到现有环境

conda install --name myenv --file spec-file.txt

由于这只是一个文本文件,您可以编辑和删除任何您不想要的包。