はじめに
MacでPythonの仮想環境を任意のPythonのバージョンで作る方法を書いていきます。
この手の情報はWebで検索をすると様々な方法がヒットしますが、いろんな要素が絡んでいる内容なので知識が不足している場合、それぞれが何の話をしてるのか把握しにくくなりがちですが論点は大体下記の2点に集約されると思っています。
Pythonのバージョン
Pythonのバージョンは2系と3系で構文の書き方が違ったり利用できるライブラリが異なったりします。そのため目的に応じてPythonのバージョンを使い分けられる必要がでできます。アプローチとしては
- 元々macに入っている2系に加えて3系をインストールして、別々のコマンドで使い分けるという方法 (今回はこちらで説明します。)
- pyenvという複数バージョンの-Pythonを簡単に切り替えることができるライブラリを用いる方法
が挙げられます。
仮想環境
複数のツールやサービスを大きくする場合には必要となるライブラリーの種類が変わってきたりバージョンが変わることがあります。その場合にはそれぞれの開発環境を仮想的に分けてあげる必要が出てきます。
この仮想環境を構築するためには通常はvirtualenvというライブラリを使います。さらにこのvirtualenvのラッパー(virtuelenvを内包しつつ使いやすくしたもの)にvirtuelenvwrapperというものもあります。
今回はvirtuelenvwrapperではなく、純粋なvirtualenvを利用します。
環境の構築
ではまずマックにもともと搭載されているPythonのバージョンを確認してみましょう
$ python -V Python 2.7.10
インストール先も確認してみます
$ which python /usr/bin/python
2.7が搭載されていました。
Python3の導入
Python3はhomebrewでインストールします。
homebrewのインストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Python3のインストール
$ brew install python3
Python3のインストール先の確認
$ which python3 /usr/local/bin/python3
Python3の確認
$ python3 -V Python 3.6.4
無事Python3系がインストールされているのか見て取れます。
virtualenvを使った仮想環境構築
virtualenvをpipでインストールします。
$ pip install virtualenv
今回のテストのために適当なディレクトリを作ってその中に入れます。
$ mkdir test $ cd test
virtualenvのコマンドで先ほどインストールしたPython3を指定して環境を作成します。
はじめにhomebrewでPython3をインストールした際にコマンドのパスが通ったので、そのコマンドを利用してPythonのバージョンを指定します。
$ virtualenv -p python3 test_env virtualenv -p [Pythonのコマンド] [作成する環境名]
ちなみにパスをそのまま書いても同じ結果が得られます。
$ virtualenv --python=/usr/local/bin/python3 test_env
環境はvirtualenvコマンドを実行したディレクトリに新しいフォルダとして構築されているので、中に入ります。
$ cd test_env
環境を起動してみましょう。
$ source bin/activate
成功した場合ユーザー名の前に環境の名前が(test_env)
のように表示されるはずです。
試しにPythonのバージョンを見てみましょう。
$ python -V Python 3.6.4
このように仮想環境内では先ほど指定したPythonのバージョンがPythonコマンドで利用できるようになっています。
仮想環境を終了する場合はこのコマンドを使います。
$ deactivate
virtualenvwrapperについて
今回は利用しませんでしたがvirtualenvwrapperという、virtualenvをさらに使いやすくしたようなラッパーがあります。このライブラリを用いると、
$ mkvirtualenv test_env
といった感じでに仮想環境を作ることができます。
当初僕はvirtualenvwrapperを用いたmkvirtualenvコマンドとvirtualenvを用いたvirtualenvコマンドの違いがよくわからず混乱していたので、注意してください。
ホームページを読むとこのライブラリのできることが書いてあります
- Organizes all of your virtual environments in one place.
- Wrappers for managing your virtual environments (create, delete, copy).
- Use a single command to switch between environments.
- Tab completion for commands that take a virtual environment as argument.
- User-configurable hooks for all operations (see Per-User Customization).
- Plugin system for more creating sharable extensions (see Extending Virtualenvwrapper).
ようするに仮想環境が複数あってもまとめて管理できたり仮想環境の切り替えが楽になるよ、ということみたいです。興味のある方はこちらも試してみてください。