目次

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