让你的 conda “回滚”到以前版本的环境

我现在使用 Anaconda 作为我的主要 Python 发行版,同样,我们公司也将它用于所有开发人员机器以及他们的服务器。然而,前几天我在浏览一些论坛技术文章时遇到了一个我以前从未知道的 conda 精彩功能——conda 版本回滚!在这里给大家分享一下。

举一个最简单的例子。如果我们运行 conda list --revisions ,我们会得到这样的输出:

$ conda list --revisions
2018-04-03 09:26:14  (rev 0)
    +_ipyw_jlab_nb_ext_conf-0.1.0
    +alabaster-0.7.10
    +anaconda-5.1.0
    +anaconda-client-1.6.9
     ...
2018-04-03 09:30:48  (rev 1)
     anaconda  {5.1.0 -> custom}
     ca-certificates  {2017.08.26 -> 2018.03.07}
     cairo  {1.14.12 -> 1.12.18}
     fontconfig  {2.12.4 -> 2.11.1}
     freetype  {2.8 -> 2.5.5}
     harfbuzz  {1.7.4 -> 0.9.39}
     icu  {58.2 -> 54.1}
     ...

...

2019-02-14 11:48:21  (rev 36)
     _r-mutex  {1.0.0 -> 1.0.0}
     blas  {1.1 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge) -> 1.0 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main)}
     cairo  {1.14.12 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main) -> 1.14.12 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main)}
     conda  {4.5.11 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge) -> 4.6.3 (https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge)}
     ...

在上面的输出中,我们可以看到我的 conda 环境的许多特定版本(或修订版),以及它们的创建日期/时间以及差异(已安装的软件包显示为 + ,已卸载的显示为 -  和升级的显示为 -> )。 如果要恢复到以前的版本,只需运行 conda install --revision N (其中N是修订号)即可。 这将要求你确认相关的软件包卸载/安装,并让您回到原来的位置!

所以,我认为这非常棒!如果你搞砸了,想要回到以前的工作环境,真的很方便。

首先,如果你“恢复”到之前的修订版,那么你会发现创建了一个“逆”修订版,只是做了与之前修订版相反的版本。例如,如果您的修订列表如下所示:

2019-01-14 21:12:34  (rev 1)
    +mkl-11.3.3
    +numpy-1.11.0
    +pandas-0.18.1
    +python-dateutil-2.5.3
    +pytz-2016.4
    +six-1.10.0

2019-01-14 21:13:08  (rev 2)
    +cycler-0.10.0
    +freetype-2.6.3
    +libpng-1.6.22
    +matplotlib-1.5.1
    +pyparsing-2.1.4

接着,通过运行 conda install --revision 1 恢复到修订版1,然后再次运行 conda list --revisions ,你会得到:

2019-01-14 21:13:08 (rev 2)
    +cycler-0.10.0
    +freetype-2.6.3
    +libpng-1.6.22
    +matplotlib-1.5.1
    +pyparsing-2.1.4

2019-01-14 21:15:45 (rev 3)
    -cycler-0.10.0
    -freetype-2.6.3
    -libpng-1.6.22
    -matplotlib-1.5.1
    -pyparsing-2.1.4

我们可以看到修订版 3 的更改只是修订版 2 的反转。

还有一点是我发现所有这些数据都存储在环境的 conda-meta 目录中的历史文件中(默认环境对应于 CONDA_ROOT/conda-meta ;其他环境对应于 CONDA_ROOT/envs/ENV_NAME/conda-meta)。你不想知道为什么我去搜索这个文件(这是一个长篇故事,涉及我的一些愚蠢),但它有一些非常有用的内容:

$ less /usr/local/software/anaconda3/conda-meta/history
==> 2018-04-10 16:15:45 <==
# cmd: /usr/local/software/anaconda3/bin/conda install netcdf4
+defaults::hdf4-4.2.13-h3ca952b_2
+defaults::libnetcdf-4.4.1.1-h816af47_8
+defaults::netcdf4-1.3.1-py36hfd655bd_2
# update specs: ['netcdf4']
==> 2018-04-11 11:50:02 <==
# cmd: /usr/local/software/anaconda3/bin/conda install r-cairo
+defaults::r-cairo-1.5_9-r342hbf22089_0
# update specs: ['r-cairo']
==> 2018-04-11 13:41:09 <==
# cmd: /usr/local/software/anaconda3/bin/conda remove R
-defaults::r-3.4.2-h65d9972_0
# remove specs: ['r']
......

具体来说,它不仅仅提供已安装,卸载或升级的列表,它还为您提供了运行的命令! 如果需要,可以使用一些命令行魔法来提取这些命令:

# 获取历史文件的内容,搜索以#cm开头的所有行,然后按空格分割行并从第3组开始提取所有内容
$ cat /usr/local/software/anaconda3/conda-meta/history | grep '# cmd' | cut -d" " -f3-

/usr/local/software/anaconda3/bin/conda update -n base conda
/usr/local/software/anaconda3/bin/conda install -c bioconda r-plotrix --only-deps
/usr/local/software/anaconda3/bin/conda install r=3.4.2
/usr/local/software/anaconda3/bin/conda install gcc_linux-64
/usr/local/software/anaconda3/bin/conda install -c conda-forge ggplot --no-deps
/usr/local/software/anaconda3/bin/conda install -c r r-essentials
/usr/local/software/anaconda3/bin/conda install netcdf4
/usr/local/software/anaconda3/bin/conda install r-cairo
/usr/local/software/anaconda3/bin/conda remove R
/usr/local/software/anaconda3/bin/conda remove -c r r-essentials
/usr/local/software/anaconda3/bin/conda install altair --channel conda-forge
/usr/local/software/anaconda3/bin/conda install r-essentials
/usr/local/software/anaconda3/bin/conda install -c r r-essentials
......

最后,我发现 environment.yml 文件有时会有点痛苦(它们并不总是跨平台兼容 - 请参阅 anaconda-issues: 546), 所以通过 conda install --revision N  实现 conda 回滚非常有用,因为它实际上给了我运行创建环境的命令。

bbfa4e6d-ae88-4bd1-afda-1bd3e72e6f6e.gif



本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

<think>好的,我需要帮助用户解决如何在conda环境中将Python版本升级到3.8的问题。根据用户提供的引用内容,特别是引用[2]中的信息,用户可能已经有一个现有的conda环境,想在不新建环境的情况下升级Python。首先,我要确认正确的步骤。 首先,用户需要激活目标环境,比如用户的环境名是test。使用命令conda activate test。然后,运行conda install python=3.8来升级Python版本。这个过程可能会更新现有的包,但需要注意兼容性问题。如果出现冲突,可能需要手动解决或者创建新环境。此外,用户应该知道升级后可能需要重新安装某些包,或者导出环境配置作为备份。 还要提醒用户检查升级后的版本是否正确,使用python3 --version。同时,引用[3]和[4]提到conda可以方便地指定Python版本,而venv不行,这也支持使用conda进行升级的可行性。需要确保用户理解在现有环境中升级可能带来的风险,比如依赖不兼容,建议备份环境配置,使用conda env export > environment.yml,如引用[2]所述。 最后,生成相关问题时要覆盖常见疑问,比如是否会影响现有包,如何回滚,以及替代方案等。</think>### 在conda环境中将Python版本升级至3.8的步骤 1. **激活目标conda环境** 首先需要进入需要升级Python版本环境。假设环境名为`test`,执行以下命令: ```bash conda activate test ``` 2. **执行Python版本升级指令** 在已激活的环境中,运行以下命令将Python版本升级到3.8: ```bash conda install python=3.8 ``` 此命令会检查依赖关系并自动更新Python和相关包。如果存在版本冲突,可能需要手动调整或接受解决方案[^2]。 3. **验证升级结果** 升级完成后,检查Python版本以确认操作成功: ```bash python3 --version ``` 输出应为`Python 3.8.x`。 4. **备份环境配置(可选)** 建议在升级前导出当前环境的包列表,以便回滚: ```bash conda env export > environment.yml ``` 若升级后出现兼容性问题,可通过此文件重建原环境[^2]。 --- ### 注意事项 - **依赖兼容性**:某些已安装的包可能与Python 3.8不兼容,需通过`conda update --all`更新所有包或手动解决冲突。 - **空间与效率**:如果升级过程中依赖冲突较多,直接新建环境(如`conda create -n new_env python=3.8`)可能更高效[^4]。 - **虚拟环境管理**:conda相比Python自带的`venv`支持更灵活的Python版本指定[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值