サイトアイコン Python Snippets

pipenvのinstall, update, syncの違い

pipenvのライブラリインストール系のコマンドの意味がわからなくなるのでまとめました。

install update sync
意味 Pipfileからインストール Pipfileに従ってアップデート Pipfile.lockでインストール
Pipfile 更新あり
Pipfile.lock 更新あり 更新あり

新規に環境構築 pipenv install

Pipfileの依存関係ルールに従ってPipfileの全ライブラリをインストールする。
各ライブラリの依存関係がチェックされて、ルールにマッチするようにライブラリはアップデートされ、Pipfile.lockは更新される。
すでにライブラリがインストール済みのとき、ルールにマッチしていれば、アップデートがあっても最新に更新されることはない。
例えば、ルール上は >=2.0.0 で2.0.0がインストール済みのとき、2.0.1が公開されていてもアップデートはされない。新規にインストールするときは2.0.1が選択される。これをルールに合う最新にアップデートするときは、pipenv updateを使う。
依存関係のチェックが走るので遅い。

ライブラリの追加 pipenv install “hoge==2.0.0”

Pipfileの依存関係ルールを hoge=”==2.0.0″に更新後、そのルールに従って hoge ライブラリがインストールされる。
ルールを更新するのでPipfileが更新される、ルールに従ってライブラリが更新されるのでPipfile.lockも更新される。
依存関係のチェックが走るので遅い。

ライブラリの更新 pipenv update

Pipfileの依存関係ルールに従ってPipfileの全ライブラリの更新をチェックしてルールに合う形で最新版にアップデートする。ルールは変更していないのでPipfileは更新されない。Pipfile.lockは更新される。
依存関係のチェックが走るので遅い。

環境の再現 pipenv sync

Pipfile.lockに記載されたとおりにライブラリをインストールする。ルールは更新されないのでPipfileは更新されない。Pipfile.lockに合わせてインストールされるのでPipfile.lockも更新されない。
依存関係のチェックが走らないので早い。

pipenv install --deploy

Pipfile.lockを更新せずに、Pipfileからのインストールを試みる。Pipfile.lockがPipfileより古い場合にはエラーになる。--skip-lockよりは安全に、更新チェックをしつつインストールできる。

lockせずにインストール pipenv install --skip-lock

Pipfile.lockを更新せずにインストールを行う。Pipfileのルールに従ってインストールが行われるがPipfile.lockは更新されないだけで、Pipfile.lockと同じとおりにインストールされるわけではない。Pipfile.lockを完全無視するのでpipenv syncのほうが良い。
例:ルール上は >=2.0.0 でPipfile.lockが2.0.0。2.0.1が公開されていて、ローカルには未インストールの場合、インストールされるのはルールにマッチする最新の2.0.1だが、Pipfile.lockは更新されないため、環境の再現にはならない。

関連記事:

モバイルバージョンを終了