easy_installまたはpipでインストールされたすべてのPython PyPIパッケージを見つける方法はありますか?つまり、配布ツール(この場合はDebianのapt-get)でインストールされた、またはインストールされたものをすべて除外します。
easy_installまたはpipでインストールされたすべてのPython PyPIパッケージを見つける方法はありますか?つまり、配布ツール(この場合はDebianのapt-get)でインストールされた、またはインストールされたものをすべて除外します。
回答:
pip freeze
インストールされているパッケージとそのバージョンのリストを出力します。また、これらのパッケージをファイルに書き込んで、後で新しい環境をセットアップするために使用することもできます。
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
pip list
すべてをリストします。によってインストールされなかったパッケージは除外されませんpip
。
pip freeze
、スクリプトでは信頼できることがわかりましたがpip list
、パイプで使用すると予期しないエラーが発生します。
バージョン1.3のpipの時点で使用できるようになりました pip list
古いパッケージを表示する機能など、いくつかの便利なオプションがあります。ここにドキュメントがあります:https : //pip.pypa.io/en/latest/reference/pip_list/
pip freeze
pip list --user
ユーザーがインストールしたパッケージのみを表示し、システム全体のパッケージを除外します。
pip install
デフォルトのターゲットに関してDebianが最近のUbuntuバージョンのように動作する場合、それ/usr/local/lib/
は/usr/lib
(apt
デフォルトのターゲット)ではなくにインストールされます。/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'
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/"
皮切りに:
$ 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
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
以下は少し遅いです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)
$
@Paul Woolcockの答えに加えて、
pip freeze > requirements.txt
現在の場所でアクティブな環境にインストールされているバージョン番号とともに、すべてのインストール済みパッケージを含む要件ファイルを作成します。ランニング
pip install -r requirements.txt
要件ファイルで指定されたパッケージをインストールします。
新しいバージョンのpipには、OPが必要とすることを、pip list -l
またはpip freeze -l
(--list
)を介して実行する機能があります。
Debianでは(少なくとも)manページではこれが明確にされていません。私はそれを(機能が存在しなければならないという前提の下で)でのみ発見しましたpip list --help
。
この機能はドキュメントにも既存の回答にも明らかではないことを示唆する最近のコメントがあります(いくつかのヒントがあります)ので、投稿するべきだと思いました。私はコメントとしてそうしたいと思いましたが、評判ポイントがありません。
pip freeze --local
8年間持っていたことがわかりました。pip list --local
も利用可能です...しかし、OPの質問は仮想環境(--local
サポートする)についてではなく、パッケージからディストリビューションパッケージを区別することについてsudo pip install
です。
コンピュータに複数のバージョンの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
。
@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
すべてのファイル/フォルダー名を取得しsite-packages/
(dist-packages/
存在する場合)、パッケージマネージャーを使用して、パッケージを介してインストールされたものを削除します。
pip freezeは、pip / easy_installでなくても、インストールされているすべてのパッケージをリストします。CentOs / Redhatでは、rpmを介してインストールされたパッケージが見つかります。
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
削除を確認する必要がないようにしてください。
少なくとも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