Pythonの2と3を切り替えて仮想環境を作る

Pythonの2と3を切り替えて仮想環境を作る
目次

Python使いであれば、Python 2.x と Python 3.x では文法的な互換性がないため、バージョンを正しく使い分けることは最初の第一歩です。 今回はMac環境でのバージョン切り替えとLinux環境でのバージョンの共存について書きます。

モチベーション

Python 2.x と Python 3.x を共存させたい

Python 3.x は言語のバージョンアップに伴い、2.x 系との後方互換性をサポートしていません。 __future__ モジュールや six を使えば、 Python 2で書かれたコードをPython 3のランタイムで動かすことができる場合もありますが、基本的には書き直した方が好ましいと考えています。

互換性に纏わる話は、 バージョン・アップして第2版となって帰ってきた書籍「エキスパートPython」にも触れられていますので、そちらを見た方が良いかもしれません。



プロジェクト毎にモジュールを管理したい

プロジェクト毎にpythonのライブラリを管理したい(プロジェクト毎に依存モジュールが混ざらないようにしたい)ケースが多いので、 仮想環境を簡単に管理できる仕組みも欲しいです。

Mac OSの場合

MacOSの場合には pyenv を使って複数バージョンをインストールしつつ pyenv-virtualenv で仮想環境を管理することをオススメします。 もちろん、pyenv の代わりとしてawsome的な anyenv でも構いません。

Homebrew のインストール

入っていなければ、 Homebrew をインストールしましょう。

TOPページに「このスクリプトをターミナルで叩きなさい」とコマンドが記載されている超親切設計なツールなので、問題なくインストールできるはずです。

pyenvのインストール

pyenvpyenv-virtualenv をインストールします。

brew install pyenv pyenv-virtualenv

.bashrc を書き換える

bashであれば .bashrc 、 zsh であれば .zshrc に以下を追記します。 ターミナルを起動する時に rehash してほしくなければ --no-rehash を入れます。

export PYENV_ROOT="${HOME}/.pyenv"
export PATH="$PATH:${PYENV_ROOT}/bin:${PYENV_ROOT}/shims"

eval "$(pyenv init --no-rehash -)"
eval "$(pyenv virtualenv-init -)"

pythonをインストールして仮想環境を作る

ベースになるPythonをインストールします。

pyenv install 3.6.1

その後、対象のプロジェクト専用の仮想環境を準備します。 仮想環境の名前は test_project にしておきます。

pyenv virtualenv 3.6.1 test_project

次に test_project ディレクトリを作成して、 そのディレクトリ配下では Python 3.6.1 のである仮想環境 test_project を使うように設定します。

mkdir test_project
cd test_project

pyenv local 3.6.1/envs/test_project

python -V
>> Python 3.6.1

試しにディレクトリから出てみましょう。

cd ../
python -V
>> Python 2.7.14

できました。

サーバの場合

私の場合、大抵Linux系OSをサーバ用途で使う事が多く、開発用のローカル環境的な使い方はあまりしません。

もう少し具体的に言うと、 PackerAnsible でPython入りのマシンイメージを焼いて使っています。

このようなユースケースの場合には pyenv を使うのではなくて、 特定のバージョンを予めインストールしておく 方が適しています。(Jenkinsのようなビルドサーバ用途では pyenv の方が良いかもしれません)

今回は Pythonの公式ドキュメント にも記載がある方法で、Pythonをソースからビルドするやり方を個人的にはオススメします。

例えば、CentOSであれば以下のようなになります。

  • Pythonのダウンロード
curl -O https://www.python.org/ftp/python/(バージョン)/Python-(バージョン).tgz
tar zxf Python-(バージョン).tgz
  • ソースからインストール
cd Python-(バージョン)

./configure --prefix=/opt/local
make
make altinstall

ただし、警告のところに書かれているように Linuxには予めPythonがインストールされているため、それを破壊しないように make altinstall の方が良いです。

警告 make install は python3 バイナリを上書きまたはリンクを破壊してしまうかもしれません。 そのため、make install の代わりに exec_prefix/bin/pythonversion のみインストールする make altinstall が推奨されています。

まとめ

今回は異なるバージョンのPythonをインストールし、切り替える方法をまとめました。

  • ローカル環境(Mac)は pyenvpyenv-virtualenvPythonのバージョンと仮想環境を切り替える
  • サーバは Pythonを ソースから altinsall して複数バージョンが共存できるようにしてあげる

のがいいかな、と考えています。

参考にさせていただいたサイト