422

easy_installまたはpipでインストールされたすべてのPythonPyPIパッケージを見つける方法はありますか?つまり、配布ツール(この場合はDebianのapt-get)でインストールされた/インストールされたすべてのものを除外します。

4

18 に答える 18

401

pip freezeインストールされているパッケージとそのバージョンのリストが出力されます。また、これらのパッケージをファイルに書き込んで、後で新しい環境をセットアップするために使用することもできます。

https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze

于 2011-07-06T18:02:35.300 に答える
268

pipのバージョン1.3以降、使用できるようになりましたpip list

古いパッケージを表示する機能など、いくつかの便利なオプションがあります。ドキュメントは次のとおりです: https://pip.pypa.io/en/latest/reference/pip_list/

于 2013-05-26T12:16:59.963 に答える
139

誰かが疑問に思っている場合は、「pip show」コマンドを使用できます。

pip show [options] <package>

これにより、指定されたパッケージのインストール ディレクトリが一覧表示されます。

于 2014-10-24T01:03:49.577 に答える
26

Debianがpip installデフォルトターゲットに関して最近のUbuntuバージョンのように動作する場合、それは非常に簡単です。 (デフォルトターゲット)/usr/local/lib/の代わりにインストールします。https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747を確認してください/usr/libapt

私はArchLinuxユーザーであり、pipを試してみると、これと同じ問題が発生しました。これが私がArchでそれを解決した方法です。

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'

ここで重要なのは/usr/lib/python2.7/site-packages、pipがインストールするディレクトリYMMVです。Archpacman -Qopackagemanagerファイルの所有権をチェックする方法です。No packageは、ファイルを所有しているパッケージがない場合に返される戻り値の一部ですerror: No package owns $FILENAME。トリッキーな回避策:ディレクトリに関しては少し無知な__init__.pyので、私は質問しています:(pacman -Qo

他のディストリビューションでそれを行うには、pipインストール場所(sudo pip install何か)、ファイルの所有権を照会する方法(Debian / Ubuntuメソッドはdpkg -S)、および「パッケージがそのパスを所有していない」リターン(Debian / Ubuntuはno path found matching pattern)です。Debian / Ubuntuユーザー、注意してください:dpkg -Sシンボリックリンクを与えると失敗します。最初にを使用して解決してrealpathください。このような:

find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'

Fedoraユーザーは試すことができます(@eddygeekに感謝):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
于 2013-02-22T12:57:37.360 に答える
8

新しいバージョンの pip には、pip list -lまたはpip freeze -l( --list) を介して OP が必要とすることを行う機能があります。
Debian (少なくとも) では、man ページはこれを明確にしておらず、機能が存在する必要があるという仮定の下で、pip list --help.

この機能がドキュメントまたは既存の回答のいずれかで明らかではないことを示唆する最近のコメントがあるため (いくつかのヒントが示唆されています)、投稿する必要があると考えました。コメントとしてそうした方がよかったのですが、評判ポイントがありません。

于 2017-03-25T03:40:54.520 に答える
6

以下は少し遅いですが、pip認識しているパッケージの適切にフォーマットされたリストを提供します。つまり、それらのすべてが pip によって「」インストールされたわけではありませんが、すべて pip によってアップグレードできるはずです。

$ pip search . | egrep -B1 'INSTALLED|LATEST'

遅い理由は、pypi リポジトリ全体の内容を一覧表示するためです。同様の機能を提供することを提案するチケットを提出しましたpip listが、より効率的です。

出力例: (検索をすべての「.」ではなくサブセットに制限しました。)

$ pip search selenium | egrep -B1 'INSTALLED|LATEST'

selenium                  - Python bindings for Selenium
  INSTALLED: 2.24.0
  LATEST:    2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
  INSTALLED: 1.0.1 (latest)
$
于 2012-10-24T22:05:49.910 に答える
6

@Paul Woolcockの答えに追加すると、

pip freeze > requirements.txt

は、現在の場所のアクティブな環境にインストールされているすべてのパッケージとインストールされているバージョン番号を含む要件ファイルを作成ます。ランニング

pip install -r requirements.txt

要件ファイルで指定されたパッケージをインストールします。

于 2017-01-03T06:07:19.333 に答える
4

コンピューターに複数のバージョンの Python がインストールされている場合、それぞれにいくつかのバージョンの pip が関連付けられている可能性があることに注意してください。

関連付けによっては、使用する pip コマンドに非常に注意する必要がある場合があります。

pip3 list 

Python3.4を実行している私のために働きました。単に使用pip listするとエラーが返されましたThe program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip

于 2016-09-24T21:41:07.217 に答える
3

@almenon が指摘したように、これは機能しなくなり、コードでパッケージ情報を取得する方法としてサポートされていません。次の例では例外が発生します。

import pip
installed_packages = dict([(package.project_name, package.version) 
                           for package in pip.get_installed_distributions()])

これを実現するために、インポートできますpkg_resources。次に例を示します。

import pkg_resources
installed_packages = dict([(package.project_name, package.version)
                           for package in pkg_resources.working_set])

私は〜に乗っていますv3.6.5

于 2019-04-12T15:59:09.237 に答える
2

これは、fedora またはその他の rpm ディストリビューションのワンライナーです (@barraponto のヒントに基づく):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

これを前のコマンドに追加して、よりクリーンな出力を取得します。

 | sed -r 's:.*/(\w+)/__.*:\1:'
于 2014-03-24T15:14:34.793 に答える
1

すべてのファイル/フォルダー名を取得しsite-packages/(dist-packages/存在する場合)、パッケージ マネージャーを使用して、パッケージ経由でインストールされたものを取り除きます。

于 2011-07-06T18:02:55.947 に答える
1

pip freeze は、pip/easy_install によるものでなくても、インストールされているすべてのパッケージを一覧表示します。CentOs/Redhat では、rpm を介してインストールされたパッケージが見つかります。

于 2013-11-20T14:10:24.867 に答える