更新conda后conda环境损坏

时间:2020-03-22 08:23:11

标签: pip anaconda jupyter conda jupyter-lab

广泛使用conda一段时间后,昨天我被要求对其进行更新,现在情况看起来很糟。我必须承认我不是幕后专家,所以请多多包涵:)

在安装conda之后,我使用pip安装了各种软件包。 昨天,我开始从git教程中的一些代码开始工作,该教程建议创建一个临时环境以供使用:

conda env create -f binder/environment.yml

由于我使用的是旧版本,因此建议在此步骤中更新conda。我无法在终端中找到该特定消息(即我之前找不到使用的conda版本),但是当我检查conda的版本时,这就是我现在得到的内容:

(base) francesco ~$ conda list conda
# packages in environment at /Users/francesco/anaconda3:
#
# Name                    Version                   Build  Channel
_anaconda_depends         2019.03                  py36_0  
anaconda                  custom                   py36_1  
anaconda-client           1.7.2                    py36_0  
anaconda-navigator        1.8.7                    py36_0  
anaconda-project          0.8.4                      py_0  
conda                     4.8.3                    py36_0  
conda-build               3.10.5                   py36_0  
conda-env                 2.6.0                h36134e3_0  
conda-package-handling    1.6.0            py36h1de35cc_0  
conda-verify              3.4.2                      py_1  

更新后我注意到的一件事是,为了激活/停用环境,我不得不使用conda activate/deactivate <env>而不是source activate/deactivate <env>

之后,我在新环境中使用代码,没有任何问题。

今天,我试图激活所使用的主要环境,但首先要求我使用以下方法“初始化”我的外壳:

conda init bash

之后,我激活了我的“常规”环境:

conda activate testenv

我尝试启动Jupyter Lab,但出现此错误:

(testenv) francesco ~$ jupyter lab
Error executing Jupyter command 'lab': [Errno 2] No such file or directory

发生了什么事?为什么在我的通常环境下Jupyter Lab无法再工作?

我在testenv中检查了安装,一切正常:

(testenv) francesco ~$ conda list | grep jup
jupyter                   1.0.0                    py37_7  
jupyter_client            5.2.4                    py37_0  
jupyter_console           6.0.0                    py37_0  
jupyter_core              4.4.0                    py37_0  
(testenv) francesco ~$ pip list | grep jup
jupyter                  1.0.0   
jupyter-client           5.2.4   
jupyter-console          6.0.0   
jupyter-core             4.4.0   
(testenv) francesco ~$ 

有人知道发生了什么吗?这对我来说是个大问题,因为conda / jupyter实验室是我使用的主要工具:\

2 个答案:

答案 0 :(得分:1)

通常的做法是仅在单个Conda环境中安装Jupyter(通常是Anaconda用户的 base env),并始终从那里启动Jupyter。要在Jupyter中使用其他Python环境,您需要在这些环境中安装ipykernel,例如,

conda install -n testenv ipykernel

此外,为避免注册其他环境,建议使用Jupyter在环境中安装nb_conda_kernels,例如

conda install -n base nb_conda_kernels

请注意,使用Pip安装东西可能会使环境不稳定。我强烈建议您学习并坚持使用the documented best practices

答案 1 :(得分:1)

@FrancescoLS似乎您安装了较旧版本的Conda(?),因为CHANGELOG表示在Conda {{1}中已弃用source activate,而赞成conda activate }(这在Anaconda的“ How to Get Ready for the Release of conda 4.4”帖子中也有提及)。

这实际上不是任何可行的“答案”,但是似乎您并不孤单地在Conda更新中打破人们的环境。

我认为可以肯定地说,很难在升级过程中保持虚拟环境的完整性,而在跨虚拟环境维护者(Conda)进行重大升级时,这样做就更加困难。这是我亲自尝试使用v4.4.0或通过Poetry在本机Python 3 venv虚拟环境中维护所有项目虚拟环境的原因之一,因为它们是(或至少曾经)比必须通过Conda较慢的求解器来更快地恢复它们),然后仅在需要引入多个外部二进制应用程序时才诉诸于使用Conda。

您是否能够为您的工作创建一个新的Conda环境以有效地恢复它(也许从您自己的pip文件在该环境中恢复)?