2017/02/08更新

[Python] pyenvを使ってPythonの複数のバージョンを使い分ける

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
Pythonの仕事をしていると様々なPythonバージョンを扱う事に・・・。python3.6みたいにコマンド名にバージョンを含めて使う使い方でもいいんですが、今日はpyenvを用いたバージョンの使い分けをブログに書きたいと思います。
画像

目次




pyenvとは

pyenvとはPythonの複数のバージョンを使い分けるコマンドラインツールで、RubyのrbenvやNodeJSのnvmのようなバージョン管理ツールです。これを作ったのは日本の方のようで、すごいですね。これを使えば案件ごとにpythonのバージョンを細かく決められるので、とても便利に使えます。

それでは早速、具体的な使い方を見てみましょうー。



pyenvをインストールする

インストールにはいくつかの方法が用意されていますが、Github上にあるシェルを実行するのが一番簡単で良いです(環境依存も少ないです)。具体的には以下のコマンドを実行します。
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
その後、~/.bash_profileなどに以下の環境設定を追記しておきます(シェル起動時に自動的に有効にするため)。
# ~/.bash_profile
export PATH="/Users/munesadayohei/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
そして上記の.bash_profileを読み込んでインストール完了です。
$ source ~/.bash_profile
これで、以下のコマンドが認識されればOKです。
$ pyenv



pyenvを使ってみる

それでは早速、pyenvを使ってみたいと思います。

Pythonのバージョンを追加する

pyenv installを使と、Pythonのバージョンを追加できます。
# pyenv install <python_version>
# 以下はPythonの3.6.0をインストールする場合
$ pyenv install 3.6.0
ここでMacの場合に以下のようなエラーが発生する場合、ツールが足りないのでインストールをします。
# Macの場合にエラーが発生するかも・・
$ pyenv install 3.6.0
# 中略 #
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
# XCODEツールをインストールする
$ xcode-select --install
これで、3.6.0のバージョンをインストールすることができました。


現在のバージョンを確認する

pyenv versionを使うと、現在有効なPythonバージョンを確認できます。
$ pyenv version
system (set by /Users/munesadayohei/.pyenv/version)
ここでは、まだpyenvでのバージョン切り替えはしていないので、システム標準のものが使われています。


利用可能なバージョン一覧を確認する

pyenv versionsで、インストール済みのPythonバージョンを一覧で確認できます。
$ pyenv versions
* system (set by /Users/munesadayohei/.pyenv/version)
  3.6.0
上記でインストールした3.6.0もちゃんとありますね。


pyenvでバージョンを切り替える

それでは本題のところです。pyenvでバージョンを切り替えてみましょう。pyenvでは以下の3パターンで、バージョンを指定することができます。
コマンド内容
shell 現在のシェル内でのみ有効なバージョン指定
local 現在のディレクトリとそれ以下のディレクトリで有効なバージョン指定
global システム全体でのPythonバージョンを指定する
プロジェクト単位では基本的にはlocalを使うと良いかと思います。そしてそれらの優先順位ですが、以下の順で適用されます。

shell > local > global


shellが一番優先され、globalが最も優先度が低い設定です。


pyenv shellでバージョン変更する

pyenv shellを使うと、現在のシェルでのみ有効なバージョンを指定することができます。
$ pyenv shell 3.6.0
$ python --version
Python 3.6.0
この指定はPYENV_VERSIONという環境変数に保存されます。


pyenv localでバージョン変更する

pyenv localを使うと、現在のディレクトリとそれ以下のディレクトリで使うバージョンを指定できます。
$ pyenv local 3.6.0
$ python --version
Python 3.6.0
localを実行すると、実行したディレクトリに.python-versionというファイルが生成され、その中にバージョンが記載されています。そのファイルを削除するとlocalの指定は無くなります。


pyenv globalでバージョン変更する

pyenv globalを使うと、システム全体で使うバージョンを指定します。別にshelllocalで指定がある場合にはそちらが優先されます。
$ pyenv global 3.6.0
$ python --version
Python 3.6.0
globalを実行すると、~/.pyenv/versionというファイルができて、その中にバージョンが記載されます。そのファイルを削除するとglobalの設定も無くなっちゃいます。


site-packagesの場所

pyenvでインストールしたPythonのsite-packgesは、以下の場所になるようです。
$ python -c "import site; print(site.getsitepackages())"
['/Users/munesadayohei/.pyenv/versions/3.6.0/lib/python3.6/site-packages']
Pythonをインストール直後は空っぽなので、必要あれば追加します。



参考資料

pyenvを学ぶために以下を参照しました。ありがとうございます。

https://github.com/yyuu/pyenv

https://github.com/yyuu/pyenv-installer

pyenvとvirtualenvで環境構築 - Qiita

MacでPython 3.5.0インストールに失敗したら - Qiita



最後に

どの言語で実装するにも、バージョンの切り替えツールはありがたいですね。virtualenvについても今後ブログに書こうと思います。

最後になりますが本ブログでは、Python・Linux・フロントエンド・インフラ・Go言語・Node.js・開発関連・Swift・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。