anyenvからpyenv+virtualenvをインストールしてバージョンやパッケージを切替可能なPython環境を用意する
事業開発部の野村です。今回はPythonの環境構築のお話。
はじめに
Pythonの開発環境にpyenvとvirtualenvを導入すると、Pythonのバージョンや依存するパッケージを簡単に切り替えることができます。
以前、以下の記事でanyenvを開発環境に導入済みでしたので、当記事ではanyenvを使ったPython環境構築をご紹介いたします。
前提
以下の環境で検証しております。
- macOS High Sierra 10.13.6
- anyenv をインストール済み
pyenvの導入
pyenv インストール
以下のコマンドでまずはpyenvをインストールします。
$ anyenv install pyenv
pyenv で Python をインストール
pyenvでインストールできるPythonのバージョンを確認します。
$ pyenv install --list
Available versions:
と出た後、バージョンがずらっと出力されます。ここでは例として 2.7.15
と 3.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で実現できそうな兆しを見つけたことがきっかけなのですが、その話はまたまとまり次第お伝えしようと思います。
それでは今回はこれにて。