Python環境構築メモ
目次
Pyenv
Pythonインタプリタの切り替えができる仮想環境マネージャ
Pythonで開発するときに,プロジェクト毎のパッケージ管理や仮想環境の構築を簡単に自動で行ってくれる
node.jsのnpmみたいなもの
インストール (MacOS)
$ brew install pyenv
シェルの設定ファイル(.zshrc等)にpyenvの設定を追加
export PYENV_ROOT=${HOME}/.pyenv
export PATH="${PYENV_ROOT}/bin:$PATH"
eval "$(pyenv init -)"
インストール可能なバージョン確認
$ pyenv install --list
指定したバージョンのPythonインタプリタをインストール
$ pyenv install ${PYTHON_VERSION}
pyenv global ${PYTHON_VERSION}やpyenv local ${PYTHON_VERSION}でバージョンの切り替えができる
Pipenv
パッケージ切り替え & パッケージ管理ができるpipと異なり「何が要求されたパッケージで、何が依存関係の解決に必要なパッケージなのか」を記録することができる
インストール
$ pip install --user pipenv
環境変数の設定
デフォルトの設定では仮想環境がプロジェクト配下ではなくシステム領域に作成されるため、シェルの設定ファイル(.zshrc等)に以下を追記
export PIPENV_VENV_IN_PROJECT=true
仮想環境作成
対象のプロジェクトに移動し仮想環境を作成する
$ cd ${PROJECT_ROOT}
# (指定したバージョンのPythonがpyenvでインストールされていなければ自動的にインストールされる)
$ pipenv --python ${PYTHON_VERSION}
上記コマンドを実行すると${PROJECT_ROOT}下に
.venvディレクトリ (virtualenv環境)Pipfileファイル (Pipenvの設定ファイル: TOML形式)
が生成される
Pipfileの内容
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.7"
仮想環境の削除
仮想環境を削除するには以下のように行う
$ pipenv --rm
仮想環境をアクティベート
$ pipenv shell
でvirtual env環境をactivateしたシェルを起動
(.venv/bin/activateがsourceされたシェルが新たに起動)
仮想環境からはexitで抜けることができる
パッケージのインストール
例: scikit-learnのインストール
$ pipenv install scikit-learn
# バージョンを指定する場合
$ pipenv install scikit-learn==0.20.2
これによってPipfile.lock(Pipenvのロックファイル: JSON形式)もディレクトリ直下に作られて、パッケージの依存関係などが管理される
(実際にインストールされたパッケージとその依存パッケージのバージョンが記録される)
開発用パッケージのインストール
--devオプションをつけることで、開発環境のみで使うパッケージを別枠(dev-packages)として管理しながらインストールできる
(flake8やautopep8といったLinterやコード自動整形ツールなど)
$ pipenv install --dev flake8 autopep8
requirements.txtからのインストール
requirements.txtでパッケージ管理されていた場合に、その内容からPipenvでインストールすることもできる
$ pipenv install -r ./requirements.txt
インストールされているパッケージのバージョンアップ
$ pipenv update
インストールされているパッケージの一覧を確認
$ pipenv graph
依存関係がわかるように出力される
Pipfile, Pipfile.lockから環境の再現
pipenv install
Pipfileのなかで管理されているパッケージをインストール
このときにインストールされた内容でPipfile.lockが更新される
(後述のpipenv syncはlockファイルをもとにインストールするため差分がでなくて安全そう)
$ pipenv install
$ pipenv install --dev
# `--deploy`オプションをつけるとPipfileとPipfile.lockにずれがあるときにエラーを出してくれる
$ pipenv install --deploy
pipenv sync
Pipfile.lockから詳細なバージョンなども合わせて環境を作成
$ pipenv sync
$ pipenv sync --dev
スクリプトの登録
npmやyarnのようにスクリプトショートカット登録できる
以下のようなコマンドを登録しておくと便利
- mainスクリプトのキック
- Unitテストの実行
- Lintツール(flake8等)の実行
- コード整形ツール(autopep8等)の実行
Pipfileの[scripts]に設定する
[scripts]
start = "python main.py runserver"
test = "python -m unittest discover -v"
lint = "flake8 --show-source ."
format = "autopep8 -ivr ."
以下のように実行
$ pipenv run start
$ pipenv run test
$ pipenv run lint
$ pipenv run format
仮想環境内のアプリケーションを実行
pipenv run <実行ファイル名>コマンドを実行するとvirtualenv環境内のアプリケーションを実行できる
$ pipenv run python # virtualenv環境内で pythonインタプリタ を起動
$ pipenv run flask --help # virtualenv環境内で flask を起動
$ pipenv run pytest # virtualenv環境内で pytest を起動
LinterやFormatter
- flake8
- Pythonのコードチェックツール
- flake8-import-order
- importの順序をチェックするflake8プラグイン
- autopep8
- PythonをPEP8スタイルガイドに準拠するように自動整形するツール
Pipenvでインストール
$ pipenv install --dev flake8 flake8-import-order autopep8
flake8の設定ファイル
プロジェクトフォルダに.flake8を作成
[flake8]
ignore = E501
exclude = .git, .venv, wsgi.py, tests
max-line-length = 150
max-complexity = 10