Mac上にPythonの開発環境を構築する(pip + venv)
Keywords
- Python
Contents
- 1. 前提
- 2. Pythonのローカル開発環境構築は難しい
- 3. 仮想環境
- 3-1. 仮想環境の作成
- 3-2. 仮想環境への切り替え
- 3-3. ライブラリのインストール
- 3-4. Pythonコードの実行
- 3-5. 仮想環境の共有
- 3-6. 仮想環境の終了
- 4. その他
- 5. 参考URL
前提
- Pythonがインストールされていること(Ver3.9.1を使用)
- Mac OS
Pythonのローカル開発環境構築は難しい
ライブラリをインストールしようとして、pipを使用すると、site-packagesという場所にインストールされます。(下記コマンドでsite-packagesのパスを確認できます。)
$ python3 -c "import site; print (site.getsitepackages())"
ためしに、$ pip3 install numpy
を実行すると、site-packagesにnumpyが追加されます。($ pip3 uninstall numpy
を実行するとsite-packagesからnumpyが取り除かれます。)
しかし、このパスはグローバルであり、プロジェクト毎に存在しているわけではありません。
PHPのComposerやNodeのnpmを使用するとプロジェクト毎にライブラリをインストールできる(グローバルにもできるが)がPythonではpipだけではできなさそうです。
仮想環境
仮想環境という仕組みを使えば、プロダクト毎にインストールするライブラリを管理することが可能となります。仮想環境というと、OSの仮想化をイメージするかもしれませんが、そういうものではなく、.venvディレクトリ内でライブラリのファイルを管理するようになり、仮想環境への切り替えを行うと、それらを参照するようになるだけです。
本稿ではPython3の標準ライブラリであるvenvを使った方法を紹介します。なお、ライブラリを使用すれば、他にも様々な方法があります。
https://github.com/David-OConnor/pyflow#a-thoroughly-biased-feature-table
仮想環境の作成
$ python3 -m venv .venv
仮想環境への切り替え
下記コマンドを実行すると、仮想環境に切り替わります。
$ . .venv/bin/activate
(.venv) $ python3 -c "import site; print (site.getsitepackages())"
を実行すると、site-packagesのパスが仮想環境切り替え前と異なり、プロジェクトの中に配置されていることが確認できます。
なお余談ですが、echo $PATH
を実行すると、一番左に/Users/naokimachida/IdeaProjects/statistics-exercise/venv/bin
が存在することが確認できます。(同名のファイルがある場合、左から順に優先順位が高くなります。)
そしてvenv/binの中を見てみると、python/python3/python3.9いずれでも/usr/local/bin/python3を参照することが確認できます。
(.venv) $ ls -l venv/bin
(中略)
-rwxr-xr-x 1 naokimachida staff 276 Dec 20 13:25 pip3.9
lrwxr-xr-x 1 naokimachida staff 7 Dec 20 13:25 python -> python3
lrwxr-xr-x 1 naokimachida staff 22 Dec 20 13:25 python3 -> /usr/local/bin/python3
lrwxr-xr-x 1 naokimachida staff 7 Dec 20 13:25 python3.9 -> python3
そのため、pythonコマンド(インタプリタ)を実行する場合は、バージョン3を使用する場合でもpythonだけで大丈夫です。(本稿では明示的にpython3としています。)
ライブラリのインストール
(.venv) $ python3 -m pip install numpy
このコマンドを実行すると、.venv内にnumpyのライブラリがインストールされます。ただ、グローバルなsite-packagesにはインストールされません。
Pythonコードの実行
(.venv) $ python3 hoge.py
仮想環境の共有
リポジトリ管理の対象として、.venvを対象にするのではなく、ライブラリの一覧のファイルを作成し、それを対象にした方が良いです。
一覧ファイルの作成
(.venv) $ python3 -m pip freeze > requirements.txt
一覧ファイルに記載のライブラリのインストール
(.venv) $ python3 -m pip install -r requirements.txt
仮想環境の終了
(.venv) $ deactivate
このコマンドを実行すると、.venv内のライブラリが使えなくなるため、pythonのコードにimport numpy
を記述して実行すると、ModuleNotFoundError: No module named 'numpy'
のエラーが発生してしまいます。(もちろんグローバルにnumpyをインストールしていれば、問題なく実行できます。)
その他
もし、IntelliJ IDEAを使用しているのであれば、IntelliJ IDEAでPythonの開発環境を構築するも参照ください。