我创建了一个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)。有人有更好的解决方案吗?
答案 0 :(得分:2)
在环境创建期间未指定Python版本时,可以使用根环境中的所有软件包的原因是因为您实际上正在使用根环境的Python可执行文件!您可以查看which python
或python -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
由于这只是一个文本文件,您可以编辑和删除任何您不想要的包。