医療職からデータサイエンティストへ

統計学、機械学習に関する記事をまとめています。

初心者のPython環境構築とバージョン管理~pyenvとpyenv-virtualenvを使って~

Pythonの環境構築を行うには、様々なツールがあり、用途、好み、思想、宗教によってベストなものが異なるようです。

pythonの環境構築戦争にイラストで終止符をどうやら打てない - Qiita

そして、この多様性が私のような環境構築弱者にとってのハードルとなります。今回は、そんなPythonの環境構築の流れをまとめてみました。

なお今回は、以下のツールを用いた環境構築を行いました。また、mac使用しているため、windowsの場合は挙動が異なる可能性があることをご了承ください。

  • Homebrew:Macのパッケージ管理
  • pyenv :pythonインスールとバージョン管理
  • pyenv-virtualenv::仮想環境の構築
  • requirements.txt:Pythonパッケージの管理

環境構築ツールの必要性

Python環境構築をする前に、どのような環境構築をすべきかかは、Pythonをどのように使用するかに依存します。上記にあげた4つのツールの必要性について書いていきますので、もし”そんなの必要ないよ”と思う方は、ツールの一部のみの使用でも問題ないかと思います。また、類似ツールもありますので、他のツールを使いたい方は調べてみてください。

Homebrewとは

Point : Macへのパッケージをインストールを簡易的にしてくれる。

Macユーザー向けのパッケージ管理ツールです。Macにパッケージをインストールする際にHomebrewを使うことで、コマンド1行で済ますことができます。もし使わない場合は、サイトにいき、インストーラーをダウンロードして、インスールするといった作業を行う必要がありますので、特段のこだわりがなければ、使っておいて損はないと思います。

pyenvとは

Point:様々なPythonバージョンを切り替えられる。

Pythonには様々なバージョンがあり、実行する環境によって出力結果が変わってしまいます。例えばPython3.7.0では使えなかったコードの記法がPython3.8.0では使えたり、逆もまた然りなど、バージョンを揃えていないとチーム作業やコードの再現で思わぬエラーが出てしまいます。そこでpyenvを使うと、作業ディレクトリごとにPythonのバージョンを切り替えたり、いつでも任意のバージョンを使用したりできます。

類似ツール:Docker

pyenv-virtualenvとは

Point:仮想環境を作業ディレクごとに作成できる。

パッケージをインストールする際にpipを使いますが、一つの環境には一つのバージョンのパッケージしか入れることができません。こっちの作業ではパッケージver1.0を使い、あっちの作業ではver2.0を使うといったことができないです。そこで、PC上に箱を作り、パーケージのインストールを、その箱内のみに適応させておきます。これが仮想環境です。この箱を切り替えることで、様々な用途に合わせてPythonとパッケージのバージョンを切り替えることもできます。

類似ツール:Docker, venv(Appendix参照), Virtualenv(Appendix参照)

requirements.txtとは

Point:Pythonパッケージをバージョンを揃えて一括でインストールできる。

チームでの作業、もしくは個人でも、numpu、pandas、matoplotlibなどのPythonパッケージのバージョンを指定して、一括でインストールできれば、便利だと思いませんか?requirements.txtを使えば、いちいちpip insatall ~~を繰り返すことなく、コマンド1行で指定した全てのパッケージをインストールすることができます。

類似ツール:Pipenv

上記ツールのカバー範囲をまとめるとこんな感じになります。

環境構築

先ほど書いたように、ほとんどのツールに依存関係はないため(pyenv-virtualenvはpyenvが必要)、必要なツールのみを使用してもかまいません。

早速環境構築を始めてみましょう。

Homebrewのインストール

Homebrewは以下の公式サイトにあるコマンドを実行するだけで、インストールできます。homebrewをインストールする前に、x-codeをインストールする必要があるとの紹介記事もあります。しかし、使うのはx-codeの一部かつ下記コマンドで勝手にインストールされるため、x-codeのインストールは必要ありません。

macOS(またはLinux)用パッケージマネージャー — Homebrew

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

homebrewの基本な使い方は、以下の通りです。

#パーケージのインストール、アンインストール
$ brew install ~~
$ brew uninstall ~~

#インストールパッケージの確認
$ brew list

#パッケージのインストール先確認
$ brew --prefix

pyenv、pyenv-virtualenvのインストール

続いてpyenv、pyenv-virtualenvをインストールします。

$ brew install pyenv
$ brew install pyenv-virtualenv

もし、homebrewを使わない場合 or windowsの方は、githubから直接インストールすることもできます。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

インストールが終われば、コマンドが使えるよう環境変数にPATHを通しまししょう。以下の作業をmacユーザーのみ適応できるやり方ですので、あしからず、、

#今回はvimを使います
$ vim ~/.bash_profile

#以下を追加
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
  eval "$(pyenv virtualenv-init -)"
fi

#vimを閉じて以下を実行 、もしくはターミナル再起動で、~/.bash_profileの変更を反映
$ source ~/.bash_profilesource 

これで、準備完了です。

Pythonのインストール

次にpyenvを使ってpythonをインストールします。インストールできるものの一覧は以下のコマンドでみれます。

#インストール可能なもの確認
$ pyenv install -l
>Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  2.4.3
    ・
    ・

今回はPython3.8.0をイントールしてみます。pyenv vesionsでインストールしたPython環境を確認できます。

$ pyenv install 3.8.0 

#確認
$ pyenv versions
> * system
      3.8.0

pyenvの使い方

pyenvで、Pythonバージョン切り替える方法は2種類あります。

$ pyenv local 3.8.0
$ pyenv global 3.8.0

pyenv local ~~は今いるディレクトリ 内のみに適応され、pyenv global ~~は全体に適応されます。例えば作業ごとにディレクトリを作成しておき、その中でpyenv local ~~を使えば、ディレクトリ を移動するだけで、簡単にPython環境を切り替えることができます。

仮想環境の作成

続いて仮想環境を作成します。

#仮想環境の作成
$ pyenv virtualenv 3.8.0 test3.8.0
#環境の確認
$ pyenv virtualenvs

作り方は、pyenv virtualenv pythonバージョン 任意の仮想環境名です。練習のため、Python3.8.0でtest3.8.0という名前の仮想環境を作成しました。pyenv virtualenvsで仮想環境一覧を見ることができます。

仮想環境を有効化する。

仮想環境を作成しただけでは使えないので、作業ディレクトリ を作成してその中で仮想環境を有効化してみます。

#作業ディレクトリ を作成して、移動
$ mkdir test
$ cd test

#pyenvを使って、さっき作った仮想環境を有効化
$ pyenv  local test3.8.0

#うまくいけばカッコの中に仮想環境名が出てくる
(test3.8.0) ~~$

これで仮想環境の作成は終わりです。この作業ディレクトリ から出れば、元の環境ですし、もう一度入れば、仮想環境となっています。試しに仮想環境内でnumpyをインストールしてみます。

#ディレクトリ test内
#インストールされているパッケージの確認
$ pip list

> Package    Version
    ---------- -------
    pip        19.2.3 
    setuptools 41.2.0 

#numpyのインストール    
$ pip install numpy

#うまくいっていれば、 numpyは入っている
$ pip list
> Package    Version
   ---------- -------
    numpy      1.18.4 
    pip        19.2.3 
    setuptools 41.2.0 
  

このpip installでインストールされたパッケージは仮想環境内でのみ使えるようになっています。要らなくなった仮想環境は、

$ pyenv uninstall test3.8.0

#環境の確認
$ pyenv virtualenvs

で削除できます。

requirements.txt

最後は、requirements.txtの使い方です。requirements.txtは、”どのパッケージのどのバージョン”をインストールするべきかを記述したもので、

$ pip install -r example-requirements.txt

とすると一度でパッケージをインストールすることができます。チームでは、これを管理することで、パッケージのバージョンを揃えます。

pip install — pip 20.3.dev0 documentation

requirements.txtの作り方は簡単で、

numpy == 1.18.4 pandas >=1.0.3

パッケージ ==, >= バージョンのように書きます。== , >=などでバージョンの条件を指定し、何も書かなければ最新版がインストールされるようです。また、現在の環境のrequirements.txtを作成するには、

$ pip freeze > requirements.txt

とするとrequirements.txtが作成できます。

Appendix

pyenv-virtualenvを使わず、venv簡易的に仮想環境を作る。

pyenv-virtualenvは、Virtualenvという仮想環境を構築するツールを、pyenvとともに使いやすくしたツールです。内部ではVirtualenvを呼び出しているようです。もし、pyenvを使わず仮想環境を作成する場合は、Virtualenvを使うか、Pythonにデフォルトで入っているvenvというツールで、簡易的に仮想環境を構築することもできます。今回は簡易的にvenvを使って仮想環境を作成してみます。

#作業ディレクトリ の中で

#pythonのバージョンを指定
$ pyenv local 3.8.0

#確認
$ python -V
>Python 3.8.0

#仮想環境作成
$ python -m venv test2_3.8.0

#仮想環境を有効化
$ source tes2_3.8.0/bin/activate

#仮想環境を無効化
$ deactivate

※本記事は筆者が個人的に学んだことをまとめた記事になります。所属する組織の意見・見解とは無関係です。

参考

homebrewについて

MacでPython環境を用意し、Jupyter Notebookを設定するメモ(2018年4月) - Qiita

Homebrewとは?インストール方法や使い方をわかりやすく説明します - Reasonable Code

pyenv、pyenv-virtualenv、venvについて

pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。 - Qiita

⭐︎初心者でも分かる仮想環境構築 - Qiita

MacにPython3をインストールし環境構築【決定版】 - Qiita

環境構築全般について

pythonの環境構築戦争にイラストで終止符をどうやら打てない - Qiita