web-dev-qa-db-ja.com

Easy_install/pipでインストールされた全てのパッケージを見つけますか?

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

361

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

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

348
Paul Woolcock

Pipのバージョン1.3以降、pip listを使えるようになりました

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

236
keybits

誰かが疑問に思っているなら、あなたは 'pip show'コマンドを使うことができます。

pip show [options] <package>

これは与えられたパッケージのインストールディレクトリをリストします。

131
Daniel Sikes

Debianがpip installデフォルトターゲットに関して最近のUbuntuバージョンのように振る舞うなら、それは非常に簡単です:それは/usr/local/lib/aptデフォルトターゲット)の代わりに/usr/libにインストールします。 https://askubuntu.com/questions/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はArchの pac kage man agerがファイルの所有権をチェックする方法です。 No packageは、どのパッケージもファイルを所有していないときに返される戻り値の一部です:error: No package owns $FILENAME。巧妙な回避策:__init__.pyはディレクトリに関しては少し無知なので、pacman -Qoについて問い合わせています:(

他のディストリビューションのためにそれをするためには、pipがものをインストールする場所(ちょうどSudo pip install何か)、ファイルの所有権を問い合わせる方法(Debian/Ubuntuメソッドはdpkg -S)そして「no packageはそのパスを所有」 (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'
23
Capi Etheriel

皮切りに:

$ pip list

すべてのパッケージを一覧表示します。欲しいパッケージを見つけたら、次のコマンドを使います。

$ pip show <package-name>

フォルダを含めて、このパッケージに関する詳細が表示されます。あなたが既にパッケージ名を知っているなら、あなたは最初の部分を飛ばすことができます

Pip showの詳細については here を、pipリストの詳細については here をクリックしてください。

例:

$ 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: [email protected]
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel    
16
ng10

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

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

遅い理由は、pypiリポジトリ全体の内容をリストするためです。 ticketpip 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)
$
6
MarkHu

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
5
yegle

コンピュータに複数のバージョンの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が返されました。

4
ntk4

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

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

3
MJB

@Paul Woolcockの答えに追加して、

$ pip freeze > requirements.txt

アクティブな環境の現在の場所に 要件ファイル all installed packagesを作成します。

$ pip install -r requirements.txt

要件を別の環境にインストールする。

3

これが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:'
2
eddygeek

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

1
user3013438

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

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

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

@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です

0
mscheker

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

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

0
C S

少なくとも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
0
keypress