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のインストール
pyenv
と pyenv-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をサーバ用途で使う事が多く、開発用のローカル環境的な使い方はあまりしません。
もう少し具体的に言うと、 Packer や Ansible で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)は
pyenv
とpyenv-virtualenv
で Pythonのバージョンと仮想環境を切り替える - サーバは Pythonを ソースから
altinsall
して複数バージョンが共存できるようにしてあげる
のがいいかな、と考えています。