让你的 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 回滚非常有用,因为它实际上给了我运行创建环境的命令。

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
让你的 conda “回滚”到以前版本的环境的更多相关文章
- git命令,回滚上一个版本,回滚n个版本,撤销回滚
1 回滚到上一个版本 git checkout . :add之前的回滚 git reset --hard:add之后,commit之前 git reset --hard origin/test:com ...
- conda回滚
1. 查看历史版本: conda list --revision 2. 安装上次版本: conda install revision 13 13是历史序号.从上面看出,最近的历史序号是14,因此上一个 ...
- Linux svn 回滚版本库
Linux代码 svn up Index/ 然后找出要撤销的确切版本: Linux代码 svn log --limit 10 Index/tpl/css/global.css 根据log怀疑是 ...
- git本地文件回滚操作
今天有几个文件改在了其他分支上.需要回滚. 参考了下面两篇文章: Link Link 简单讲,分多个不同的阶段: 1. 用git status命令看,发现是unstaged,那么就是只在work ...
- git回滚
Git回滚的常用手法 07net01.com 发布于 4小时前 评论 传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求. 如果你是传统VCS,比如SVN或者 ...
- SVN版本回滚~
如果你在svn上对文件进行编辑作了修改,想撤销,那么有两种方法可以还原:1) svn revert <yourfile>2) 手动删除该文件,重新执行svn up(rm <yourf ...
- mysql基于binlog回滚工具_flashback(python版本)
update.delete的条件写错甚至没有写,导致数据操作错误,需要恢复被误操作的行记录.这种情形,其实时有发生,可以选择用备份文件+binlog来恢复到测试环境,然后再做数据修复,但是这样 ...
- git---远程仓库版本回滚
开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...
- git回滚分支版本到指定版本
昨天提交代码时Eclipse凌乱了,本来拉了dev-20190201分支的,结果提交时竟然跑到dev分支了.为了把dev分支回滚,可以有两种方式:Eclipse和命令行. 先说简单的命令行方式,先用g ...
- tortoiseSVN如何回滚(切换至)某个历史版本?
tortoiseSVN如何回滚(切换至)某个历史版本? 1.右键需要回滚的项目,tortoiseSVN - >show log 2.右键需要回滚的历史版本,选择revert to this re ...
随机推荐
- vuex记录状态
// actions import { queryProductDetailsById } from '../service' /* * 异步 */ export const addAndGetPro ...
- window.onload / onscroll/onresize 事件
onload当文档加载完成后执行一些操作 window.onload = function(){ console.log("页面加载完成") } onscroll当页面发生滚动时执 ...
- ACM-NEFU新生训练2-排序和CMP
A.谁考了第k名-排序 Description 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. Input 第一行有两个整数,分别是学生的人数n(1≤ ...
- Java---->枚举类
自定义的枚举类 package doy1; /** * @author shkstart * @create 2021-10-28 19:23 */ /** * 一.枚举类的使用 * 1.枚举类的理解 ...
- 【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析
人工智能的概念 当人们提到"人工智能(AI)"时,很多人会想到机器人和未来世界的科幻场景,但AI的应用远远不止于此.现在,AI已经广泛应用于各种行业和生活领域,为我们带来了无限可能 ...
- MySQL(九)InnoDB数据结构
InnoDB数据结构 1 数据库的存储结构:页 索引信息和数据记录都是保存在文件上的,确切来说是保存在页结构中:另一方面,索引是在存储引擎上实现的,MySQL服务器上的存储引擎负责对表中数据的读取 ...
- 【Spring5】IOC
1 Spring概念 Spring是轻量级的开源JavaEE框架.可以解决企业开发的复杂性. Spring有两个核心部分:IOC和Aop ①IOC控制反转:把创建对象过程交给Spring管理 ②Aop ...
- 如何通过Java应用程序在PPT中创建SmartArt图形
SmartArt其实就是一个文字的可视化工具,用户可在PowerPoint,Word,Excel中使用该特性创建各种图形图表.SmartArt 图形是信息和观点的视觉表示形式.可以通过从多种不同布局中 ...
- 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)
图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...
- 第7章. 部署到GiteePages
Gitee Pages 是一个免费的静态网页托管服务,您可以使用 Gitee Pages 托管博客.项目官网等静态网页.如果您使用过 Github Pages 那么您会很快上手使用 Gitee 的 P ...