pipの機能の優先順位付け

問題

pip開発チームは小規模であり、issue tracker を介して報告された問題に取り組むための時間とエネルギーが限られています。また、チームが対応する必要のある大量の課題(2020年11月時点で782件)があります。チームが最も影響を与える可能性のあることに基づいて作業の優先順位を付けるためには、ユーザーがpipに何を求めているのかをより良く理解する必要があります。

推奨事項へスキップ

調査

この質問に答えるために、以下のシナリオで「機能を購入する」アンケートを作成しました。

「機能を購入する」ゲームに参加して、あなたにとって何が重要かを理解するのにご協力ください。

pipを再設計するために、200ドルの予算が割り当てられています。

200ドルの予算で、最も維持したい機能を「購入」してください。

200ドル全額を費やす必要はありませんが、予算を超過しないでください!

ユーザーに、最初の100ドルを pip install に関連する機能に費やし、残りの100ドルを他のpip機能に費やすように求めました。また、ユーザーは新しい機能を提案するために追加で10ドルを付与しました。

survey question where users are asked to buy features for pip install

survey question where users are asked to buy features other than pip install

survey question where users are asked to spend an additional ten dollars

結果

1076件の回答があり、そのうち1070件が有効でした。最も人気のある機能には、pipの中核となる機能が含まれていました。

  • インストールされた依存関係のリストから環境を再作成する。

  • 仮想制御システム、ファイル、またはローカルディレクトリからパッケージをインストール、アンインストール、およびアップグレードする。

  • 破損した依存関係または競合する依存関係について警告する。

pip install

pip installに関連する上位10の機能は次のとおりです。

pip install results

  1. パッケージのインストールとアンインストール

  2. パッケージを最新バージョンにアップグレードする

  3. 破損した依存関係について警告する

  4. バージョン管理システム(例:Git、Mercurialなど)からパッケージをインストールする

  5. ファイルで指定されたパッケージをインストールする

  6. ローカルディレクトリからパッケージをインストールする

  7. ハッシュに対してダウンロードしたパッケージを検証する

  8. 代替パッケージインデックス(またはインデックス)からパッケージをインストールする(デフォルトはPyPIのみ)

  9. ホイールからパッケージをインストールする(コードをコンパイルする必要はありません)

  10. インストールされたパッケージをコンピューター上のどこに配置するかを制御する

その他のpip機能

他のpip機能に関連する上位10の機能は次のとおりです。

other pip functionality results

  1. 環境を再作成するために使用できるインストール済みパッケージのリストを生成する

  2. インストール済みのパッケージに依存関係の競合がないことを確認する

  3. ユーザー入力を必要とせずにpipを実行する(例:CIで)

  4. インストールされているすべてのパッケージに関する情報を表示する

  5. インストールされている単一のパッケージに関する情報を表示する

  6. pypi.orgでパッケージを検索する

  7. pipに関する情報(バージョン情報、ヘルプ情報など)を表示する

  8. パッケージをダウンロードし、ホイールをビルドして、オフラインで使用するためにディレクトリに保存する

  9. pipのデフォルト構成を管理する(例:構成ファイルを使用)

  10. pipの出力をカスタマイズする(例:詳細度を下げるまたは上げる、色を抑制する、出力をログに送信する)

結果は、ユーザーのPython経験の量によって異なりました。

ユーザーが経験レベルに基づいて機能を選択する可能性を確認する

ハッシュに対してダウンロードしたパッケージを検証する

screenshot of verify downloaded packages against hashes

破損した依存関係について警告する

Screenshot of Warn about broken dependencies

パッケージを最新バージョンにアップグレードする

Screenshot of Upgrade packages to the latest version

代替パッケージインデックス(またはインデックス)からパッケージをインストールする

Screenshot of Install packages from an alternative package index, or indexes

ファイルで指定されたパッケージをインストールする

Screenshot of Install packages as specified in a file

パッケージのインストールとアンインストール

Screenshot of Install and uninstall packages

バージョン管理システムからパッケージをインストールする

Screenshot of Install packages from a version control system

ホイールからパッケージをインストールする

Screenshot of Install a package from wheels

ローカルディレクトリからパッケージをインストールする

Screenshot of Install apackage from a local directory

インストールされたパッケージをコンピューター上のどこに配置するかを制御する

Screenshot of Control where you want your installed package to live on your computer

推奨事項

環境の再作成

環境の再作成は、requirements.txt 機能の一部としてpipにすでに含まれています。ただし、その人気と需要から、pipはこの機能のサポートを改善する必要があると推奨します。

  • pip CLIで直接、環境の再作成ユーザー出力とヘルプガイドを改善する。

  • pipドキュメントとユーザーガイドを改善して、pipの中核機能として環境の再作成を際立たせる。

  • 仮想環境をpipに「組み込まれた」コア機能と見なすことにより、環境の再作成プロセス自体を改善する。

インストールされた依存関係のリストから環境を再作成することは、全体として最も評価の高い機能要求であり、各ユーザーグループでも同様でした。ただし、経験が6か月未満のユーザーと16〜19年の経験を持つユーザー(2番目に評価が高かった)は除きます。

フリーテキストで機能要求を入力するように求められた場合、ユーザーは「組み込み」、「仮想」、「自動」、「分離」という単語を「環境」という単語と組み合わせて使用しました。これは、ユーザーがpipに高度なインテリジェンスと使いやすさで環境を再作成することを期待していることを示唆しています。

選択された直接引用

virtualenvにいない場合にpipに警告させる

コマンドライン引数を使用した自動仮想環境作成

仮想環境を排除します。他の人がそうしているように、./python_modules/を使用してください

pipがminiconaと同様にpythonバージョンと仮想環境を管理するのを見たいです

これに200ドルすべてを使います。アプリケーションをインストールするときに、その依存関係をシステムパッケージストアにインストールしないように、pipenvまたはvenvをpipに統合します。また、アプリケーションパッケージの依存関係バージョンを固定できるようにします(pip-compileが行うように)

依存関係の管理

pipチームは、依存関係(競合など)に関連する警告およびエラーメッセージを、解決のための実用的なヒントとともに改善することを推奨します。これは、以下を含む複数のタイムスケールで展開できます。

  • エラーメッセージと並行して、この問題を解決する方法に関するヒントをユーザーに提供する。

  • ドキュメントにおいて、仮想環境の作成を明確に含めること。 pip install の衝突エラーが発生した場合、そして可能であれば pip の組み込み機能として。

  • 依存関係解決機能のアップグレード(進行中)。

衝突するパッケージやアップグレードに関する警告を含め、依存関係の管理が pip ユーザーにとって重要であることは明らかです。仮想環境を通じてユーザーが依存関係をより適切に管理できるようにすることで、pip はユーザーが遭遇する全体的な警告や衝突メッセージを減らすことができます。