Pythonを勉強していると、「仮想環境」という概念にぶち当たります。初心者にとってはなんのことやらわかりません。
そこで、本記事では「仮想環境」について解説したのち、Anacondaで仮想環境を構築する方法について詳しく説明したいと思います。
仮想環境とは
環境というのはプログラミングを動かす空間のようなもので、この空間にさまざまなライブラリをインストールして使えるようにします。
Pythonを勉強するときにまず使うのがAnacondaかと思いますが、Anacondaにはもともとrootというベース環境のみが存在しています。
rootには、はじめからたくさんのライブラリがインストールされています。例えば、numpy, pandas, matplotlib, scipy, scikit-learn… などです。難しいことをしない限りは、デフォルトであるこのrootの環境内でプログラミングをすることになります。
Anacondaでは、rootとは別に新しい環境を作ることができます。この環境を「仮想環境」と言います。まっさらな空間を作り、そこに独自に好きなライブラリを入れていくことができます。
どういう場合に仮想環境を作るのか?
例えば、ディープラーニングのライブラリであるtensorflowを使うときです。まっさらな環境を作り、環境に例えば”tensorflow”という名前をつけて、そこにtensorflowをはじめとしたライブラリをインストールします。
tensorflow専用の仮想環境ということです。
なぜrootでやらないのか?それは、tensorflowが正常に動くためのpythonのバージョンが限定されていたりするからです。例えば、python3.5だったら大丈夫だけど、python3.6だと動かないといった具合です。
ゆくゆくはpython3.6にも対応するようになるはずです。ただし、各種ライブラリがどんどんバージョンアップする中でこういったトラブルは日常的に起こります。
よって、そのようなトラブルを回避するために、バージョン限定で動くようなライブラリを使う際は、新しい仮想環境を作り、そこにはpython3.6ではなくpython3.5を入れて独自の環境を整えるようなことをします。rootの方は、基本的には最新に近いライブラリを扱うことになると思います。
化学構造を取り扱うRDKitというライブラリも同じです。pillowというライブラリを使うのですが、rootに入っている最新バージョンではRDKitでエラーが出るため、あえて仮想環境を作って、古いバージョンのpillowを入れます。
Anacondaの環境一覧を見る
さて、ここではAnacondaの環境一覧を見る方法を説明します。Windowsの方はコマンドプロンプトまたはアナコンダプロンプト、Macの方はターミナルを起動します。
起動したら、次のようなコマンドを入れます。
conda info -e
# conda environments:
#
base * /Users/user/anaconda3
chainer /Users/user/anaconda3/envs/chainer
rdkit /Users/user/anaconda3/envs/rdkit
tensorflow /Users/user/anaconda3/envs/tensorflow
「-e」というのはenvironment(環境)の頭文字です。「-e」を「–envs」にしてもオッケーです。「conda info -e」で、Anacondaの環境に関する情報(info)を表示するというコマンドになります。
こちらの例では、root環境(ここではbaseと表記されている)のほか、それぞれchainer, rdkit, tensorflowという名前の仮想環境が存在していることがわかります。
アスタリスク(*)がついている環境が、今いる環境になります。
仮想環境を作っていない人の場合は、root環境のみが表示されることになります。
仮想環境を作る
仮想環境の作成もコマンド入力で実施することができます。例えば、asobi(遊び)という名前の仮想環境を作るときはこのように打ちます。
conda create -n asobi
「-n」というのはname(名前)の頭文字です。「-n」を「–name」にしてもオッケーです。「conda create -n 〇〇」で、〇〇という名前の仮想環境を新たに作るというコマンドになります。
ただし、これだと本当にまっさらな環境が作られるため、通常は環境作成と同時にpythonもインストールします。ですので、上記ではなく次のようにコマンド文を入れるのが一般的です。pythonは最新のバージョンとなります。
conda create -n asobi python
最新のバージョンが嫌なら、次のようにバージョンを指定することも可能です。
conda create -n asobi python=3.5
仮想環境を作る途中でProceed ([y]/n)? と聞かれるので、y(つまりyes)と入力して進めます。
仮想環境の作成が完了したら、「conda info -e」でちゃんと作れているかどうかを確認します。
余談ですが、もしもroot環境に入っているような、デフォルトのライブラリ群を全部入れたい場合は次のようにコマンドを打てば良いです。
conda create -n asobi python Anaconda
仮想環境にライブラリをインストールする
次は、新しい仮想環境にライブラリを入れていきます。まずは新しい仮想環境を起動します。ここはWindowsとMacで少し違います。Windowsならこうです。
activate asobi
Macの場合はこのように打ちます。
conda activate asobi
仮想環境を起動したら、入れたいライブラリをインストールします。インストールするときのコマンドの打ち方は、ライブラリごとに推奨のものがありますのでそちらを参考にしてください。
よく使われるのは、condaを使ったものとpipを使ったものです。
例えば、scikit-learnだとこちらに書いてある通り、condaを使ったインストールが推奨されています。
conda install scikit-learn
ベイズ推定や統計モデリングができるPystanだとこちらに書いてある通り、pipを使ったインストールが推奨されています。
pip install pystan
不要なライブラリをアンインストールする
不要なライブラリをアンインストールする場合は、これもライブラリによりますが、condaかpipでこのように行います。
conda uninstall scikit-learn
pip uninstall pystan
余談:推奨がライブラリによってpip、condaに分かれている理由
余談ですが、Pystanがなぜpipを推奨しているかというと、condaのデフォルトの場所にPystanのパッケージが置いていないからです。ここにないものはconda install 〇〇というコマンドでインストールすることができません。
pipというのは、PyPI(Python Package Index)という場所に置いてあるパッケージをインストールするためのコマンドです。つまり、PystanはPyPIには置いてあるということです。
実は、condaのデフォルトの場所ではなく、conda-forgeという置き場所にはPystanのパッケージが存在します。conda-forgeであれば、condaのコマンドを使うことができます。したがって、このようにコマンドを打つことでもPystanをインストールすることができます。
conda install -c conda-forge pystan
今までと違うのは、「-c」と「conda-forge」が入っている点です。「-c」とはchannel(チャネル)の意味で、インストール先を示すことばです、「-c conda-forge」とすることで、conda-forgeからインストールしてね、という命令を出すことができます。
「-c」は「–channel」としてもよいです。
ちなみに、ライブラリのパッケージが置いてある場所を「リポジトリ」といいます。データの貯蔵庫、のような意味合いです。
それから、Anacondaを使っている場合は、推奨などが無い限りはできるだけcondaを使った方が良いようです。詳しくはわかりませんが、pipで入れたもの、condaで入れたものがごちゃごちゃになると環境が壊れたりするようです。
仮想環境に入っているライブラリ一覧を見る
ちゃんとインストールできたか確認するには、次のようなコマンドを打ってライブラリ一覧を表示します。
conda list
pip listでもライブラリ一覧が見れますが、conda listにあったものがなかったりしますし、conda listとの使い分けが今ひとつわからないので、conda listのみでよいと思います。
仮想環境から出る
仮想環境を終了させる場合は、次のようにコマンドを入力します。
conda deactivate
仮想環境を削除する場合
仮想環境を削除する場合は、次のコマンドを入力すればよいです。
conda remove -n asobi --all
最後に・・・コマンドの実行を停止したい場合
コマンドを実行したはいいが、なかなか終わらなかったり固まったりすることがあります。強制的に実行を停止したい場合は、Windowsだとctrl+c、Macだとcommand+cを押してください。ここでいうcとはcancelの意味です。
まとめ
仮想環境の意味合いから、仮想環境の作成、ライブラリのインストール、仮想環境の削除までを説明しました。