50718


手元のプロジェクトでいろんなツールをインストールしていった結果、時折、次のようなエラーメッセージが発生するようになりました。

[code]

    The `infocmp' command exists in these Python versions:
      anaconda3-5.1.0
    
[/code]

これは、自分の理解ですと、 `infocmp` のプログラムファイルが、 `anaconda3-5.1.0` の python
上ではインストールされているけれども、今デフォルトで使っている python
のバージョン(`3.6.5`)にはインストールされていないがために発生していると思っています。

これを解消するために、この `infocmp`
をインストールしたいのですが、このコマンドが何のパッケージからインストールされたものなのか調べる方法がわからずにいます。

### 質問

  * pip によってインストールされたコマンドが、どのパッケージ由来のものであるか、調べる方法はありますでしょうか。

### 環境

pyenv の上で動かしており、今現在は `3.6.5` のバージョンをデフォルトで使いたいと思っています。


CC BY-SA 4.0
2018-11-28T06:00:41.637
50705
2018-11-29T01:21:59.273
754
question
python pip pyenv
pip において、特定のコマンドが何のパッケージでインストールされたのかを知りたい


力技ですが、そのコマンドがインストールされている環境に移ったあと、インストール済パッケージ一覧を `pip list`
で出力し、それぞれのパッケージについての情報を `pip show`
から取得し、その中からバイナリの名前を検索することで、どのパッケージからインストールされたものなのか逆引きできそうです。

たとえば Unix 系環境なら [JRD](https://stackoverflow.com/users/2658162/jrd)
さんの[この回答](https://stackoverflow.com/a/33484229/5989200)で示されているように、`pip list`
の結果を `head` / `tail` で整形した後 `cut` でパッケージ名だけ取り出し、`xargs` でそれぞれを `pip show`
に渡し、結果を `grep` するというやり方が使えます。ただし古い pip では `pip list` の出力が変わるので適宜調整する必要があります。まず
`pip list` の結果を確認してください。

[code]

    pip list | tail +3 | cut -d" " -f1 | xargs pip show -f | grep "ファイル名"
    
[/code]

* * *

**補足** : `pip show` で表示される情報のうち、Files にはインストールされるファイルの情報が含まれています。これは [PEP 376
で定められている RECORD の情報](https://www.python.org/dev/peps/pep-0376/#record) か、egg-
info の installed-files.txt
の情報[です](https://github.com/pypa/pip/blob/b2b62958e6d22d47fc29141375b7515a5e915995/src/pip/_internal/commands/show.py#L52)。


CC BY-SA 4.0
2018-11-28T09:05:56.903
50714
2018-11-28T09:22:36.240
2018-11-28T09:22:36.240
19110
19110
50705
answer


`infocomp`は、Minicondaの初期状態においても`bin`ディレクトリにインストールされているシェルコマンドです。恐らく`conda`等のAnacondaのライブラリーに必要な依存ライブラリーとしてインストールされているものと思われます。

したがって、pip によってインストールされたものでないため、`pip show`で表示させても出てこないと思われます。

「手元のプロジェクトでいろんなツールをインストールしていった」とのことですが、Anacondaとpipでは、依存ライブラリーが必ずしも一致している訳ではありません。その上、pipでインストールする時にははAnacondaの依存関係をチェックしません。そのため、Anacondaにpipでツールをインストールしていくとパッケージの依存関係が壊れることはしばしばあります。

`infocomp`が消えたというメッセージが出るということは、依存関係が壊れてきているということだと思います、pyenv+anacondaという不具合の出やすい環境構築の方法を見直した方がいいと思います。


CC BY-SA 4.0
2018-11-28T10:39:43.890
50718
2018-11-29T01:21:59.273
2018-11-29T01:21:59.273
15171
15171
50705
answer