Pipの新機能

2020-10-07

TL;DR

Python標準パッケージインストーラ pip のバージョン20.3で、大きな機能追加 が行われます。これにより、既存のプロジェクトでもエラーが発生する可能性があるので、できれば事前に試しておきましょう。

Pythonパッケージの依存関係

pipコマンドでパッケージをインストールすると、そのパッケージが利用している、別のパッケージも自動的にインストールされます。たとえば、 A というパッケージをインストールするとき、AB というパッケージを利用している場合は、自動的に B もインストールされます。

パッケージの依存関係では、依存するパッケージのバージョンも指定できます。例えば、

  • パッケージ A のバージョン 1.0 はパッケージ B の バージョン 1.0 を利用する
  • パッケージ A のバージョン 2.0 はパッケージ B の バージョン 2.0 を利用する

のように設定できます。

image.png

このように設定しておけば、パッケージ A のバージョン 1.0 をインストールすると、自動的にパッケージ B のバージョン 1.0 をインストールしてくれます。また、パッケージ A のバージョン 2.0 をインストールすると、自動的にパッケージ B のバージョン 2.0 をインストールしてくれます

さて、ここにパッケージ A と、パッケージ B のバージョン 1.0に依存しているもう一つのパッケージ C があります。

パッケージ A のバージョン 2.0 がインストールされている状態で、パッケージ C をインストールするとどうなるでしょう?

image.png

パッケージ A のバージョン 2.0 はパッケージ B のバージョン 2.0を必要としていますが、パッケージ C はパッケージ B のバージョン 1.0 を指定しています。

あちらを立てればこちらが立たない状態ですが、これまでのpipコマンドは、パッケージ C で指定したパッケージ B のバージョン 1.0 をインストールしてしまいます。このため、パッケージ C のインストール後は、パッケージ A は動かなくなってしまいます。

これまで、こういった事態を避けるため、依存関係の解決は pip にまかせずに、インストールするバージョンを手動で明示的に指定したり、pipenvpoetry などの依存関係を解決するツールを利用する必要がありました。

新しい依存リゾルバ

現在、この問題を解決するためにpipの 改善 が進められています。近々リリースされる予定のバージョン20.3では、前述のパッケージ C をインストールすると

  1. パッケージ A のバージョン 2.0 とパッケージ Bのバージョン 2.0 をアンインストール
  2. 改めてパッケージ A のバージョン 1.0 とパッケージBのバージョン 1.0 をインストール

としてバージョンの不整合を解決します。

現在リリース済みの pip 20.2でも、 --use-feature=2020-resolver というオプションを指定すると、新しい依存関係の解決を試せます。20.3 がリリースされると、これまでより依存関係のチェックが厳格になり、本番環境などでエラーが発生する可能性もあります。できるだけ、現在進行中のプロジェクトでも事前に試しておきましょう。

Python3 ドキュメント

ダウンロード

Python 3.8.6 2020-09-24

ドキュメント翻訳プロジェクト

Pythonドキュメント翻訳するプロジェクトは、 現在、Python 3.8 のドキュメントに対応するために活動中です。

非公式Pythonダウンロードリンク

Python.org本家のダウンロードページ はちょっと見にくいので、使いやすいダウンロード用ページを用意しました。

Python.jp Discordサーバ

Discord によるチャットサービスです。情報交換・質問・雑談などにご利用ください。

求人情報・ニュース・イベント告知など、Python関連情報の掲載をご希望の方は、 contact@python.jp までご連絡ください。情報掲載は全て無料です。
【Copyright © 2001-2020 python.jp】 【Privacy Policy】 python_japan