easy_install / pipでインストールされたすべてのパッケージを検索しますか?


400

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


回答:


381

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

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


89
バージョン1.3以降、「pipリスト」が追加されました。以下の私の回答とここのドキュメントを参照してください:pip-installer.org/en/latest/usage.html#pip-list
keybits

7
さまざまな形式のリストを作成してフリーズします(執筆時点)。フリーズ出力を使用して環境を再作成できます:docs.python-guide.org/en/latest/dev/virtualenvs/#other-notes
Tom Saleeba

18
pip freezepip listすべてをリストします。によってインストールされなかったパッケージは除外されませんpip
エリアド、

またpip freeze、スクリプトでは信頼できることがわかりましたがpip list、パイプで使用すると予期しないエラーが発生します。
デールアンダーソン

2
(?)新しいpip list -lまたはpip list --local最良の答えで、見stackoverflow.com/a/43012269/491884 @MJBによって
jmuc

255

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

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


3
Gentooでは、pip以外の方法でインストールされたものも含めて、すべてのパッケージがリストされます。これは、質問で要求されているように、他のシステムにインストールされている非pipモジュールを本当に除外しますか?
jlh 2017

これは若干異なりますpip freeze
sg

1
pip list --userユーザーがインストールしたパッケージのみを表示し、システム全体のパッケージを除外します。
Jacob Hume

138

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

pip show [options] <package>

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


24

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

私は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です。pacman -QoどのようにアーチのPACのの男のファイルの所有権のためのエージャーチェック。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'

2
+1 Archのワンライナーに感謝します。まさにそれが私が探していたものです。ちなみに、奇妙な事実:私のArchインストールはイタリア語にローカライズされていますが、「パッケージなし」をgrepしたにもかかわらず、grepは「Nessun pacchetto」(「パッケージなし」のイタリア語)を示す行を正しく「grepped」しました。どうして?
Nadir Sampaoli 2013

1
@barraponto @NadirSampaoli grepは私の場合何もしません。grepはstdoutでgrepを試みdpkgますが、エラーをstderrに書き込むため、リダイレクトを追加する必要があり2>&1ます。また、国際的な出力の場合LANG= はの前に追加しxargs dpkg -sます。またsed、パスのパッケージ名のみを保持するための素晴らしいツールです。私はで終わるので:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
デヴィッド・自由奔放に生きる

1
こんにちは、私は誤ってこれに反対票を投じましたが、それを認識しただけで、私の投票はロックされました。誰かが反対票を投じて私の反対投票を無効にすることができますか?ありがとう
ジョナサン

22

皮切りに:

$ pip list

すべてのパッケージを一覧表示します。必要なパッケージが見つかったら、次を使用します。

$ pip show <package-name>

これにより、フォルダーなど、このパッケージの詳細が表示されます。パッケージ名がわかっている場合は、最初の部分をスキップできます

クリックしてここにピップショーの詳細については、とここピップリストの詳細については。

例:

$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel    

ベストアンサーIMHO。パッケージ名を知っていれば、本当にシンプルで高速です。ピップリストは不要であり、フリーズには長い時間がかかる可能性があり、気にならないものを除外する必要があります。シンプル:pip show my_packge
ChuckZ

8

pip.get_installed_distributions() インストールされたパッケージのリストを表示します

import pip
from os.path import join

for package in pip.get_installed_distributions():
    print(package.location) # you can exclude packages that's in /usr/XXX
    print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package

2
これはもう機能しません。github.com/pypa/pip/issues/5243を参照してください 代わりに次を使用してください:import pkg_resources [print(d.project_name)for d in pkg_resources.working_set]
Almenon

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)
$

自分でチケットを提出してみませんか?
ラジャール2013

1
どうやら次のバージョンのpipには新しいリストコマンドがあります:pip-installer.org/en/latest/usage.html#pip-list
MarkHu

5

@Paul Woolcockの答えに加えて、

pip freeze > requirements.txt

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

pip install -r requirements.txt

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


5

新しいバージョンのpipには、OPが必要とすることを、pip list -lまたはpip freeze -l--list)を介して実行する機能があります。
Debianでは(少なくとも)manページではこれが明確にされていません。私はそれを(機能が存在しなければならないという前提の下で)でのみ発見しましたpip list --help

この機能はドキュメントにも既存の回答にも明らかではないことを示唆する最近のコメントがあります(いくつかのヒントがあります)ので、投稿するべきだと思いました。私はコメントとしてそうしたいと思いましたが、評判ポイントがありません。


1
私たちがpip freeze --local8年間持っていたことがわかりました。pip list --localも利用可能です...しかし、OPの質問は仮想環境(--localサポートする)についてではなく、パッケージからディストリビューションパッケージを区別することについてsudo pip installです。
Capi Etheriel 2017

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


pipはpython2.7用、pip3はpython3.x用
mjp

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


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:'

1

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


1

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


1

Anaconda pythonディストリビューションを使用している場合は、conda list次のコマンドを使用して、どの方法で何がインストールされたかを確認できます。

user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name                    Version                   Build  Channel
_ipyw_jlab_nb_ext_conf    0.1.0            py36h2fc01ae_0
alabaster                 0.7.10           py36h174008c_0
amqp                      2.2.2                     <pip>
anaconda                  5.1.0                    py36_2
anaconda-client           1.6.9                    py36_0

によってインストールされたエントリpip(おそらくpipそれ自体を含む)を取得するには:

user@pc:~ $ conda list | grep \<pip
amqp                      2.2.2                     <pip>
astroid                   1.6.2                     <pip>
billiard                  3.5.0.3                   <pip>
blinker                   1.4                       <pip>
ez-setup                  0.9                       <pip>
feedgenerator             1.9                       <pip>

もちろん、最初の列だけを選択することもできます(pip必要な場合を除いて)。

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp        
astroid
billiard
blinker
ez-setup
feedgenerator 

最後に、これらの値を取得し、以下を使用してそれらのすべてをpipアンインストールできます。

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y

-yフラグの使用に注意して、pip uninstall削除を確認する必要がないようにしてください。


1

pipをインストールしていない人のために、私はgithubにこの簡単なスクリプトを見つけました(Python 2.7.13で動作します):

import pkg_resources
distros = pkg_resources.AvailableDistributions()
for key in distros:
  print distros[key]


0

少なくともUbuntuでは(おそらく他の人でも)これが機能します(このスレッドの以前の投稿に触発されています):

printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.