anyenvからpyenv+virtualenvをインストールしてバージョンやパッケージを切替可能なPython環境を用意する

2018.10.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

事業開発部の野村です。今回はPythonの環境構築のお話。

はじめに

Pythonの開発環境にpyenvvirtualenvを導入すると、Pythonのバージョンや依存するパッケージを簡単に切り替えることができます。

以前、以下の記事でanyenvを開発環境に導入済みでしたので、当記事ではanyenvを使ったPython環境構築をご紹介いたします。

LINE Notifyをnode.jsで利用する

前提

以下の環境で検証しております。

  • macOS High Sierra 10.13.6
  • anyenv をインストール済み

pyenvの導入

pyenv インストール

以下のコマンドでまずはpyenvをインストールします。

$ anyenv install pyenv

pyenv で Python をインストール

pyenvでインストールできるPythonのバージョンを確認します。

$ pyenv install --list

Available versions: と出た後、バージョンがずらっと出力されます。ここでは例として 2.7.153.7.0 をそれぞれインストールします。

$ pyenv install 2.7.15
$ pyenv install 3.7.0

それぞれのインストールコマンド完了後、以下のコマンドで今あるPythonのバージョンを確認できます。

$ pyenv versions
* system (set by /Users/nomura.keichi/.anyenv/envs/pyenv/version)
  2.7.15
  3.7.0

※デフォルトはsystem(macOSにインストール済みのPython)が選択されています。

Pythonのバージョン指定

デフォルトで利用するバージョンを指定する場合は、 global を使います。

$ pyenv global 2.7.15
$ python --version
Python 2.7.15

今いるディレクトリ内で使いたいPythonのバージョンを local で指定します。(local コマンドを使うと、そのディレクトリにPythonのバージョンを記載した .python-version ファイルが作成されます。)

$ cd xxx
$ pyenv local 3.7.0
$ python --version
Python 3.7.0

ディレクトリを切り替えると、Pythonのバージョンが global で指定したものに変わっていることがわかります。

$ cd ../
$ python --version
Python 2.7.15

特に local で指定ない場合は global のバージョンを参照し、特定のディレクトリ配下で違うバージョンを使いたい場合は local で指定したバージョンを参照できます。

virtualenvの導入

python-virtualenvのインストール

pyenvのプラグイン pyenv-virtualenv をインストールすることで、 pyenvを利用したPythonの環境でvirtualenvを利用することができます。

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

virtualenvを使ったPython環境の作成

先程インストールした 3.7.0 のPythonバージョンを使った環境を、環境名 test と命名して以下のコマンドで作成します。

$ pyenv virtualenv 3.7.0 test

pyenvでバージョンを確認すると以下の様に一覧が表示されます。先程作った test が一覧上に存在しています。

$ pyenv versions
* system (set by /Users/nomura.keichi/.anyenv/envs/pyenv/version)
  2.7.15
  3.7.0
  3.7.0/envs/test
  test

pyenvの local コマンドを使って、先程の test 環境を使うように指定します。

$ pyenv local test
$ python --version
Python 3.7.0

virtualenvで作成した環境下でpipパッケージを追加する

以降、pyenv local test を指定したディレクトリ以下で pip を使ってパッケージを追加してみます。試しにPythonのフレームワークで有名なFlaskを。

$ pip install Flask

正常にインストール完了すると、以下のようにFlaskや依存パッケージが入っている状態となります。

$ pip list
Package      Version
------------ -------
Click        7.0
Flask        1.0.2
itsdangerous 0.24
Jinja2       2.10
MarkupSafe   1.0
pip          10.0.1
setuptools   39.0.1
Werkzeug     0.14.1

pyenvで別の環境に切り替える

この状態から、 pyenvで別のバージョンに切り替えます。

$ pyenv local 3.7.0

そうすると、先程pipでインストールしたFlask等のパッケージはなくなっていることがわかります。

$ pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 39.0.1

もう一度 pyenv local test で切り替えるとパッケージの状態も復元していることが確認できます。

別のディレクトリで同じく pyenv local test コマンドを実行すると、同じpythonバージョン+pipパッケージをそのディレクトリ配下で利用することができます。また、pyenv virtualenvコマンドで別の環境を作ることで、新しく別のパッケージを導入した環境を用意できます。

pyenv, virtualenvで作成した環境の削除

uninstall オプションを使って、pyenv, virtualenvで作成した環境を削除できます。

$ pyenv uninstall 2.7.15
pyenv: remove /Users/nomura.keichi/.anyenv/envs/pyenv/versions/2.7.15? y
$ pyenv uninstall test
pyenv-virtualenv: remove /Users/nomura.keichi/.anyenv/envs/pyenv/versions/3.7.0/envs/test? y

uninstall コマンドを実行後、本当に削除して良いか入力を問われるので、削除実行する場合に y を入力します。

さいごに

以上で紹介した通り、pyenvとvirtualenvを使って異なるバージョンやライブラリを持ったPython開発環境を複数管理することが出来ます。

そもそも私がPython開発環境を作ろうと思い立ったのは、自身の開発業務で何らか効率化できそうな方法がPythonで実現できそうな兆しを見つけたことがきっかけなのですが、その話はまたまとまり次第お伝えしようと思います。

それでは今回はこれにて。