ユーザーがpipをどのように理解しているか

問題

pipのユーザーが、pipをツールとしてどのように理解しているか、つまり、pipとは何か、何をするのかを理解したいと考えています。

推奨事項にスキップ

調査

参加者のpipとパッケージ管理の仕組みに関するメンタルモデルを把握するために、以下の質問をしました。

  • pipとは何か、ご自身の言葉で説明してください。

  • pipがソフトウェアパッケージをインストールするときに何が起こるか、ご自身の言葉で説明してください。

  • Pythonパッケージの依存関係とは何か、ご自身の言葉で説明してください。

メンタルモデルについて話すとき、「深い」または「浅い」メンタルモデルについて話します。ユーザーが何かについて深いメンタルモデルを持っている場合、彼らは多くの詳細を含む深い理解を持っており、浅いモデルはその逆です。

これらのメンタルモデル(pipとパッケージ管理の現実に合致しているか)を評価するために、メンテナーと協力して、1. pipの動作とアクティビティ(18の側面)、2. パッケージの依存関係の側面(13)、そしてPythonパッケージの依存関係とは何か(10)を特定しました。そして、参加者の回答をそれらに対して採点しました。

結果

分析は、Pythonの経験が2年から10年の参加者に焦点を当てました。

参加者の90%以上は、pipとは何か、インストールプロセス中に何をするのか、そしてパッケージ管理全般について、限られた理解しか持っておらず、pipを深く理解していませんでした。しかし、参加者の理解度は低かったものの、pipとは何か、何をするのかについて事実上誤った理解をしていた参加者は4人だけでした。

参加者は、pipのインストールプロセス中に何が起こるかについて、わずかに深い理解を持っていました。最も詳細な回答には、特定された13の側面のうち7つが含まれていました。中央値は3でした。回答は、依存関係の解決、可能なパッケージ名の検索、アセットのダウンロード、パッケージのインストールに焦点を当てていました。

参加者のソフトウェアの依存関係についての理解は、再び浅いものでした。最も詳細な回答には、特定された8つの側面が含まれていました。中央値は3でした。回答は、ソフトウェアの依存関係がコードの再利用の結果であること、パッケージのバージョンを制約することで依存関係の競合の可能性が減少することに焦点を当てていました。

すべてのデータは このスプレッドシートで入手できます。

「pipとは何か、ご自身の言葉で説明してください」への回答

「pipは、Pythonパッケージを管理するための標準的なコマンドラインツールです。3つの主要な機能があります。(1)リポジトリ(通常はpypi)からPythonパッケージやその依存関係を取得してキャッシュすること、(2)Pythonパッケージと関連する依存関係をビルド(必要な場合)してPythonパスの「site-packages」の場所にインストールすること、そして(オプションで)(3)以前にインストールされたパッケージをアンインストールすることです。」 - 参加者242608909(科学者、地球大気科学科の教授、Pythonを7〜10年間使用)

「Pipは、Pythonのパッケージ管理システムです。Linuxのaptのようなもので、パブリックまたはプライベートリポジトリのパッケージを、pipコマンドを呼び出したPythonの現在のバージョンまたは環境にインストールするために使用できます。」 - 参加者240364032(7〜10年間Pythonを使用しているプロのソフトウェア開発者)

「pipを使用すると、環境内のPythonライブラリをインストール/更新/削除できます。pipはライブラリを管理します。環境を管理するには、何か他のものが必要になります。使用方法は、pip install package-name が最も簡単です。requirements.txtを使用して、ライブラリを追加していくたびにpip install -r requirements.txtを実行することをお勧めします。プロジェクトの最後にライブラリを忘れることを防ぎます:)」 - 参加者241178995(ソフトウェアエンジニアリングで働いているデータサイエンティスト)

「pythonのnpm/cargo/opam… Pythonライブラリとアプリケーション専用の pakket管理システムとエコシステム」 - 参加者240306262(独学のPythonクリエイティブアーティスト兼Web開発者、Pythonを5〜6年間使用)

「パッケージをダウンロードしてインストールし、依存関係を解決するためのツール。Linuxの世界ではyum、zypper、apt-get installと同じ領域にあると考えています。」 - 参加者240306204(科学研究とデータ分析にPythonを3〜4年間使用)

「Pipは、Pythonコミュニティでパッケージをインストールするために主に使用されるツールです。(「パッケージ」はPythonでは2つの異なる意味を持ちます。モジュールや他のパッケージを含むimportステートメントのターゲットにすることも、再利用のためにインストールできる定義されたインターフェースを持つコードのコレクションを意味することもあります。ここでは2番目のことを指しています。)Pipの実装は、Python環境にパッケージがインストールされていることを意味します。Python環境にソフトウェアをインストールしたい他のツール(例:conda)は、Pipの実装と一致する必要があります。」 - 参加者240313922(大学のコンピューターセキュリティ研究者、Pythonを7〜10年間使用)

「pipがソフトウェアパッケージをインストールするときに何が起こるか、ご自身の言葉で説明してください」への回答

「pipは、パッケージのリポジトリ(デフォルトではPyPIですが、変更可能)でパッケージ「tea」を検索すると思います。見つからない場合は、エラーが表示されます。存在する場合、パッケージに関する情報(どのような形式で存在するかなど)をダウンロードします。これは、wheelの場合もあれば、ビルドする必要があるパッケージの場合もあります。wheelの場合は、依存関係をチェックしてインストールし、次にwheelをインストールします(これが何を意味するのかわかりません。おそらく展開することでしょう)。wheelはPythonディストリビューションとベースOSに固有であるため、特定のプラットフォームでは使用できる場合と使用できない場合があります。ビルドする必要があるパッケージの場合は、pipはパッケージソースをダウンロード(またはリポジトリをクローン)し、setup.pyを実行します。setup.pyは、依存関係と他のパッケージをインストールしてから、パッケージ自体をインストールします。インストールする前に、必要なバージョンと他のパッケージで必要なバージョンの互換性をチェックすることがあるのを忘れていました。」 - 参加者240426799(科学研究者 - データ分析とコンピュータービジョンモデル、Pythonを5〜6年間使用)

「pipはパッケージソースを検索し(私の場合はデフォルトを使用するのでPypi)、次にパッケージソースに指定された名前とバージョン(指定されている場合)のパッケージを要求し、次にパッケージが利用可能な場合は、最も適切な形式(プラットフォームに応じて)でパッケージをダウンロードし、次にパッケージを解凍してインストーラーを実行します(おそらく含まれているsetup.pyファイルでsetuptoolsを呼び出します)。これにより、必要なインストール手順が実行されます。このインストールプロセスには依存関係(通常はsetup.pyで指定)が含まれている場合があり、依存関係に対して同じプロセスがトリガーされ、すべての依存関係がインストールされるまでこれが続きます(すべてが問題ない場合)。」 - 参加者240670292(産業システム制御のソフトウェア開発者、Pythonを5〜6年間使用)

「pipは、(オーバーライドされていないと仮定して)PyPI(デフォルトのパッケージインデックス)で、tea に一致するパッケージを確認します。OSの互換性、Pythonの互換性など、さまざまな指定子を使用して、システムと互換性のある tea の最新バージョンを見つけます。そのバージョン内で、最適なインストール一致を見つけます(例:システムでサポートされていて、 pip のバージョンが関連するバージョン対応[例:最近のmanylinux2010]を含んでいる場合、wheel)。ソース配布にフォールバックする可能性もあります)。関連する配布物をダウンロードした後、setuptools.setup() メソッドの install_requires で指定されているように、依存関係チェーンを再帰的にたどって同じ操作を実行します。関連するすべてのパッケージを取得した後、セットアップメソッドで指定されているようにインストールを実行します。一般に、これはPythonファイルを特定のシステムパスに抽出することを伴いますが、必要に応じてコンパイル、システムライブラリのバインディングなど、さまざまなレベルの複雑さが追加される場合があります。新しいリゾルバーは、すべてのルックアップを同時に実行することで(例:依存関係グラフを段階的にたどるのではなく、構築および解決することで)上記を変更すると考えていますが、詳細を学ぶためにPEPをまだ読んでいません。上記はsetuptoolsを念頭に置いて回答しました。最近、代替システムを許可するためにpyproject.tomlを最初にチェックする手順が追加されたと信じていますが、追加されたカスタマイズはエコシステムにとってマイナスであり、まだ試していません。Poetry/Pipenv/Pipfile.lock/Flit全体は、不必要な複雑さを追加しているように思えます。自分が何をしているかを知っているユーザーは、何年も前にパッケージのこれらの問題をすべて解決しており、porcelainによって生活が楽になると感じるユーザーは、ベニヤに関係なくUXの問題に遭遇する可能性があります。」 - 参加者 241463652 (Pythonを5~6年間使用)

「pipはpypi(少なくともオンラインではそこにあると思います)からteaパッケージにアクセスし、ファイルのコピーをローカルのvenvにダウンロードします」 - 参加者 243434435 (データ分析と機械学習、Pythonを1~2年間使用)

「pypiからパッケージの最新バージョンを検索する」 - 参加者 243897973 (Python 3を使用したソフトウェアテスト/自動テストの記述 - 4年間)

「ターゲットアーキテクチャ用のモジュールをダウンロード、解凍、場合によってはコンパイルする」 - 参加者 243428875 (Pythonを使用したシステム管理 7~10年間)

推奨事項

何を推奨すべきかは判断が難しいです。いくつかのアイデア

  • 質問: ユーザーがpipが行っているすべてのことについて知る必要があるのでしょうか?

  • より良いドキュメント

    • pipが実行する「機能ブロック」と、それが壊れた場合の対処方法を説明する

    • パッケージマネージャのトレーニングとヘルプをキュレーションする

    • pipの出力を改善して、異なるpip機能ブロックを公開する