Help us understand the problem. What is going on with this article?

Anaconda 環境で、ダウングレードしてしまったパッケージをもとに戻す

はじめに

簡単な方法で元のバージョンに戻すことができます.
だからぜひいいねしてください.
結論だけさっさと知りたい方は,下記の穢土転生の術まで読み飛ばしてください.

悲しい出来事(この記事を書くきっかけになった出来事)

前置き

趣味で作成しているPythonのライブラリがあるのですが,そのライブラリのプロファイリングをしようとしたときの話です.

こちらの記事にも書いてあるとおり,cProfileV という便利なものがあるそうです.
記事内ではpipコマンドでインストールするように書かれていましたが,Anaconda環境なので、Anaconda用に配布されてないかな〜と思ったところ,ありました

インストール

以下,ログの一部です

The following packages will be UPDATED:

  ca-certificates    conda-forge::ca-certificates-2018.11.~ --> pkgs/main::ca-certificates-2019.1.23-0
  pkginfo                                      1.4.2-py37_1 --> 1.5.0.1-py27_0
  setuptools                                  40.6.3-py37_0 --> 40.7.3-py27_0
  tqdm               pkgs/main/linux-64::tqdm-4.28.1-py37h~ --> pkgs/main/noarch::tqdm-4.29.1-py_0

The following packages will be SUPERSEDED by a higher-priority channel:

  certifi            conda-forge::certifi-2018.11.29-py37_~ --> pkgs/main::certifi-2018.11.29-py27_0
  pip                            pkgs/main::pip-18.1-py37_0 --> pkgs/free::pip-7.1.0-py27_0
  requests                pkgs/main::requests-2.21.0-py37_0 --> pkgs/free::requests-2.14.2-py27_0

The following packages will be DOWNGRADED:

  backports                                      1.0-py37_1 --> 1.0-py27_1
  backports.shutil_~                           1.0.0-py37_2 --> 1.0.0-py27_2
  python                                   3.7.1-h0371630_7 --> 2.7.15-h9bab390_6


Proceed ([y]/n)? y

思いっきりyと押してますが、Python2.7 までダウングレードしています
押してから気づきました(妙に時間がかかると思ったわけです...)

コンソールも悲しみですね...

$ python
Python 2.7.15 |Anaconda, Inc.| (default, Dec 14 2018, 19:04:19)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

穢土転生の術

Step1. 過去の環境でのバージョンを確認

下記のコマンドで,過去に自分がどのパッケージどのバージョンを利用していたか,確認できます.

$ conda list --revisions
〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜
2019-02-06 21:40:33  (rev 2)
    +deap-1.2.2 (conda-forge)

2019-02-17 20:52:26  (rev 3)
     backports  {1.0 -> 1.0}
     backports.shutil_get_terminal_size  {1.0.0 -> 1.0.0}
     ca-certificates  {2018.11.29 (conda-forge) -> 2019.1.23}
     certifi  {2018.11.29 (conda-forge) -> 2018.11.29}
     pip  {18.1 -> 7.1.0}
     pkginfo  {1.4.2 -> 1.5.0.1}
     python  {3.7.1 -> 2.7.15}
     requests  {2.21.0 -> 2.14.2}
     setuptools  {40.6.3 -> 40.7.3}
     tqdm  {4.28.1 -> 4.29.1}
〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜

読み方ですが,rev2がさっきまで使ってたやつ,rev3がやっちまったあとのバージョンです.
(Python本体以外にも、悲しいダウングレード攻撃の餌食になっているパッケージがが多々いますね...)

Step2. 蘇らせる

$ conda install --revision [revision number]

これだけです.

今回の場合だと、

$ conda install --revision 2

ですね!

conda-forgeからのインストールが含まれている場合には、

$ conda install --revision 2 -c conda-forge

を代わりに実行しましょう.

生存確認

$ python
Python 3.7.1 (default, Dec 14 2018, 19:28:38)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

自分のような愚か者のために,こんな簡単なコマンド1つで戻せるなんて!
やっぱAnacondaは神.

chankane
目指すはプロのプロジェクトマネージャ(PM).
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away