Python における環境構築
Python における環境構築
Pyenv + Pipenv で Python の仮想環境を構築した際の備忘録。
Python の環境構築については既に様々な人が解説してくれています。 それを参考に、ド素人な自分用にちょいちょいメモを追加。
Pyenv
Python 自体のバージョン管理に使用する。
インストール
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
設定
shell の設定ファイルに以下を追加。
自分は ~/.zshenv
に記述した。
# for pyenv export PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH eval "$(pyenv init -)"
Python のインストール
Pyenv を利用して指定のバージョンの Python をインストールする。
$ pyenv install 3.6.5 $ pyenv rehash
新しいバージョンの Python をインストールした場合、pyenv rehash
を実行して shims コマンドを更新する。
ちなみに shims コマンドは、使用するバージョンにおける python
や pip
などのコマンドで ~/.pyenv/shims
以下に配置されている。
使用する Python の指定
以下のコマンドで基本的に使用される Python のバージョンを指定できる。
$ pyenv global 3.6.5
なお、そのディレクトリのみといったように局所的に使用したい場合は次のように指定する。
$ pyenv local 3.6.5
pyenv local
でローカルに Python のバージョンを指定した場合、実行したディレクトリに .python-version
が作成される。
Python の削除
もし特定のバージョンの Python をアンインストールしたい場合には以下のようにする。
$ pyenv uninstall 3.6.5
Pipenv
仮想環境の管理およびパッケージ管理の両方を行うために使用する。
pipenv のインストール
pip
でインストールする。
$ pip install pipenv
pip
で入れるものを管理するための Pipenv を pip
で入れるという何とも不思議な感覚。
仮想環境の構築とパッケージのインストール
Python で開発を行う場合には、プロジェクトごとに仮想環境を作成するのが一般的らしい。 プロジェクトのディレクトリで以下を実行。
$ pipenv install $ ls >> Pipfile Pipfile.lock
できたてホヤホヤのまっさらなディレクトリであった場合、Pipfile と Pipfile.lock が作成されているはずである。
Pipenv は Pipfile と Pipfile.lock というファイルによって仮想環境およびパッケージを管理している。
既に Pipfile, Pipfile.lock が存在している状態で pipenv install
を実行した場合、Pipfile 内の dev-dependencies
に記述されている部分を除いたパッケージのインストールされた仮想環境を構築する。
したがって、プロジェクトを公開する場合には Pipfile, Pipfile.lock を含めておけば利用者は必要な環境を容易に再構築することができる。
新しいパッケージを追加する場合には以下のように追加する。
$ pipenv install numpy
$ pipenv install --dev autopep8
1行目には Numpy というパッケージを追加する例を示した。 パッケージをインストールすると Pipfile, Pipfile.lock が自動的に更新される。
2行目には開発用パッケージとして autopep8 を追加する例を示した。
開発用パッケージとして追加した場合、Pipfile, Pipfile.lock からの pipenv install
でインストールされるパッケージに含まれなくなる。
コード整形やデバッグのためだけに使うパッケージであれば開発用で追加するのが良い。
もし、開発用パッケージも含めて再構築したい場合には pipenv install --dev
とする。
仮想環境のアクティベート
pipenv run
により、仮想環境をアクティベートした Python を実行可能である。
# hoge.py import numpy as np a = np.arange(9).reshape(3, 3) print(a)
$ pipenv run python hoge.py >> [[0 1 2] >> [3 4 5] >> [6 7 8]]
インストールした Numpy が利用可能であることがわかる。
ちなみに、構築した環境を使用しない場合は Numpy がインストールされていないため動作しない。
$ python hoge.py >> Traceback (most recent call last): >> File "hoge.py", line 1, in <module> >> import numpy as np >> ModuleNotFoundError: No module named 'numpy'
また、pipenv shell
を使用すれば、仮想環境をアクティベートした shell が起動される。
$ pipenv shell >> Spawning environment shell (/bin/zsh). Use 'exit' to leave. >> . ~/.local/share/virtualenvs/projects-idXXXX/bin/activate
また、この shell 内での pip install hoge
は、pipenv install hoge
と同じである(多分)。
pip install hoge
の結果も Pipfile, Pipfile.lock に反映される。
余談
上述したように、Python で開発を行う場合にはプロジェクトごとに仮想環境を作成するのが一般的らしい。 しかし、Python を普段使いしてると conda みたいにグローバルに利用できる仮想環境が使いたい場合もまあまあある。
そういう時はどうすればいいんだろう?
Pipfile
と Pipfile.lock
だけを管理するディレクトリを作って、必要に応じて pipenv shell
でアクティベートとか?