pipによってインストールされたすべてのパッケージを削除する最も簡単な方法は何ですか?


616

virtualenvの1つを修正しようとしています-インストールされているすべてのライブラリを、本番環境に一致するライブラリにリセットしたいと思います。

これをpipですばやく簡単に行う方法はありますか?


10
@patelshahrukh Pythonをアンインストールしても、pipパッケージは削除されません。それを避けるようにしてください、それは両方ともあなたが思っているように動作しない可能性が高いため、また、Pythonを再インストールする方法によっては、マシンを不安定な状態のままにして、修正するのがより困難になる可能性があるためです。
blueberryfields

これは、開発モードまたは編集可能モードでインストールされたパッケージに役立つ場合があります。stackoverflow.com
チャーリーパーカー

回答:


924

私はこのスニペットを代替ソリューションとして見つけました。これは、virtualenvを再作成するよりも、ライブラリを適切に削除します。

pip freeze | xargs pip uninstall -y

VCS経由でインストールされたパッケージがある場合、それらの行を除外し、手動でパッケージを削除する必要があります(以下のコメントから昇格):

pip freeze | grep -v "^-e" | xargs pip uninstall -y

4
私はこれが良い解決策だと思っています。純粋に仮想環境が完全に削除されるわけではないからpostactivateです。たとえば、残るものに変更を加えた可能性があります。
niceguydave

5
これを実行した後、setuptoolsパッケージが削除されていることに気付きました。私はここの指示に従って問題を解決:stackoverflow.com/questions/7446187/...
ダン・

1
@ gerty3000はい、これは(質問のとおり)virtual-envにインストールされているすべてのパッケージを削除します。あなたの環境では、多分setuptoolsは代わりにグローバルな場所にインストールしたほうがいいでしょう?
blueberryfields

7
を使用pip freeze --exclude-editable | xargs pip uninstall -yして、grepパターンを使用せずにVCSパッケージを無視することもできます
Connor Brinton

2
また、編集可能なパッケージをアンインストールするには、stackoverflow.com / questions / 17346619
Dan Oak

318

これは、すべてのMac、Windows、およびLinuxシステムで機能します。requirements.txtファイル内のすべてのpipパッケージのリストを取得するには(注:これは、requirements.txtが存在する場合は上書きされ、それ以外の場合は新しいものを作成します。また、古いrequirements.txtを置き換えたくない場合は、別のファイル名を指定します次のすべてのコマンドを配置しますrequirements.txt)。

pip freeze > requirements.txt

一つずつ削除していきます

pip uninstall -r requirements.txt

一度にすべて削除したい場合

pip uninstall -r requirements.txt -y

requirements.txtファイルを含む既存のプロジェクトで作業していて、環境が分岐している場合requirements.txtは、上記の例をに置き換えてくださいtoberemoved.txt。次に、上記の手順requirements.txtを完了したら、を使用して、クリーンな環境を更新できます。

そして、ファイルを作成せずに単一のコマンドの場合(@joebが示唆したとおり)。

pip uninstall -y -r <(pip freeze)

11
彼らが知らなかった場合に備えて、requirements.txtファイルを強制的に上書きしていることは、おそらく言及する価値があります。:)
Dave Gregory

4
さらに、すべてのパッケージを削除したい場合は、「-y」を追加すると削除されます。例:pip uninstall -r requirements.txt -y
David Metcalfe 2017

58
あなたはpip uninstall -y -r <(pip freeze)一度にすべてを行うために使用することができます。
ジョーブ2017年

1
@joebはい、そうすることもできます。
Harshad Kavathiya 2017年

1
@HarshadKavathiya「current.txt」のように、pipフリーズを保存するために別のファイルを使用できるため、requirements.txtはそのままの歓声を維持できます
NikosKeyz 2018年

118

これは最新のもので動作します。それはそれを行うための最短かつ宣言的な方法だと思います。

virtualenv --clear MYENV

しかし、通常は不変ルールなのでvirtualenvを削除して再作成するだけです!


7
これは実行と実質的に同じwipeenvですか?virtualenvwrapper.readthedocs.org/en/latest/...
テイラーEdmiston

実際には-(私が遭遇したものから)それwipeenvはようですが、環境内でエラーがスローされ、pip install -e開発ビルドのコンテキストで使用されても何も削除されvirtualenv --clear MYENVませんが、使用しようとしてもエラーはスローされず、以前に環境にインストールした可能性のあるパッケージ。少なくとも、これはOSXの場合です。詳細については、bitbucket.org / dhellmann / virtualenvwrapper / issues / 211 /…を参照してください。
mpacer

2
wipeenvvirtualenvwrapperが提供するエイリアスなので、誰もが持っているわけではありません。
Jonathan Hartley

2
まあ、これはちょっと汚いトリックですが、魔法のように機能します。私は誰もがpip uninstall -r requirements.txt -yを使用することを望みます。それは素晴らしいクリーンアップになります。
Muema

84

これはスレッドで最もエレガントなソリューションの1つであるため、コメントセクションからこの回答を引き上げたいと思いました。この回答の全額は@joebに送られます。

pip uninstall -y -r <(pip freeze)

これは、上記の回答の多くが処理できないvirtualenvのコンテキストの外でユーザーパッケージフォルダーをクリアするユースケースで私にとってはうまくいきました。

編集:Makefileでこのコマンドを機能させる方法を知っている人はいますか?

ボーナス:bashエイリアス

便宜上、これをbashプロファイルに追加します。

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

次に実行します:

pipuninstallall

pipenvの代替

pipenvを使用している場合は、次のように実行できます。

pipenv uninstall --all

8
簡単に#1になるはずです
マーク

私はそれが好きですが、nullの場合は機能しません(残念ながらpip freeze、パッケージがインストールされていない場合は何も出力されず、pip uninstall不満が出ます)。
エリックG

うーん良いキャッチ。おそらく、pipフリーズ出力が空でないかどうかをチェックするbash関数にラップできます。コマンドを素敵な短いワンライナーに保ちながら、それを達成するための素晴らしい方法を私は見ていません。
テイラーエドミストン

1
makeはデフォルトでshを使用しますが、置換構文<(...)はバシズムです。したがって、bash -c "..."を使用するか、またはapip freeze | pip uninstall -r /dev/stdin
Caesar

Azureノートブックでは動作しません:ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
SeaDude

54

他に使用する、pip listまたは他にpip freeze 含める必要--localがあるその他の回答は、共通の名前空間にあるパッケージもアンインストールします。

だからここに私が定期的に使用するスニペットがあります

 pip freeze --local | xargs pip uninstall -y

参照: pip freeze --help


良い答え...私に働きました
igorkf

これは、次のエラーを生成したパッケージに到達するまで機能しました:ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.。その後、これ以上モジュールをアンインストールできませんでした。
SeaDude

39

方法1(pip freeze

pip freeze | xargs pip uninstall -y

方法2(pip list

pip list | awk '{print $1}' | xargs pip uninstall -y

方法3(を使用virtualenv

virtualenv --clear MYENV

2
sudoは必須ではなく、慎重に検討せずに使用すると、グローバルマシンのセットアップに影響を与えるため、おそらく危険です。例えばこの回答を参照してください。stackoverflow.com/questions/15028648/...は
blueberryfields

6
方法2(pip list)は、pipが誤って自分自身をアンインストールするまで適切に機能します-_-
Justin

20

私は次のようにしてそれを管理しました:

現在インストールされているパッケージリストを使用して、reqs.txtという要件ファイルを作成します。

pip freeze > reqs.txt

次に、reqs.txtからすべてのパッケージをアンインストールします

pip uninstall \
   -y # remove the package with prompting for confirmation
   -r reqs.txt

私はこの方法が好きです。間違いを犯した場合に備えて、pip要件ファイルが常に用意されているからです。繰り返しも可能です。


シンプルでエレガント、魅力のような作品
Satyaaditya

19

最も速い方法は、virtualenvを完全に作り直すことです。私はあなたが生産に一致するrequirements.txtファイルを持っていると仮定しています、そうでない場合:

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt

2
これは、ローカルの.egg-infoファイルを作成して、残りのインストール/アンインストールプロセスを妨害する編集可能なインストール(基本的には、setuptools開発モードインストール)があった場合でも処理できますか?それはファイルのセットなので、それらの存在を処理する方法を認識していないようで、何もアンインストールするのではなく、MYENVの下のローカルディレクトリ構造を次のように完全にします。 MYENV / bin / pythonに実行可能ファイルを作成する> setuptools、pip、wheel ... doneをインストールします。`しかし、MYENVは環境をリセットしていません!
mpacer

16

Windowsでは、path正しく構成されていれば、以下を使用できます。

pip freeze > unins && pip uninstall -y -r unins && del unins

Unixライクなシステムの場合も同様です。

pip freeze > unins && pip uninstall -y -r unins && rm unins

「ファイルが見つかりません」などの問題が発生する可能性があるため、これは完全に確実ではないという警告だけですが、それでも一部のケースでは機能する場合があります

編集:明確にuninsするために:このコマンドの実行時にデータが書き込まれる任意のファイルです:pip freeze > unins

次に作成されたファイルを使用して、暗黙の同意/事前承認により前述のパッケージをアンインストールします。 pip uninstall -y -r unins

ファイルは完了すると最終的に削除されます。



14

まず、すべてのパッケージを requirements.txt

pip freeze > requirements.txt

次にすべて削除します

pip uninstall -y -r requirements.txt 

9

私が知っている古い質問ですが、私はそれを偶然見つけましたので、将来の参考のためにこれを行うことができます:

pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...

-r、-requirementファイル

指定された要件ファイルにリストされているすべてのパッケージをアンインストールします。このオプションは複数回使用できます。

PIP文書のバージョン8.1


8

Windowsユーザーの場合、これはWindows PowerShellで使用するものです

 pip uninstall -y (pip freeze)

6

(@blueberryfieldsの回答にコメントするのに十分な評判がないため、これを回答として追加します)

@blueberryfieldsの回答は適切に機能しますが、アンインストールするパッケージがない場合は失敗します(この「すべてのアンインストール」がスクリプトまたはメイクファイルの一部である場合は問題になる可能性があります)。これは、xargs -rGNUバージョンのを使用すると解決できますxargs

pip freeze --exclude-editable | xargs -r pip uninstall -y

からman xargs

-r、-no-run-if-empty

標準入力に非ブランクが含まれていない場合は、コマンドを実行しないでください。通常、コマンドは入力がない場合でも1回実行されます。このオプションはGNU拡張です。


6
pip3 freeze --local | xargs pip3 uninstall -y

空になるには、このコマンドを数回実行する必要がある場合がありますpip3 freeze --local


3

これは、すべてのPythonパッケージをアンインストールする最も簡単な方法でした。

from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
    system("pip3 uninstall {} -y -q".format(i.key))

2

のみを使用したクロスプラットフォームサポートpip

#!/usr/bin/env python

from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions

pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
    package.project_name
    for package in
    get_installed_distributions()
    if not package.location.endswith('dist-packages')
])

options.yes = True  # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction

try:
    print pip_uninstall.run(options, args)
except OSError as e:
    if e.errno != 13:
        raise e
    print >> stderr, "You lack permissions to uninstall this package.
                      Perhaps run with sudo? Exiting."
    exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.


2

pipenvでもクロスプラットフォームで動作する簡単で堅牢な方法は次のとおりです。

pip freeze 
pip uninstall -r requirement

pipenvによる:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

ただし、piplockまたはpipfileは更新されません。


1

実行している場合virtualenv

virtualenv --clear </path/to/your/virtualenv>

たとえば、virtualenvがの場合/Users/you/.virtualenvs/projectx、次を実行します。

virtualenv --clear /Users/you/.virtualenvs/projectx

仮想環境の場所がわからない場合はwhich python、アクティブ化された仮想環境内から実行してパスを取得できます


1

私の場合、pipmacOSにインストールされたHomebrewを使用して、誤って多数のパッケージをグローバルにインストールしました。デフォルトのパッケージに戻す最も簡単な方法は簡単です:

$ brew reinstall python

または、使用していた場合pip3

$ brew reinstall python3

この回答は、環境について多すぎると想定しており、たとえばpyenvを使用している場合は問題を直接解決しません。
マーク

@Markまあ、pyenvを使用している場合は、別のことをする必要があります。あなたがそうではない一般的なケースでは、これが最も簡単で最もハックの少ないソリューションだと思います。この条件は回答の冒頭で明示的に述べられていることに注意してください。
Radon Rosborough、2017

OPはvirtualenvsについて尋ねました。彼はMacやbrewを使ってPythonをインストールすることについて特に言及していません。したがって、OSまたはbrewが使用されたと仮定することはできません。この回答ではすべての条件が解決されるわけではありません。pipなどのツールを使用して環境の解決に焦点を当てる場合は、自分がいる環境のコンテキストに対処します。それが理にかなっていると思います。
マーク

1
@マーク私はあなたの立場を理解しています。同意しないことに同意できます。「pipによってインストールされたすべてのパッケージを削除する最も簡単な方法は何ですか?」というラベルの付いたリンクをクリックするGoogleの人々を助けたいだけです。彼らが本当にpipによってグローバルにインストールされたすべてのパッケージを削除したいとき。
Radon Rosborough、2017

OPが実際に同じ質問をしなくても、@ RadonRosboroughに同意して、リンクのタイトルは私がここに上陸した理由を表しています。
ケンセベスタ2017

1

ではコマンドシェルのWindowsのコマンドはpip freeze | xargs pip uninstall -y動作しません。Windowsを使用している方のために、別の方法を考えました。

  1. インストールされたパッケージのすべての名前をコピーピップからpip freezeのコマンドを.TXTファイル。
  2. 次に、.txtファイルの場所に移動し、コマンドを実行しますpip uninstall -r *textfile.txt*


1

--userオプションを使用して、ユーザーサイトにインストールされているすべてのパッケージをアンインストールします。

pip3フリーズ--user | xargs pip3 uninstall -y


:私はこの答えは多くの新しい情報を追加していないと信じて、私はむしろ、このようなこの一つとして、他の既存の同様の答えに改善を示唆しているだろうstackoverflow.com/a/45475070/11138259
sinoroc

-1

Pipは、どのパッケージがインストールされたか、システムのパッケージマネージャーがどのパッケージをインストールしたかを知る方法がありません。このためには、このようなことをする必要があります

rpmベースのディストリビューションの場合(python2.7を、pipをインストールしたpythonバージョンに置き換えます):

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

debベースのディストリビューションの場合:

find /usr/lib/python2.7/ |while read f; do
  if ! dpkg-query -S "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

次に、残った空のディレクトリをクリーンアップします。

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

ディストリビューションからすべて(ほとんど?)のpythonパッケージが削除され、システムが壊れたままになる可能性があるため、私は非常に誤解を招く回答を見つけました。


すべての敬意をもって、これは匹敵するようです。dpkg-query -S '/usr/lib/python2.7/*'名前を抽出し、dpkg-query -L各名前を関連付けられたファイルをダンプするのはなぜですか?すでにマニフェストが用意されています。私の主な反対点は、pip以外の場所にインストールされたパッケージを対象にするのではなく、予想されるマネージャー以外の何者かによってインストールされたパッケージを対象とし、pipが通常は触れてはならない場所にあることです。pip list -lローカルにインストールされたパッケージをリストしますpip install --target=...。現在空のディレクトリをすべて削除すると、あなたも噛み付きます!
John P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.