【Python】Anacondaで動かかなくなったときの対処方法
# anaconda # python
Anaconda便利ですよね。機械学習系の作業をする際など、ライブラリ等の依存関係が何かと面倒なことはままありますが、Anacondaを利用すればそのような依存関係を一気に解決してくれる場合があります。 というか大体の場合にうまく言ってくれます。
しかし、便利なAnacondaですが、あるライブラリを入れたら全く動かなくなったみたいなことはよくあるのです…。
そんな時の対処方法を簡単にまとめて見ようと思います。
どうにかしてもとに戻す
ライブラリの変更をなかったことにする
変更履歴を確認する
conda list -r [—revisions]コマンドで、conda環境の変更の履歴を確認することが出来ます。 なお、pipによるインストールの履歴はこの履歴に入ってこないので注意が必要です。
conda list -r [--revisions]
# 2018-04-29 21:47:35 (rev 0)
# +_ipyw_jlab_nb_ext_conf-0.1.0
# +alabaster-0.7.10
# +anaconda-5.0.1
# +anaconda-client-1.6.5
# +anaconda-navigator-1.6.9
~~~
# 2018-04-29 21:48:29 (rev 1)
# anaconda {5.0.1 -> custom}
# conda {4.3.30 -> 4.5.1 (conda-forge)}
# conda-env {2.6.0 -> 2.6.0 (conda-forge)}
~~~
復元する
「conda install —revision 上記で確認したリビジョン番号」 例)conda install —revision 2
で指定のバージョンに戻すことが出来ます。
素直に最初からインストールし直す
pipによるインストールを併用していたり、その他手動でパッケージをいじっているなど何かしらの理由で conda install —revision を使用しても復元が出来ない場合があります。 (condaに対応していない機械学習ライブラリとか入れてると結構あります。辛い…。)
このような場合はこのページなどを参考にして1からやり直したほうが多分早いです…。 https://qiita.com/nemui_/items/210d297493ff176d31fe
そもそも壊れにくくする方法
pipとの併用をやめる
condaを使用する場合は、出来るだけpipと併用はしないようにしましょう。 (pipではインストール可能、condaではインストール不可というライブラリがあるので完全には出来ないですが…)
以下、condaの公式ページからの引用です。
Issues may arise when using pip and conda together. When combining conda and pip, it is best to use an isolated conda environment. Only after conda has been used to install as many packages as possible should pip be used to install any remaining software. If modifications are needed to the environment, it is best to create a new environment rather than running conda after pip. When appropriate, conda and pip requirements should be stored in text files.
要するに、出来るだけconda使ってね!どうしてもcondaで入れられないものだけはpipで入れてもいいよ。でも再現性保つために、ちゃんとテキストファイルで環境管理してね、って公式で言われます。 つまり上記のリビジョンの管理は当てにするなと言うことですね…。
上記のようなrevisionでの復元が出来なくなったりライブラリの依存関係がcondaとpipで食い違っていたりなど、何かと面倒なことが普通に起こりえます。
pipと併用するならDockerを使う
いっそDockerを使いましょう。Dockerを使えば、ライブラリの依存関係がどれだけぶっ壊れてもDockerFileさえ作っていれば(作っていなくてもImageさえあれば)変更前の環境を簡単に再現することが可能です。
日進月歩の世界にいる限り、ライブラリの更新も頻繁に行うべきですがどうしても不具合はつきものです。 もちろん学習コストはかかりますが、それを補って有り余る程のメリットはあります。
Docker使いましょう。インフラのコード化最高です。