Pip tarafından kurulan tüm paketleri kaldırmanın en kolay yolu nedir?


614

Sanal verilerimden birini düzeltmeye çalışıyorum - kurulu tüm kütüphaneleri üretime uygun olanlara geri döndürmek istiyorum.

Pip ile bunu yapmanın hızlı ve kolay bir yolu var mı?


10
@patelshahrukh python kaldırmayı ETMEZ pip paketlerini çıkarın. lütfen KAÇININ o yapıyor bunu beri hem büyük olasılıkla ÇALIŞMAYACAKTIR sen bu olacak, düşünme biçimlerini ve var dengesiz bir durumda makinenizi bırakabilirsiniz yeniden piton takma yöntemine göre, düzeltme için daha fazla iş .
blueberryfields

bu, geliştirme modunda veya düzenlenebilir modda yüklenen paketler için yardımcı olabilir: stackoverflow.com/questions/17346619/…
Charlie Parker

Yanıtlar:


924

Bu pasajı alternatif bir çözüm olarak buldum. Virtualenv'i yeniden oluşturmaktan daha zarif bir kütüphanelerin kaldırılması:

pip freeze | xargs pip uninstall -y

VCS aracılığıyla kurulu paketleriniz varsa, bu satırları hariç tutmanız ve paketleri manuel olarak kaldırmanız gerekir (aşağıdaki yorumlardan yükseltilmiş):

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

4
Bunu iyi bir çözüm olarak görüyorum, çünkü tamamen sanal ortamı tamamen temizlemiyor - Örneğin postactivate, kalacak olan değişiklikler yapmış olabilirim .
niceguydave

5
Bunu çalıştırdıktan sonra setuptoolspaketin kaldırıldığını fark ettim . Buradaki talimatları uygulayarak sorunu
Dan

1
@ gerty3000 evet, bu (sorunun sorduğu gibi) bir sanal env'de kurulu olan tüm paketleri kaldıracaktır. ortamınızda, kurulum araçları belki de global bir konuma kurulabilirdi?
blueberryfields

7
Ayrıca pip freeze --exclude-editable | xargs pip uninstall -ygrep kalıbı kullanmadan VCS paketlerini yok saymak için de kullanabilirsiniz
Connor Brinton

2
Düzenlenebilir paketleri kaldırmak için bkz. Stackoverflow.com/questions/17346619
Dan Oak

318

Bu, tüm Mac, Windows ve Linux sistemleri için çalışır. Needs.txt dosyasındaki tüm pip paketlerinin listesini almak için (Not: Başka bir tane varsa yenisini yaratacaktır. aşağıdaki tüm komutlarda yerine yer.t.txt).

pip freeze > requirements.txt

Şimdi tek tek kaldırmak için

pip uninstall -r requirements.txt

Hepsini birden kaldırmak istiyorsak

pip uninstall -r requirements.txt -y

requirements.txtDosya içeren mevcut bir proje üzerinde çalışıyorsanız ve ortamınız ayrışmışsa, requirements.txtyukarıdaki örneklerle değiştirin toberemoved.txt. Ardından, yukarıdaki adımları tamamladıktan sonra, requirements.txtşimdi temiz ortamınızı güncellemek için düğmesini kullanabilirsiniz .

Ve herhangi bir dosya oluşturmadan tek komut için (@joeb önerdiği gibi).

pip uninstall -y -r <(pip freeze)

11
muhtemelen bilmedikleri takdirde, onlara.t.txt dosyasının üzerine yazmaya zorlandığınızı belirtmek gerekir. :)
Dave Gregory

4
Buna ek olarak, tüm paketleri kaldırmak istiyorsanız, "-y" eklemek bunu yapar. Örnek:pip uninstall -r requirements.txt -y
David Metcalfe

58
Her pip uninstall -y -r <(pip freeze)şeyi tek seferde yapmak için kullanabilirsiniz .
joeb

1
@ joeb evet biz de bu şekilde yapabiliriz.
Harshad Kavathiya

1
@HarshadKavathiya "current.txt" gibi pip dondurma depolamak için başka bir dosya kullanabilirsiniz, böylece gereksinimleri.txt el değmemiş alkış kalabilir
NikosKeyz

118

Bu en son sürümle çalışır. Bence bunu yapmanın en kısa ve en beyan edici yolu.

virtualenv --clear MYENV

Ama genellikle değişmezlik kuralları yüzünden sanalenv'i silip yeniden yaratırım!


7
Bu etkili bir şekilde koşmakla aynı wipeenvmı? virtualenvwrapper.readthedocs.org/en/latest/…
Taylor Edmiston

Aslında - bu (Sadece koştu şeyden) görünüyor oysa wipeenvçevre bir hata atar ve bir bağlamında kullanıldığında şey kaldırmaz içinde iken pip install -egeliştirme yapı kullanım teşebbüs, virtualenv --clear MYENVbir hata atmak değil ve hiçbiri kaldırır daha önce ortamda kurmuş olabileceğiniz paketler. En azından OSX'te durum böyle. Daha fazla bilgi için bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… adresine bakın .
mpacer

2
wipeenvvirtualenvwrapper tarafından sağlanan bir takma addır, dolayısıyla herkes buna sahip değildir.
Jonathan Hartley

2
Bu biraz kirli bir numara ama sihir gibi çalışıyor. Herkesin pip uninstall -r needs.txt -y kullanmasını tercih ederim. Harika bir temizlik yapar.
Muema

84

Bu cevabı bir yorum bölümünden yükseltmek istedim çünkü konudaki en zarif çözümlerden biri. Bu cevap için tam kredi @joeb'a gider .

pip uninstall -y -r <(pip freeze)

Bu, yukarıdaki yanıtların çoğunun işlemediği bir virtualenv bağlamı dışında kullanıcı paketleri klasörünü temizlemenin kullanımında benim için harika çalıştı.

Düzenleme: Herkes nasıl bu komut bir Makefile çalışmak için bilmek?

Bonus: Bir bash takma adı

Kolaylık sağlamak için bunu bash profilime ekliyorum:

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

O zaman koş:

pipuninstallall

Pipenv için alternatif

Pipenv kullanıyorsanız, şunları yapabilirsiniz:

pipenv uninstall --all

8
Kolayca # 1 olmalı
Mark

I like it ama null durumda çalışmıyor ( pip freezehiçbir paket yüklü değilse hiçbir şey çıktı sonuçlanır, ve sonra pip uninstallne yazık ki şikayet).
Eric G

Hmm iyi yakaladın. Belki de, boru dondurma çıkışının boş olup olmadığını kontrol eden bir bash işlevine sarılabilir. Komutu iyi bir kısa tek katmanlı tutarken bunu başarmanın harika bir yolunu görmüyorum.
Taylor Edmiston

1
varsayılan olarak sh kullanır, ancak ikame sözdizimi <(...)bir bashizmdir. Böylece bash -c "..." kullanabilir ya dapip freeze | pip uninstall -r /dev/stdin
Caesar

Azure Dizüstü Bilgisayarlarla çalışmaz: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

Diğer yanıtları kullanan pip listveya pip freeze içermesi gereken--local diğer yanıtlar , ortak ad alanlarında bulunan paketleri de kaldıracaktır.

İşte düzenli olarak kullandığım snippet

 pip freeze --local | xargs pip uninstall -y

Ref: pip freeze --help


İyi cevap ... bana çalıştı
igorkf

Bu hatayı üretilen bir paket vurmak kadar bu çalıştı: 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.. Sonra başka modülü kaldıramadım.
SeaDude

39

Yöntem 1 (ile pip freeze)

pip freeze | xargs pip uninstall -y

Yöntem 2 (ile pip list)

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

Yöntem 3 (ile virtualenv)

virtualenv --clear MYENV

2
sudo, küresel makine kurulumunu etkilediğinden dikkatli bir şekilde dikkate alınmak zorunda değildir ve muhtemelen oldukça tehlikelidir. bu cevaba bakınız örneğin: stackoverflow.com/questions/15028648/…
blueberryfields

6
Yöntem 2 ( pip list) pip yanlışlıkla kendini kaldırma kadar -_- harika çalışır
Justin

20

Aşağıdakileri yaparak başardım:

Şu anda yüklü paketler listesiyle reqs.txt adlı gereksinimler dosyasını oluşturun

pip freeze > reqs.txt

sonra tüm paketleri reqs.txt'den kaldırın

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

Her zaman bir hata yapmanız durumunda düşmek için bir pip gereksinimleri dosyası var gibi bu yöntemi seviyorum. Ayrıca tekrarlanabilir.


Basit ve zarif, çekicilik gibi çalışır
Satyaaditya

19

En hızlı yol, virtualenv'i tamamen yeniden yapmaktır. Değilse, üretim ile eşleşen bir gereksinim.txt dosyanız varsayalım:

# On production:
pip freeze > reqs.txt

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

2
Bu, daha sonra yükleme / kaldırma işleminin geri kalanına müdahale eden yerel bir .egg-info dosyası oluşturan düzenlenebilir bir yüklemenin (temelde bir setuptools geliştirme modu yüklemesi) olduğu durumu ele alıyor mu? Bir dizi dosya olduğundan varlıklarının nasıl ele alınacağını bilmiyor gibi görünüyor ve herhangi bir şeyi kaldırmak yerine MYENV altında yerel bir dizin yapısını şununla tamamlıyor: `> MYENV / bin / python3.4'te yeni python yürütülebilir dosyaları> Ayrıca MYENV / bin / python'da çalıştırılabilir dosya oluşturma> Kurulum araçlarını, pip'i, tekerleği takma ... bitti.` Ama MYENV çevreyi sıfırlamadı!
mpacer

16

Windows'ta pathdoğru yapılandırılmışsa aşağıdakileri kullanabilirsiniz:

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

Unix benzeri sistemler için benzer bir durum olmalıdır:

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

'Dosya bulunamadı' gibi sorunlarla karşılaşabileceğinizden, bunun tamamen sağlam olmadığına dair bir uyarı ancak yine de bazı durumlarda işe yarayabilir

DÜZENLEME: Açıklık için: uninsBu komut yürütüldüğünde kendisine veri yazılan rasgele bir dosyadır:pip freeze > unins

Sırayla yazdığı dosya daha sonra yukarıda belirtilen paketleri zımni onay / ön onay ile kaldırmak için kullanılır. pip uninstall -y -r unins

Sonunda dosya tamamlandıktan sonra silinir.



14

İlk olarak, tüm paketi requirements.txt

pip freeze > requirements.txt

Sonra hepsini kaldır

pip uninstall -y -r requirements.txt 

9

Bu eski bir soru biliyorum ama ben gelecekteki referans için şimdi bunu yapabilirsiniz böylece genelinde rastlamak yaptı:

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

-r, --gereksinim dosyası

Verilen gereksinimler dosyasında listelenen tüm paketleri kaldırın. Bu seçenek birden çok kez kullanılabilir.

gelen PIP belgeleri sürüm 8.1


8

Windows kullanıcıları için, Windows PowerShell'de kullandığım şey bu

 pip uninstall -y (pip freeze)

6

(bunu cevap olarak ekliyoruz, çünkü @blueberryfields'ın cevabı hakkında yorum yapmak için yeterli itibarım yok)

@blueberryfields yanıtı iyi çalışıyor, ancak kaldırılacak bir paket yoksa başarısız olur (bu "tümünü kaldır" bir komut dosyasının veya makefile'ın bir parçasıysa sorun olabilir). Bu, xargs -rGNU'nun aşağıdaki sürümünü kullanırken çözülebilir xargs:

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

from man xargs:

-r, - boş değilse no-run

Standart giriş herhangi bir boşluk içermiyorsa, komutu çalıştırmayın. Normalde komut, giriş olmasa bile bir kez çalıştırılır. Bu seçenek bir GNU oluşumudur.


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

Durum boş bir almak için bu komutu birkaç kez çalıştırmak zorunda olabilir pip3 freeze --local.


3

Tüm python paketlerini kaldırmamın en kolay yolu buydu.

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

Yalnızca pipaşağıdakileri kullanarak platformlar arası destek :

#!/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

Bu benim için çalışan komut:

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

2

platformlar arası kolay ve pipenv'de de çalışma:

pip freeze 
pip uninstall -r requirement

pipenv tarafından:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

ancak piplock veya pipfile güncellenmez, bu yüzden unutmayın


1

Koşuyorsanız virtualenv:

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

örneğin, sanal ağınız ise /Users/you/.virtualenvs/projectx, şunu çalıştırırsınız:

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

sanal ortamınızın nerede olduğunu bilmiyorsanız which python, yolu bulmak için etkinleştirilmiş bir sanal ortamın içinden çalıştırabilirsiniz


1

Benim durumumda, yanlışlıkla macOS'ta Homebrew tarafından kurulmuş bir dizi paket pipkurmuştum. Varsayılan paketlere geri dönmenin en kolay yolu basitti:

$ brew reinstall python

Veya aşağıdakileri kullanıyorsanız pip3:

$ brew reinstall python3

Bu cevap çevre hakkında çok fazla şey varsayar ve örneğin pyenv kullanıyorsanız sorunu doğrudan çözmez.
Mark

@Mark Pyenv kullanıyorsanız emin olun, o zaman farklı bir şey yapmanız gerekir. Yaygın olmadığınızda, bunun en basit ve en azgın çözüm olduğuna inanıyorum. Bu koşulun cevabın başında açıkça belirtildiğini unutmayın.
Radon Rosborough

OP sanal sanalları sordu. Python'u yüklemek için bir Mac veya demlemek kullandığından özel bir söz etmedi. Bu nedenle işletim sisteminin veya demlemenin kullanıldığını varsayamazsınız - ve bu cevap TÜM koşulları çözmeyecektir. Pip gibi bir araç kullanarak çevre için çözüme odaklanırsanız, bulunduğunuz ortamın bağlamına değinirsiniz. Umarım mantıklıdır.
Mark

1
@Mark Pozisyonunu anlıyorum. Anlaşamadığımızı kabul edebiliriz. Google'dan "pip tarafından yüklenen tüm paketleri kaldırmanın en kolay yolu nedir?" Etiketli bir bağlantıyı tıklayan kişilere yardım etmek istiyorum. dünya çapında pip tarafından yüklenen tüm paketleri gerçekten kaldırmak istediklerinde .
Radon Rosborough

@RadonRosborough ile aynı fikirdeyken, OP aslında aynı soruyu sormasa bile, link başlığı neden buraya geldiğimi temsil ediyor.
Kenn Sebesta

1

In Command Shell Windows'un komut pip freeze | xargs pip uninstall -yçalışmaz. Yani Windows kullananlarınız için bunu yapmanın alternatif bir yolunu buldum.

  1. Herşeyden yüklü paketlerin isimlerini Kopya pip gelen pip freezebir komuta .txt dosyası.
  2. Ardından, .txt dosyanızın ve komutu çalıştırınpip uninstall -r *textfile.txt*


1

Kullanıcı sitesinde yüklü olan tüm paketleri kaldırmak için --user seçeneğini kullanıyorum.

pip3 dondurma - kullanıcı | xargs pip3 kaldırma -y


Bu cevabın çok yeni bilgi eklemediğine inanıyorum, bunun gibi mevcut başka bir benzer cevaba bir iyileştirme
önermeyi tercih ederim

-1

Pip'in hangi paketlerin kurulduğunu ve hangi paketlerin sisteminizin paket yöneticisi tarafından kurulduğunu bilmesi mümkün değildir. Bunun için böyle bir şey yapmanız gerekir

rpm tabanlı dağıtımlar için (python2.7'yi pip yüklediğiniz python sürümünüzle değiştirin):

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

borç tabanlı dağıtım için:

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

daha sonra kalan boş dizinleri temizlemek için:

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

Tüm (en çok?) Python paketlerini dağıtımınızdan kaldıracağı ve muhtemelen bozuk bir sistemle bırakacağı için en iyi cevabı çok yanıltıcı buldum.


Tüm saygıyla, bu karşılaştırılabilir gibi görünüyor. Neden olmasın dpkg-query -S '/usr/lib/python2.7/*', adlarını ayıklamak ve dpkg-query -Lher isim ilişkili dosyaları dökümü? Zaten tezahürleri hazırladı. Benim asıl itirazım pip dışında herhangi bir yere kurulmuş paketleri hedeflemek yerine, beklediğiniz yönetici dışında ve pip'in genellikle dokunmamayacağı bir yerde kurduğunuz paketleri hedeflemiş olmanızdır. pip list -lyerel olarak yüklediği paketleri listeler ve bazıları eşittir pip install --target=.... Şu anda boş olan tüm kirleri kaldırmak da sizi ısıracaktır!
John P
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.