私一押しのPython環境(Mac)の構築手順です。
デフォルトのMacのPython環境
Macに最初から入っているpythonの場所とバージョンを調べてみます。
なお、macOS Mojave (バージョン10.14.4)です。
1 2 3 4 | $ which python /usr/bin/python $ python --version Python 2.7.10 |
いまなおPython 2.7です。古いです。
pyenv&pipenvのインストール
pythonの仮想環境&パッケージ管理ツールであるpyenvとpipenvをインストールします。
brewを使います。まだインストールしていない人はこちら。
pyenvをインストールするコマンド
1 | brew install pyenv |
pipenvをインストールするコマンド
1 | brew install pipenv |
~/.bash_profile
に次の内容を追記します。
最後の1行は、プロジェクトディレクトリ配下に仮想環境を配置する設定です。
1 2 3 4 5 | export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" export PIPENV_VENV_IN_PROJECT=true |
次のコマンドで設定を反映させます。
1 | source ~/.bash_profile |
Python3のインストール
pyenvを使ってPython3をインストールします。pyenvを使うと複数バージョンのPythonをインストールすることができて、簡単に切り替えることができます。
インストール済のPythonのバージョンを確認してみます。
systemはもともと入っているPython 2.7のことです。
1 2 | $ pyenv versions * system (set by /Users/username/.pyenv/version) |
インストール可能なPython 3系のバージョンを調べます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | $ pyenv install --list Available versions: (中略) 3.0.1 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4-dev 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.10 3.5.0 3.5-dev 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.6.0 3.6-dev 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7-dev 3.7.1 3.7.2 3.7.3 3.8-dev (以下略) |
3.7.3をインストールしたら何かエラーが出た。
1 2 3 4 | $ pyenv install 3.7.3 (中略) zipimport.ZipImportError: can't decompress data; zlib not available make: *** [install] Error 1 |
こちらを参考にして解決
xcode-selectの最新バージョン(2354)にMojave用のmacOS SDK headerがデフォルトで入っていないのが原因のようです。
Command Line Developer Toolsをインストール
1 | xcode-select --install |
続けて次のコマンド
1 | sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / |
3.7.3のインストールに再チャレンジ
今度はうまくいきました。
1 | pyenv install 3.7.3 |
systemと3.7.3がインストールされていることが確認できました。
*が付いているsystem(2.7)がデフォルトです。
1 2 3 | $ pyenv versions * system (set by /Users/username/.pyenv/version) 3.7.3 |
自分はsystem(2.7)を使うことが無いので、次のコマンドで3.7.3をデフォルトに設定します。
1 | pyenv global 3.7.3 |
確認すると3.7.3に*が付いています。
1 2 3 | $ pyenv versions system * 3.7.3 (set by /Users/username/.pyenv/version) |
Pythonの場所とバージョンを確認すると3.7.3に切り替わっています。
1 2 3 4 | $ which python /Users/username/.pyenv/shims/python $ python --version Python 3.7.3 |
仮想環境を作る
適当なディレクトリ、例えば~/test
を作成して移動します。
1 2 | mkdir ~/test cd ~/test |
Python 3.7.3で仮想環境を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ pipenv --python 3.7.3 Creating a virtualenv for this project… Pipfile: /Users/username/test/Pipfile Using /Users/username/.pyenv/versions/3.7.3/bin/python3 (3.7.3) to create virtualenv… ⠦ Creating virtual environment...Using base prefix '/Users/username/.pyenv/versions/3.7.3' New python executable in /Users/username/test/.venv/bin/python3 Also creating executable in /Users/username/test/.venv/bin/python Installing setuptools, pip, wheel... done. Running virtualenv with interpreter /Users/username/.pyenv/versions/3.7.3/bin/python3 ✔ Successfully created virtual environment! Virtualenv location: /Users/username/test/.venv Creating a Pipfile for this project… Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (a65489)! Installing dependencies from Pipfile.lock (a65489)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. |
ディレクトリの中身です。.venv/
に仮想環境の一式が入っています。
1 2 | $ ls -a ./ ../ .venv/ Pipfile Pipfile.lock |
仮想環境でモジュールをインストールするのは次のコマンド。
試しにnumpy
をインストールしてみます。
1 | pipenv install numpy |
コマンドpipenv shell
を入力して仮想環境に入るとコマンドプロンプトが変わりました。仮想環境でpythonを起動して、さっきインストールしたnumpyのインポートに成功。
1 2 3 4 5 6 7 8 9 | $ pipenv shell Launching subshell in virtual environment… bash-3.2$ . /Users/username/test/.venv/bin/activate (test) bash-3.2$ python Python 3.7.3 (default, Apr 17 2019, 18:15:47) [Clang 10.0.0 (clang-1000.11.45.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> |
quit()
でpythonを終了。
exit
で仮想環境を抜けます。
1 2 3 | >>> quit() (test) bash-3.2$ exit exit |
簡単なスクリプトを仮想環境で実行してみます。
test.pyを作成します。
1 2 3 | import numpy as np print(np.random.rand()) |
pipenv shell
で仮想環境に入って、python test.py
を実行したら無事に成功。exitで仮想環境を抜けます。
1 2 3 4 5 6 7 | $ pipenv shell Launching subshell in virtual environment… bash-3.2$ . /Users/username/test/.venv/bin/activate (test) bash-3.2$ python test.py 0.4182276126458404 (test) bash-3.2$ exit exit |
仮想環境に入ったり出たりが面倒ならば、次のコマンドで直接実行できます。
1 2 | $ pipenv run python test.py 0.2958896302622187 |
ちなみに仮想環境を消去したい場合は、次のコマンドです。
Pipfile
はそのまま残りますが、.venv/
とPipfile.lock
ファイルは削除されます。
1 | pipenv --rm |
Pipfileには仮想環境が使用するPythonやモジュールのリストが記載されています。Pipfileごと別の環境へ持って行き、そこで次のコマンドを実行すれば、仮想環境を再構築できて楽ちんです。もちろん別環境にもpyenvとpipenvが導入されている必要があります。
1 | pipenv install |
おわり
Pythonの特徴として、アレするのもコレするのも、モジュールをimport、import、またimportするのが常です。Pythonやモジュールを一緒くたにして、たくさんのPythonプロジェクト維持するのは、Pythonやモジュールどおしの互換性の問題などが生じがちですが、pyenv + pipenvなら、好きなバージョンのPythonと好きなモジュールを組み合わせた仮想環境をプロジェクト別に簡単に構築できるところが素敵です。
以上です。