“Pip” ile bir paketin kaldırılması bağımlı paketleri de kaldırır mı?


153

Bir pippaketi yüklemek için kullandığınızda , gerekli tüm paketler de onunla birlikte yüklenir (bağımlılıklar). Bu paketin kaldırılması bağımlı paketleri de kaldırır mı?


1
Neden sadece deneyip göremiyorsun? Sorunuzu cevaplamak için tam olarak bunu yapardım, ancak bir nedenden dolayı pip şu anda burada paket dizinini alamıyor.
Thomas Vander Stichele

1
Pip haber grubunda pip kullanıcılarının en azından şimdilik bu işlevi istemediğini gördüm . Ne yazık!
Michel Samia

4
@ThomasVanderStichele çünkü cevap gelecekteki Google çalışanları için çevrimiçi olarak kullanılamayacaktı :)
Mark

1
@İşaretli ol, sadece burada kendi sorunun cevabını yaz.
Thomas Vander Stichele

5
@ThomasVanderStichele: Ben OP değilim, ama işte bu yüzden SO için çok yasal bir Soru-Cevap: pipa) kötü niyetli ve kırılgan ve sürüme bağlı, ayrıca b) çalışmak zorunda olduğum bazı müşteri kurulumlarında, yönetici hakları (paketler olmasa da), bu yüzden onu kırmak veya kaldırmak çok büyük bir üzüntü ve doğru yapmak için bir şansınız vardı. c) internet bağlantısı çok iyi olmayabilir; güvenlik nedeniyle kurumsal makineler genellikle güvenlik duvarına sahiptir, bu nedenle doğrudan bağlantı kuramazsınız ve ihtiyacınız olan her şeyi ve sürümünü önceden bilmeniz ve indirmeniz gerekir.
smci

Yanıtlar:


81

Hayır, bağımlılık paketlerini kaldırmaz. Yalnızca belirtilen paketi kaldırır:

$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package

figleaf == 0.6.1
burun == 1.1.2 pinokyo ==
0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze

figleaf == 0.6.1
burun == 1.1.2 pinokyo
== 0.3

Gördüğünüz gibi bu paketler bağımlılıklardır specloudve hala oradadırlar, ancak specloudpaketin kendisi değildir .

Aşağıda belirtildiği gibi, bir paketi ve kullanılmayan bağımlılıkları kaldırmak için pip-autoremove yardımcı programını yükleyebilir ve kullanabilirsiniz .


2
specloudPaketin münhasır bağımlılık paketleri ne olacak ?
Fusion

@ Fusion Bu paketler sploudun bağımlılığıdır.
BernardoBarreto

251

Bir paketi ve kullanılmayan bağımlılıkları kaldırmak için pip-autoremove yardımcı programını yükleyebilir ve kullanabilirsiniz .

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y

9
Ne yazık ki henüz gerçek bir Python3 desteği yok (bkz. Github.com/invl/pip-autoremove/issues/18 ).
asmaier

10
Ekim 2019 itibariyle Python 3'te benim için iyi çalışıyor.
atıştırmalıklar

@ loved.by.Jesus - Python 3.8.3 kullanıyorum ve test ettim ve hala komut olarak görüyorum pip-autoremove(tire alt çizgi değil). pip_autoremoveverir command not found.
bwv549

@ bwv549 python<version>(sürüm belirtilmesi gerektiğinde) üzerinden yürüttüğümü açıklamalıyım . Bu şekilde adı uyarlamamız gerekir pip_autoremove(paket adı olarak tire işareti kullanılamaz). Örneğin python3.8 pip_autoremoveçalışıyor ama python3.8 pip-autoremoveçalışmıyor. Aksi takdirde, işaret ettiğiniz gibi, basit terminal komutu olarak pip-autoremovemükemmel çalışır :) - sadece sistemin varsayılan python sürümü kullanılmasına rağmen. Mesajın için teşekkürler.
loved.by.Jesus

8

başarıyla bu bash satırını kullanarak bir paket bağımlılıklarını kaldırdım:

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done

bu 1.5.4 pip üzerinde çalıştı


41
Teknik olarak bu çözüm rağmen yok başarıyla tüm bağımlılıklarını kaldırmak diğer yanıtlar belirtildiği gibi, bu da vardır bağımlılıkları kaldırır hedefe özgü değildir sistem paketleri yüklenmiş olanlar da dahil olmak üzere. Örneğin, sistemimde bu komut dosyası hedef paket pip ile ortak bağımlılıkları olduğu için başarısız oldu, bu yüzden pip komut dosyası bitmeden önce kendi bağımlılıklarını kaldırdı ve başarısız oldu.
sinisterstuf

19
Bu kaldırır ve dikkat , sadece bir sonraki bağımlılıkları aşağı seviyeye ancak değil bu bağımlılıkları bağımlılıkları.
tamakisquare

0

Bazıları için biraz zor olsa da çözümü buldum.

1. adım (python3 ve linux için):
pip3 install pip-autoremove
2. adım:
cd /home/usernamegoeshere/.local/bin/
3. adım:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
ve tüm pip (ler) i pip3 olarak değiştirin 4. adım: ./pip-autoremove paket_adı

En azından benim için işe yarayan buydu ...


-1

Https://github.com/cls1991/pef için bir deneme yapabilirsiniz . Tüm bağımlılıkları olan paketi kaldıracaktır.


pef maalesef sadece sanal ortamlarda çalışıyor gibi görünüyor.
Bas

Sadece güvenlikle ilgili hususlarda, kodu hackleyebilirsiniz, sadece koruma kodunu kapatın.
cls1991

1
Bu bağımlılıkların "sarkması" yani diğer dağıtımların gerektirmediğinden emin mi?
wim

Evet, referans sayımına dayanıyor.
cls1991

hey çocuklar kod çatal ve değiştirdik. Lütfen aşağıdaki bağlantıyı bulun. github.com/nalangekrushna/pef
Krissh
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.