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

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

$ conda list --revisions2018-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 “回滚”到以前版本的环境相关推荐

  1. 拒绝conda, 用virtualenv构建多版本的python开发环境

    本文章转载自公众号 "生信码农笔记(ID:bio-coder)",已获得原作者授权. 1. 不喜欢用 conda 特别不喜欢 bioconda, miniconda, Anacon ...

  2. git---远程仓库版本回滚

    开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...

  3. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)

    作者 | 长门 **导读:**本篇是<SpringCloud 应用在 Kubernetes 上的最佳实践>系列文章的第七篇,主要介绍了新功能上线时,如何尽快减少对线上用户的影响?发布系统需 ...

  4. 回滚master代码_Git之master主干代码回滚

    本节概览:通过git revert来实现线主干代码的回滚.如下命令 对于 merge类型的commit对象,还需要"-m"参数 git revert -m 1  commit-id ...

  5. 当SRS遇到K8s:如何实现高可用、回滚与灰度发布?

    Photo by Luis Quintero from Pexels 本文来自流媒体直播集群SRS的官方wiki(https://github.com/ossrs/srs/wiki/v4_CN_K8s ...

  6. git小技巧之分支、关联远程仓库、回滚、解决.gitignore不生效等

    1.分支管理 新建并切换分支:git checkout -b <name>新建本地分支并关联到远程分支git checkout -b myRelease origin/Release合并某 ...

  7. git 代码回滚_git代码版本管理(1)——git版本回滚

    git代码版本管理(1)--git版本回滚 1.问题背景 在利用github.gitlab.Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提 ...

  8. Git使用学习(七、版本回滚)

    git版本回滚的原理 git中有一个全局变量叫HEAD,HEAD这个指针指向的版本就是当前版本. 如果我们需要调出某个版本的记录,需要让HEAD指针指向这个版本,然后再从本地仓库拉取到工作区间就可以了 ...

  9. tomcat自动化部署(拉取\备份、部署、更新、回滚)

    一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打一个压缩包,rz上去:解压 2.缺点 ...

最新文章

  1. Centos7 cdh5.14 安装
  2. 深入理解Redis主键失效原理及实现机制
  3. Zabbix监控Nginx性能状态
  4. linux下gcc编译conio.h问题
  5. Python入门100题 | 第051题
  6. 把字符串每隔四个字符使用“-”中横线分隔的方法
  7. GO关于gin工程关联GOPATH的说明
  8. python折线图样式_Python金融应用之图表制作(二)
  9. css中的媒体查询_CSS中的媒体查询
  10. [转载] Python基础之类型转换与算术运算符
  11. kafka 怎么样连接图形化界面_从零开始搭建Kafka+SpringBoot分布式消息系统
  12. 最大数max(x,y,z)(信息学奥赛一本通-T1152)
  13. 大众点评Cat源码分析(四)——Report读写逻辑
  14. 技嘉服务器主板装系统,技嘉主板bios设置图解教程
  15. 2020-01-02 bibtex生成的参考文献如何转为thebibliography
  16. 用计算机弹小白船,光遇小白船怎么弹 小白船琴谱
  17. java开发周报_Java周报
  18. 在eclipse上配置tomcat,安装eclipse的JST Server Adapters Extensions时报错 Anerroroccurredwhilecollectingitems...
  19. All Palindrome
  20. 图形处理(四)——正交变换

热门文章

  1. 一次深夜优化,MySQL亿级数据分页的奇妙经历
  2. 线上发生死锁异常了,该怎么办
  3. 版本迭代规划的几大关键步骤
  4. 职场中如何与别人高效沟通?
  5. ubuntu g++编译32位应用
  6. 负载均衡算法-轮询均衡
  7. 嵌入式开发板加载U盘,U盘测试
  8. 字符间距加宽5磅怎么设置_11层以下住宅小区——消防车道设置及答疑
  9. Java总复习(二)
  10. 深度学习入门 基于Python的理论与实现