Pythonは機械学習・AIの開発言語として最近とても需要が高まっていますが、Pythonの開発環境の構築法は様々な方法があり、一体どれを採用すれば良いか迷うこともあります。
ここでは、Pythonの開発環境をMacに構築する最新の方法をご紹介したいと思います。
macOSにはデフォルトでPython2系(macOS 10.14.3でPython 2.7.10)がプリインストールされています。
少し前まではPython2系のプログラムを利用する機会もありましたが、最近ではPython3系で開発するのが主流となってきています。
そのため今回は、Python3系のインストールと環境構築方法を中心に解説して行きたいと思います。ただし、Python2系を使いたい場合も同じ方法で環境構築ができるのでご安心下さい。
Homebrewのインストール
macOSにPython3などのパッケージをインストールするには、「Homebrew」というパッケージ管理ツールを利用するのが一般的です。(昔はMacportが用いられていましたが、現在ではHomebrewが主流です。)
Homebrewは、ターミナルからコマンド一発でパッケージのインストール、アンインストール、バージョンアップなどができる便利なツールです。(開発パッケージ版のApp Storeの様なもの。)
それではまず、Homebrewをインストールしてみましょう。
ターミナルを開いて、下記のコマンドを入力してEnterキーを押して実行するだけでインストールは完了します。(詳細はHomebrewの公式サイトhttps://brew.sh/index_jaを参照)
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrewのインストール確認
下記のコマンドを入力してバージョン情報が出れば正常にHomebrewが正常にインストールされています。
$ brew --version
Homebrew 2.0.5
Homebrew/homebrew-core (git revision c30aa; last commit 2019-03-21)
Pythonインストール
次にPython3系をHomebrewを使ってインストールします。
まず、Homebrewでインストール可能なPythonのバージョンを確認します。
$ brew search python
==> Formulae
app-engine-python gst-python python ✔ wxpython boost-python ipython python-markdown zpython boost-python3 ipython@5 python-yq boost-python@1.59 micropython python@2
==> Casks
homebrew/cask/awips-python homebrew/cask/mysql-connector-python homebrew/cask/kk7ds-python-runtime
このHomebrewのバージョンではPython3系が”python”と表示され、Python2系が”python@2″と表示されます。 (古いHomebrewではPython3系が”python3″、Python2系が”python”と表記される場合があります。その際は、$ brew update を実行することで最新のHomebrewに更新することができます。)
Python3系をインストールしたいので、次のコマンドを実行します。
$ brew install python
Pythonインストール確認
以下のコマンドを実行すれば、Pythonのバージョンが表示されれば正常にインストールされていることが確認できます。
$ python3 -V
Python 3.7.3
Pythonの開発環境の構築
Pythonで開発する際、プロジェクト毎に使用するPythonのバージョンや利用するパッケージのバージョンを指定したい場合が出てきます。(このようなプロジェクト毎の個別の開発環境のことを仮想環境と呼んだりします。)
そんな時に便利なのがpipenvです。
今まではPythonのバージョン管理にはpyenvを使い、パッケージ管理にはpipやconda、仮想環境管理にはvirtualenvやvenvを使うなど色々な方法があって混乱しがちでした。
しかし、pipenvを使うとプロジェクト毎のPythonのバージョン管理やパッケージ管理をこれ一つで簡単に行うことができるようになります。
pipenvのインストール
pipenvはHomebrewから以下のコマンドを実行してインストールすることができます。
$ brew install pipenv
pipenvの使い方
ここでは実際にサンプルのプロジェクトをpipenvで構築することで、pipenvの基本的な使い方を解説したいと思います。
例えばPython3.7.3で開発するプロジェクトを構築したい場合を想定したいと思います。
まず、作業用のディレクトリを作成して、そのディレクトリに移動します。
$ mkdir sample_pj
$ cd sample_pj
次に、下記のpipenvコマンドを実行します。
$ pipenv --python 3.7.3
これで、pipenvによって仮想環境が構築されました。
構築した仮想環境で作業するには、仮想環境に入る必要があります。それでは、次のコマンドでその環境に入ってみましょう。
$ pipenv shell
...
(sample_pj) $
プロンプトが”(sample_pj) $”となり、先ほど構築した仮想環境に入っていることが確認できます。
では、この状態でPythonのバージョンを確認してみましょう。
(sample_pj) $ python -V
Python 3.7.3
想定したPython 3.7.3で環境が構築されていることが確認できます。
また、仮想環境から抜けるときは以下のコマンドを実行します。
(sample_pj) $ exit
pipenvでパッケージ管理
pipenvを使うとPythonパッケージも管理することができます。
例えば、numpy 1.16.2をインストールしたい場合は、仮想環境に入った後に次のコマンドを実行します。(Pythonではpipでパッケージを管理することが多く、他の参考資料を見ると$ pip install 〜と記載されていることがありますが、pipenvで仮想環境を構築する場合は、$ pipenv install 〜と置き換えて実行しましょう。)
$ pipenv install numpy==1.16.2
インストールされているパッケージの一覧を表示するには次のようにします。($ pip listでも簡易一覧が見れます。)
$ pipenv graph
numpy==1.16.2
numpy 1.16.2がインストールされていることが確認できました。
Pipfile、Pipfile.lockから環境を構築
pipenvで構築された環境の情報はプロジェクトフォルダにあるPipfileとPipfile.lockファイルで管理されています。
逆に言えば、PipfileとPipfile.lockファイルさえあれば、そこから同じ環境を簡単に構築することが可能となっています。
PipfileとPipfile.lockの違い
Pipfileは、どのパッケージをどのバージョンの状態で構築したいかを記載したファイルになっています。
[packages]
numpy = "==1.16.*" #numpy 1.16の最新版をイントールしたい
Pipfile.lockは、実際にどのパッケージで構築されているかを記載したファイルになります。
"numpy": {
"hashes": [
"sha256:1980f8d84548d74921685f68096911585fee393975f53797614b34d4f409b6da",
],
"index": "pypi",
"version": "==1.16.2" # 実際にインストールされたバージョン
}
Pipfileから環境を構築する
Pipfileファイルに記載されている最新バージョンのパッケージをイントールしたい場合に用います。
Pipfileから環境を構築するには、プロジェクトフォルダ内にPipfileをコピーして、以下のコマンドを実行します。
$ pipenv install
Pipfile.lockから環境を構築する
Pipfile.lockファイルに記載されている同じバージョンのパッケージをインストールしたい場合、いわゆるクローン環境を構築したい場合に用います。
Pipfile.lockファイルは “$ pipenv lock” コマンドを実行することで任意に作成することができます。開発環境のクローンを作りたいときはPipfile.lockを新しく作成するようにしましょう。
Pipfile.lockから環境を構築するには、プロジェクトフォルダ内にPipfile.lockをコピーして、以下のコマンドを実行します。
$ pipenv sync
以上で、Python開発環境をpipenvで構築することが一通りできるようになったと思います。
最後にまとめとしてpipenvのコマンドを簡単に紹介したいと思います。
pipenvのコマンド集
指定したPythonバージョンで仮想環境を構築
$ pipenv --python "Pythonのバージョン"
仮想環境に入る
$ pipenv shell
仮想環境から抜ける
$ exit
任意のパッケージをインストール
$ pipenv install "パッケージ名"=="バージョン"
任意のパッケージをアンインストール
$ pipenv uninstall "パッケージ名"
Pipfile.lockを生成
$ pipenv lock
Pipfileに記載されたパッケージをアップデートして、Pipfile.lockを生成
$ pipenv update
Pipfile.lockに記載されている内容で環境を構築
$ pipenv sync
Pipfileに記載されている内容で環境を構築
$ pipenv install
pipenvでインストールしたパッケージの依存関係を表示
$ pipenv graph
pipenvで構築されている仮想環境の実体のパスを表示
$ pipenv --venv
pipenvで構築されている仮想環境を削除
$ pipenv --rm
pyenvを導入してPythonのインストールを自動化する方法
Pythonのバージョンを指定して仮想環境を構築しようとした際に、下記のようにpythonパスを聞かれる場合は、そのバージョンのPythonをインストールする必要があります。
$ pipenv --python 3.7.0
Warning: Python 3.7.0 was not found on your system…
You can specify specific versions of Python with:
$ pipenv --python path/to/python
個別にPythonをインストールするのは面倒ですが、Homebrewでpyenvをインストールしておくと、pipenvでPythonのイントールまで一気に行う事ができるので大変便利です。
Homebrewでpyenvをインストールするには以下を実行します。
$ brew install pyenv
次に、ホームディレクトリの”.bashrc”にパスを追記します。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
ターミナルを再起動させて、以下のコマンドを実行すると、pyenvと連動して指定したバージョンのPythonをインストールして仮想環境を構築する事ができます。
$ pipenv --python 3.7.0
Warning: Python 3.7.0 was not found on your system…
Would you like us to install CPython 3.7.0 with pyenv? [Y/n]: Y
Installing CPython 3.7.0 with pyenv (this may take a few minutes)…
⠦ Installing python…
zipimport.ZipImportErrorが発生する場合の対処方法
macOS Mojave 10.14.x を使用している場合は、ZipImportErrorが発生するようです。
✘ Failed…
Something went wrong…
…
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
これは、XcodeのCommand Line ToolsにmacOS Mojave 10.14.x用のmacOS SDKヘッダがインストールされていない事が原因なので、以下のコマンドを実行して手動でインストールしてから、再度実行させてみて下さい。
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
コメント