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ı?
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ı?
Yanıtlar:
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
postactivate
, kalacak olan değişiklikler yapmış olabilirim .
setuptools
paketin kaldırıldığını fark ettim . Buradaki talimatları uygulayarak sorunu
pip freeze --exclude-editable | xargs pip uninstall -y
grep kalıbı kullanmadan VCS paketlerini yok saymak için de kullanabilirsiniz
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.txt
Dosya içeren mevcut bir proje üzerinde çalışıyorsanız ve ortamınız ayrışmışsa, requirements.txt
yukarı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)
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
şeyi tek seferde yapmak için kullanabilirsiniz .
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!
wipeenv
mı? virtualenvwrapper.readthedocs.org/en/latest/…
wipeenv
çevre bir hata atar ve bir bağlamında kullanıldığında şey kaldırmaz içinde iken pip install -e
geliştirme yapı kullanım teşebbüs, virtualenv --clear MYENV
bir 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 .
wipeenv
virtualenvwrapper tarafından sağlanan bir takma addır, dolayısıyla herkes buna sahip değildir.
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?
Kolaylık sağlamak için bunu bash profilime ekliyorum:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
O zaman koş:
pipuninstallall
Pipenv kullanıyorsanız, şunları yapabilirsiniz:
pipenv uninstall --all
pip freeze
hiçbir paket yüklü değilse hiçbir şey çıktı sonuçlanır, ve sonra pip uninstall
ne yazık ki şikayet).
<(...)
bir bashizmdir. Böylece bash -c "..." kullanabilir ya dapip freeze | pip uninstall -r /dev/stdin
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.
Diğer yanıtları kullanan pip list
veya 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
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.
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
) pip yanlışlıkla kendini kaldırma kadar -_- harika çalışır
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.
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
Windows'ta path
doğ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: unins
Bu 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.
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
(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 -r
GNU'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.
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))
Yalnızca pip
aş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.
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
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
Benim durumumda, yanlışlıkla macOS'ta Homebrew tarafından kurulmuş bir dizi paket pip
kurmuş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
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.
pip freeze
bir komuta .txt dosyası.pip uninstall -r *textfile.txt*
Kullanıyorsanız pew
, wipeenv komutunu kullanabilirsiniz :
pew wipeenv [env]
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
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.
dpkg-query -S '/usr/lib/python2.7/*'
, adlarını ayıklamak ve dpkg-query -L
her 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 -l
yerel 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!