pyenv/pyenv-virtualenv/Anacondaを使ってクリーンなPython環境をセットアップ

f:id:karaage:20171225113630p:plain:w480

Python仮想環境に関してはじめに

 ここに書いてある環境構築は2021年時点でも有効で、私のように趣味ベースで使う場合は、特に大きな問題ありませんが、必ずしも全ての人にベストな手法ではありません。

 他にも様々なPythonの環境構築ソフト(pipenv, venv等)がありますし、Anacondaは使わない主義などあります。こだわる人は各自調べて自分に合うものを選択しましょう。

 Docker覚えるコストが許容できるなら、Dockerもオススメです。以下記事参照ください。

 2021/04/17追記:Macに関しては、Apple Silicon Macの関係で、MiniForgeを使う環境構築に移行しました。以下記事参照ください。

 2021/10/04 Linuxでのセットアップに関して新たに記事を書き直しました。以下記事参照ください。

zenn.dev

 これ以降の本記事は、参考情報として残しておきます。最低限のメンテはしてありますが、古い情報となることご了承ください。

Python環境を構築し直したい

 pythonの環境、色々ライブラリ入れたり、python2.x系とpython3.x系の関係もよくわからなくなってごちゃごちゃしてきました。pyenvを使えば環境共存が楽になると聞いてはいたのですが、既にごちゃごちゃなので今更という感じもあってなかなか手をつけれていませんでした。

 しかし、ついに重い腰を上げてpythonの環境を1から構築し直してみました。結果は大満足、今までのごちゃごちゃ環境とは別にクリーンなpython環境を構築することができました。python環境を整理したい人は、やった方がよいと思います。いつ始めても全然OKです!本記事では、Mac/Linux(Ubuntu)を対象に解説いたします。

 今回も宇宙語が続くので、気になる方のみ続きをご覧ください。

Python環境関係のパッケージインストール

 Pythonのインストールは、python2.x系と3.x系の環境共存のためにpyenv、数値計算系のライブラリをまとめてセットアップするためにAnaconda(miniforge)を入れるのが最近のトレンドみたいです。pythonの環境共存には、さらに同じバージョンでの環境共存可能にするためのvirtualenvというものもあるのですが、これには単体のvirtualenvに加えてpyenv-virtualenvというものもありさらにややこしいです。virtualenvとpyenv-virtualenvの違いはpyenvとvirtualenvとpyenv-virtualenvが解りやすいです。

 今回は、pyenv、virtualenv、pyenv-virtualenv、Anacondaを全てインストールして仮想環境構築して切り替えられるようにします。具体的な流れは以下になります。1つ1つ実施していきます。全部がつらければ、python(Anaconda)インストール(pyenv経由)あたりまでやるだけでも十分便利(なはず)です。

  • .bashrc準備
  • pyenvインストール
  • python(Anaconda)インストール(pyenv経由)
  • pyenv-virtualenvインストール
  • condaでpyenv-virtualenvの仮想環境作成
  • virtualenvインストール

.bashrc準備

 事前に.bashrcを準備しておきましょう。Linuxの場合は最初からあるので、何もしなくてOKです。Macに関しては以下記事参照ください。.bashrcの中身はこの時点では空でよいですし、好きな設定を書いておいてもよいです。またbashじゃなくてzshを使う場合(最新のmacOSではzshが標準のシェルです)は.bashrcは不要です。

 MacでHomebrewがインストールされていなければ、インストールしておきましょう。以下コマンドをターミナルにコピペして実行すればOKです。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

 Homebrewに関しては、以下記事参照ください。

pyenvインストール

 pyenvのインストールです。

 Macの場合は以下コマンドでpyenvをインストールできます。

$ brew install pyenv

 Linuxの場合は、以下コマンドでインストールと設定ができます。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc

 シェルがzshの場合は、上記コマンドの~/.bashrc~/.zshrcに置き換えてください。

python(Anaconda)インストール(pyenv経由)

 ここはMac/Linuxで共通です。Anaconda2と3をインストールします。Anacondaというやつは、数値計算系のnumpy等のライブラリがプリインストールされているpythonパッケージで、何かと便利なのでこいつを入れてやります。インストールは結構時間かかります(ネット環境にもよりますが、それぞれ10分くらいかな)。

 まずは、インストールできるpython環境を以下のコマンドで確認します。

$ pyenv install -l

 python2系のanaconda2やpython3系のanaconda3があることがわかりますので、これらをpyenv上にインストールしていきます。バージョン(末尾の数字)に関しては、基本的にはインストール時点で一番新しいものにしておけば問題ないです。

 python2.x系インストール

$ pyenv install anaconda2-4.4.0

 python3.x系インストール

$ pyenv install anaconda3-4.4.0

 インストールした後、環境の切り替えは以下のように実施します。

 python2.x系に切り替え

$ pyenv global anaconda2-4.4.0

 python3.x系に切り替え

$ pyenv global anaconda3-4.4.0

 今どんなpython環境があるか調べるには、以下コマンドで確認できます。

$ pyenv versions

 表示例は以下です。

* system
  anaconda2-4.4.0
  anaconda3-4.4.0

 アスタリスク(*)がついているのが現在自分がいる環境です。pyenv globalで環境を切り替えられます。消したい環境は pyenv uninstallで消去できます。例えばanaconda2-4.4.0が不要になったという場合は、以下コマンドでアンインストールできます。

$ pyenv uninstall anaconda2-4.4.0

pyenv-virtualenvインストール

 pyenvをさらに便利にするためpyenv-virtualenvをインストールします。

 Macの場合は以下コマンドでインストールしましょう。

$ brew install pyenv-virtualenv

 Linuxの場合は、以下コマンドでインストールできます。

$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

 以下コマンド実行して、pyenv-virtualenvをセットアップします。

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ echo export PYENV_VIRTUALENV_DISABLE_PROMPT=1 >> ~/.bashrc
$ source ~/.bashrc

 シェルがzshの場合は、pyenvのときと同様に上記コマンドの~/.bashrc~/.zshrcに置き換えてください。

 インストールや設定は、以下を参照に自分の好みに少しカスタムしています 。

GitHub pyenv-virtualenv

condaで仮想環境作成

 ここがややこしいのですが、pyenvでanacondaを入れた場合は、python-virtualenvのコマンドで仮想環境生成してもうまくいかなくて、anacondaのパッケージ管理のフレームワークであるcondaで仮想環境を生成するのがよいそうです。python-virtualenvともキチンと連携してくれます。ここらへんはあまりドキュメント見つけられなくて、正しいやり方じゃないのかもしれませんが、今のところこれでうまくいっている、というものになります。

 例として、PILとOpenCVライブラリをインストールした画像処理を行うpython環境を構築しましょう。

 まずはpython2.x系に切り替えるため以下実行します。

$ pyenv global anaconda2-4.4.0

 あとは、以下コマンドでtestという仮想環境を構築できます。

$ conda create -n test python

 ちなみに、この場合はanacondaでなく、ライブラリが入っていない真っさらなpythonが入ることに注意しましょう。anacondaを入れたいときは、以下のようにします。

$ conda create -n test anaconda

 ただ、anacondaを入れる場合は、ものすごい時間がかかるので注意しましょう。必要なライブラリが多くないなら、後で必要なライブラリだけpipで入れてやるほうがよいと思います。

 ここから、例として画像処理をするための仮想環境を生成します。以下コマンド実行下さい。image-processingというのが仮想環境名で、PILopencvがその環境にインストールしたいパッケージ名です。

$ conda create -n image-processing anaconda PIL opencv

 以下コマンドで現在の仮想環境を確認します。

$ pyenv versions

 実行すると以下のように表示されて、image-processingという仮想環境が生成されているのがわかります。 

  system
* anaconda2-4.4.0
  anaconda2-4.4.0/envs/image-processing (set by /Users/karaage/.pyenv/version)
  anaconda3-4.4.0

 以下実行するとimage-processingという仮想環境に移行できます。

$ pyenv global anaconda2-4.4.0/envs/image-processing

 $ python実行して import PIL とか import cv2実行してエラーが出なければ無事環境は生成できています。逆に$ pyenv global anaconda-2.4.0 で元の環境に戻って同じことをしたらエラーが出るはずです。つまり仮想環境のみにライブラリがインストールされて、元の環境には汚されてないのがわかります。

 OpenCVやPILを試してみたい方は、以下記事を参考にしてみて下さい。

 あとは、hogehogeというライブラリを入れたい場合は、以下コマンドで探して

$ conda search hogehoge

 みつけたライブラリを以下でインストールしましょう

$ conda install hogehoge

 condaで見つからないライブラリは、 pipでインストールすればOKです。例えばhogehogeというパッケージをインストールしたければ以下のコマンドを実行してください。

$ pip install hogehoge

 python3.x系の場合は。以下コマンドでanaconda3を選択してから、anaconda2と同じ要領で仮想環境を構築していけばOKです。

$ pyenv global anaconda3-4.4.0

virtualenv

 pyenv-virtualenvじゃない方のvirtualenvも入れておきましょう。まずはsystemデフォルトのpython環境に切り替え。

$ pyenv global system

 以下実行すればインストール完了。

$ sudo pip install --upgrade virtualenv

 virtualenvに関してはここまでで完了とします。

Anacondaを使わない場合

 Anacondaを使わないケースです。最近はこちらの方が好みです。

 pyenvもpyenv-virtualenvも入っている環境であれば、以下のように実行してサクッと仮想環境をいくらでも作れます。

$ pyenv install 3.8.2
$ pyenv virtualenv 3.8.2 test
$ pyenv global 3.8.2/envs/test

まとめ

 pythonの環境を構築できました。これで、様々なpython環境を自由自在に構築して切り替えることができるようになりました。pyenvなどを使って、機械学習/DeepLearningの環境を構築したい場合は、以下記事なども参照にしてみて下さい。

参考書籍

 今回pyenvを使ってみようと思ったきっかけの本です。ただ、本の内容多少古いところもあったので、そのままは採用せず、ネットで調べた最新の記事を参照しました。本の内容自体は良いなと思っています。

参考サイト

HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ

Python 環境のインストール

pyenv GitHub

pyenvとvirtualenvとpyenv-virtualenv

Anacondaの使い方 その3(よく使うコマンド一覧) - Python (Windows) 備忘録

Pythonの環境管理ツール良し悪し - Zopfcode

pyenvでPythonをインストールできない - Qiita

関連記事

変更履歴

  • 2021/10/03 pyenvの設定修正
  • 2021/04/17 MiniForgeを使った環境構築に関して追記
  • 2021/02/06 zshのケースを追記
  • 2021/01/24 Anacondaを使わないケースに関して追記
  • 2020/07/29 微修正
  • 2018/05/17 Linuxの場合のbashrcに対する設定不足追記
  • 2017/10/30 機械学習の環境のセットアップに関して追記
  • 2017/09/19 condaの使い方に関して追記
  • 2017/07/27 Linuxに関して追記