質問: 手元のプロジェクトでいろんなツールをインストールしていった結果、時折、次のようなエラーメッセージが発生するようになりました。 ``` The `infocmp' command exists in these Python versions: anaconda3-5.1.0 ``` これは、自分の理解ですと、 `infocmp` のプログラムファイルが、 `anaconda3-5.1.0` の python 上ではインストールされているけれども、今デフォルトで使っている python のバージョン(`3.6.5`)にはインストールされていないがために発生していると思っています。 これを解消するために、この `infocmp` をインストールしたいのですが、このコマンドが何のパッケージからインストールされたものなのか調べる方法がわからずにいます。 ### 質問 * pip によってインストールされたコマンドが、どのパッケージ由来のものであるか、調べる方法はありますでしょうか。 ### 環境 pyenv の上で動かしており、今現在は `3.6.5` のバージョンをデフォルトで使いたいと思っています。
回答: 力技ですが、そのコマンドがインストールされている環境に移ったあと、インストール済パッケージ一覧を `pip list` で出力し、それぞれのパッケージについての情報を `pip show` から取得し、その中からバイナリの名前を検索することで、どのパッケージからインストールされたものなのか逆引きできそうです。 たとえば Unix 系環境なら JRD さんのこの回答で示されているように、`pip list` の結果を `head` / `tail` で整形した後 `cut` でパッケージ名だけ取り出し、`xargs` でそれぞれを `pip show` に渡し、結果を `grep` するというやり方が使えます。ただし古い pip では `pip list` の出力が変わるので適宜調整する必要があります。まず `pip list` の結果を確認してください。 ``` pip list | tail +3 | cut -d" " -f1 | xargs pip show -f | grep "ファイル名" ``` **補足**: `pip show` で表示される情報のうち、Files にはインストールされるファイルの情報が含まれています。これは PEP 376 で定められている RECORD の情報 か、egg-info の installed-files.txt の情報です。