python setup.py kaldırma


786

İle bir python paketi yükledim python setup.py install.

Nasıl kaldırabilirim?


52
Kabul edilen cevap eski. Kullanın pip uninstall <your_package>. Bkz. Stackoverflow.com/questions/1231688/… .
Joachim W

21
pip kaldırma artık geçerli bir yanıt değil. İşte kanıt. [sri @ localhost python] $ pip uninstalo foo DEPRECATION: Dağıtılmış bir distutils projesinin (foo) kaldırılması kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Bunun nedeni, bir distutils projesinin kaldırılmasının projeyi yalnızca kısmen kaldırmasıdır.
shrewmouse

@shrewmouse artık gösterilmiyor.
JC Rocamonde

@JCRocamonde Oluşturduğum bir paketle, pip'in en son sürümü 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.bu yüzden hala bir sorun.
Josh

@ Setup.py dosyanızın en üstündeki josh "distutils.core içe aktarma kurulumundan" yerine "setuptools içe aktarma kurulumundan" yapın.
bigjake

Yanıtlar:


976

Not: kullanmaktan kaçının python setup.py installkullanımınıpip install .

Tüm dosyaları el ile kaldırmanız ve ayrıca yüklemenin el ile yaptığı diğer tüm şeyleri geri almanız gerekir.

Tüm dosyaların listesini bilmiyorsanız, --recordseçenekle yeniden yükleyebilir ve bu listenin oluşturduğu listeye bakabilirsiniz.

Yüklü dosyaların bir listesini kaydetmek için şunları kullanabilirsiniz:

python setup.py install --record files.txt

Kaldırmak istediğinizde, kaldırma işlemini yapmak için xargs kullanabilirsiniz:

xargs rm -rf < files.txt

Veya Windows çalıştırıyorsanız, Powershell'i kullanın:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Sonra örneğin, aynı zamanda içeren dizini silmek /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/üzerinde macOS. Hiçbir dosyası yok, ancak Python yine de boş bir modülü içe aktaracak:

>>> import my_module
>>> my_module.__file__
None

Silindikten sonra Python şunları gösterir:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

6
Bu işe yaramazsa, cat files.txt | xargs sudo rm -rf
sudo'yu

21
Bu, boşluklu dosyalarda karışıklık yaratacaktır. Aşağıdaki
yanıtıma

1
Setup.py dosyasını kullanmanın kaynak koduna sahip olduğum paketi nasıl yeniden yükleyebilirim?
ス レ ッ ク

5
Bu da onların yerine boş dizinler bırakır.
Dilawar

3
Merhaba, cat files.txt denediğimde, bazı dosyalar için önerinizi denedim | xargs rm -rf sudo modunda bile izin reddedildiğini söylüyor, örneğin / usr / local / bin / pydoc veya / usr / local / bin / idle Neden herhangi bir fikir?

212

Benim için aşağıdakiler çoğunlukla işe yarıyor:

pip takılmışsa, örneğin:

$ easy_install pip

Kurulu paketinizin pip açısından nasıl adlandırıldığını kontrol edin:

$ pip freeze

Bu, kurduğunuz (ve pip tarafından algılanan) tüm paketlerin adlarını listeler. Ad bir süre uzun olabilir, daha sonra ve sonrasında gösterilen paketin adını kullanın #egg=. Ayrıca çoğu durumda sürüm kısmını yoksayabilirsiniz (ne olursa olsun ==veya -).

Ardından paketi kaldırın:

$ pip uninstall package.name.you.have.found

Paketi kaldırma hakkında onay isterse, şanslı bir adamsınız ve kaldırılacak.

pip, pip tarafından kurulan tüm paketleri tespit edecektir. Ayrıca, easy_install veya setup.py aracılığıyla kurulan paketlerin çoğunu algılar, ancak bu bazı nadir durumlarda başarısız olabilir.

İşte ttr.rdstmcMS Windows üzerinde paket ile yerel testten gerçek örnek .

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Düzenle 2015-05-20

Yukarıda yazılanların hepsi hala geçerlidir, yine de, şu anda mevcut küçük değişiklikler var.

Pip'i python 2.7.9 ve python 3.4'e kurun

Son python sürümleri ensurepip, çevrimdışı olsa bile pip yüklemeye izin veren bir paketle gelir :

$ python -m ensurepip - yükseltme

Bazı sistemlerde (Debian Jessie gibi) bu mevcut değildir (sistem python kurulumunun kırılmasını önlemek için).

kullanılması grepveyafind

Yukarıdaki örnekler, grepyüklediğinizi varsayar . (Benim bilgisayarımda MS Windows vardı) linux yardımcı programları (dahil grep dahil) yüklü vardı. Alternatif olarak, yerel MS Windows kullanın findveya bu filtrelemeyi yok sayın ve adı, algılanan python paketleri listesinden biraz daha uzun bir listede bulun.


1
bunun için hangi paketleme aracını / sürümünü kullanıyorsunuz? ( distutils, distributevb.)
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
Ben kullanıyorum setuptools. Bitbucket.org/vlcinsky/ttr.aws.utils.s3 adresini kontrol edebilirsiniz (ki bu mükemmel değildir). Her neyse, ad alanı paketlerinin kullanımından oldukça memnun değilim, bazen ithalat görünür neden olmadan bozuldu. Ama bu başka bir hikaye.
Jan Vlcinsky

1
kendimi düzeltiyorum. İthal etmeme rağmen setuptools, aslında kullanıyorum distribute. Başka bir ders: pypi'den kendi paketimi kurarken ve aynı ad alanını yerel olarak paylaşan başka bir paket geliştirmeyi planlarken, kullanmayın $ pip install <the package> , kullanmayın $ easy_install <the package>, aksi takdirde geliştirme paketinizi içe aktarırken çakışmalarla karşılaşırsınız.
Jan Vlcinsky

1
Başkalarına yardım etmek için: Kök olmadığım için her şeyi evime yüklüyorum. İşte yaptığım şey easy_install --user --prefix=$HOME pip. Sonra benim PATH aşağıdaki eklendi: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/binve ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre

3
Bu çok daha kolay olduğu gibi cevap kabul edilmelidir ve pip genellikle Python ile birlikte gelir. Komut isteminde / terminalde kullanımı kolaydır - pip uninstall moduleveya python -m pip uninstall moduleçalışmalıdır. Ayrıca Python'un bir parçası olduğu için çapraz platform olmalıdır.
Edward

81

1 numaralı yanıtın sorunları var:

  • Mac üzerinde çalışmaz.
  • Boşluklar veya diğer özel karakterler içeren bir dosya yüklüyse, xargskomut başarısız olur ve tek tek sözcüklerle eşleşen tüm dosyaları / dizinleri siler.
  • -riçinde rm -rfsen istemediğiniz şeyleri silebilir gereksiz ve en kötü olduğunu.

Bunun yerine, unix benzeri için:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

Ve pencereler için:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Ayrıca, setup.pyyüklemeyi kaldırırken , tipik bir durumda sizi rahatsız etmeyen çözülemeyen sorunlar da vardır . Daha eksiksiz bir cevap için şu wiki sayfasına bakın:

https://ofswiki.org/wiki/Uninstalling_setup.py_install


3
Neden yukarıdakinin altında bir öneri bırakmıyorsunuz? Bu "ciddi sorunların" köşe vakaları ile ilgili olduğunu unutmayın.
lpapp

17
Yukarıdakilerin altına bir yorum bıraktım. Yorumum, çok az kişinin tıkladığı "daha fazla yorum yükle" bağlantısı altına gömüldü. Kendi cevabımı da verdim çünkü söyleyecek çok şeyim vardı, yani. cevabımdaki bağlantı. Ayrıca, köşe vakası, bir dosyada boşluk olduğunda aklıma gelen ilk terim olmaz.
Ian Kelling

Değer için, bu yeni satırları içeren dosya adlarında başarısız olacağını düşünüyorum :) Herhangi bir paket koruyucusu bu kötü olup olmadığını, umarım asla öğrenemiyorum.
Jack O'Connor

2
OS X Mavericks'te en azından xargs'de -d seçeneği yoktur. Neden? Çünkü Apple seni seviyor. Her neyse, bu yukarıdaki ile aynı etkilere sahiptir ve boşluklar ve benzeri ile güvenlidir. Yine de Bash'a özgü. Kurulumu --record to files.txt ile çalıştırdıktan sonra:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski

2
@IanKelling printfDize örneğin %veya \karakterler içeriyorsa, değişkenleri biçim dizesinin içine gömmek başarısız olur . Her zaman bir biçim dizesi sağlayın: printf '%s\0' "$line"(ayrıca yankıyı önler). Gerçi sadece kullanarak döngüden kaçınabilirsiniztr '\n' '\0' < files.txt | xargs -0 rm -f
geirha

39

Önce yüklediğiniz dosyaları kaydedin. Daha önce çalıştırmış olsanız bile bu komutu tekrarlayabilirsiniz setup.py install:

python setup.py install --record files.txt

Kaldırmak istediğinizde şunları yapabilirsiniz:

sudo rm $(cat files.txt)

Bunun nedeni, rm komutunun silinecek dosyaların boşlukla ayrılmış bir listesini alması ve yükleme kaydınızın böyle bir liste olması nedeniyle çalışır.


Sadece onu yükleyen benim program olup olmadığını kontrol etmenin bir yolu var mı, o zamandan beri başka hiçbir uygulama bu kaynağı kullandı mı? Örneğin, bir araç yükledim, bunu yapmak için birkaç kitaplık yüklemek zorunda kaldım, belki bazıları zaten yüklenmişti (yani kaldırma işleminde kaldıramadığım anlamına geliyor) ama aynı zamanda diğer uygulamaların kaldırdığı hiçbir şeyi kaldıramıyorum yüklenmedi çünkü kütüphanem ilk yüklendi ..
Gabrielle

19

Şimdi python size kurulum pipsırasında yükleme seçeneği sunuyor (Windows'tayım ve en azından Windows için bunu yapıyor!). Yüklemeyi seçtiğinizi göz önünde bulundurarakpipPython sırasında yüklemeyi (aslında varsayılan olduğu için seçmeniz gerekmez), pipsizin için zaten yüklüdür. Ardından, pipkomut istemine yazın, bir yardım geldiğini görmelisiniz. Gerekli kullanım talimatlarını burada bulabilirsiniz. Örneğin pip listkurulu paketlerin listesini gösterir. Kullanabilirsiniz

pip uninstall package_name

artık istemediğiniz herhangi bir paketi kaldırmak için. Daha fazlasını buradan okuyun (pip belgeleri) .


8

Tembel yol: bir dağıtım paketi oluşturduktan sonra yeniden yüklemeniz koşuluyla, Windows kurulum menüsünden (Windows kullanıyorsanız) veya rpm komutundan kaldırmanız yeterlidir.

Örneğin,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" elbette bir örnektir).


4
Sevip sevmediğimi bilmiyorum, ama ortogal düşünme için bir puan alıyorsunuz. :)
Lennart Regebro

Dürüst olmak gerekirse, bu nedenle "tembel bir şekilde" ;-) emin değilim ama daha "standart" yükleyici oluşturmak mümkün olduğunu söyleyebilirim düşündüm. Setup.py, paketleri kaldırmak için temiz bir yol sağlamıyor.
RedGlyph

1
Yüklemelerin kaldırılması, kurulu paketlerin ve dosyaların merkezi kayıtlarını gerektirir ve bir tane yoktur. Bu hikayenin nasıl geliştirileceğine dair tartışmalar devam ediyor ve Python 2.7 / 3.2 veya 2.8 / 3.3'te çözülebilir.
Lennart Regebro

1
@Lennart: Python 2.8 olmayacak en azından şu anki resmi açıklama
Piotr Owsiak

2
@PiotrOwsiak: Evet, ama o zaman bu ifade değildi. 2.8 o zamanlar hala bir olasılıktı ve geçen yılın sonunda PEP 404 onaylanana kadar böyle kaldı.
Lennart Regebro

6

Python paket dizininize gidin ve .egg dosyanızı kaldırın, örneğin: In python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

Python 2.6'da (ubuntu): /usr/local/lib/python2.6/dist-packages/


1
Kurulan dosyaları paketin dışında, bazılarının yüklediği setuptools ve easy_install komutları gibi yapmazsa çalışır.
Lennart Regebro

3
Normalde, bir paket OP tarafından belirtildiği gibi python setup.py kullanılarak kurulursa, yumurta olmazdı. OTOH, eğer easy_install kullanıldığından bir tane varsa, paketleri kaldırmanın belgelenmiş yolu yumurta dosyasını silmeden önce easy_install -m kullanmaktır; aksi takdirde easy-install.pth dosyasında yumurta kabukları geride kalabilir.
Ned Deily

5

Soruyu tam olarak cevaplamak değil, her gün bana yardımcı olan bir şey:

Paketlerinizi şu şekilde yükleyin:

pip install .

Bu paketi içeri sokar $HOME/.local . İle kaldır

pip uninstall <package_name>

1
pip unistall .benim için çalışmadı, ama pip uninstall <package_name>yaptı, teşekkürler!
Danijel

4

Muhtemelen bunu alternatif olarak yapabilirsiniz: -

1) Python sürümünü edinin -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> Yukarıdaki komut 2.4.3 olan geçerli python Sürümü'nü verir

2) python kurulum dizinini alın -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> Yukarıdaki komuttan --usus/lib/python2.4/site - packages olan kurulum dizinini alabilirsiniz.

3) Buradan paketleri ve python yumurta dosyalarını kaldırabilirsiniz

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Bu benim için çalıştı .. Ve beni rahatsız eden paketi kaldırabildim :)


3

Bence setup.py dosyasını açabilir, paket adını bulabilir ve daha sonra pip'in kaldırmasını isteyebilirsiniz.

Adın bir 'METADATA' değişkeninde mevcut olduğu varsayılarak:

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")

1

Martin'in söylediklerine bağlı olarak, yükleme çıktısını ve küçük bir bash komut dosyasını kaydetmek hileyi güzelce yapar. İşte yaptığım şey ...

for i in $(less install.record);
sudo rm $i;
done;

Ve presto. Kaldırıldı.


2
Bunu yazmak çok daha kolay sudo xargs rm -v < install.record.
poolie

1

Bir paketi yeniden yükledikten sonra hala silinmesi gereken dosyalarınız varsa, klasörün buildde silindiğinden emin olun . Bu nedenle, pkgsilmek istediğiniz paket olduğunu varsayarsak :

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Python3 için çalışın ve paketi ve onun * .egg-info dosyasını silin


1

At {virtualenv}/lib/python2.7/site-packages/(sanalenv kullanılmıyorsa {system_dir}/lib/python2.7/dist-packages/)

  • Yumurta dosyasını çıkarın (örn. distribute-0.6.34-py2.7.egg)
  • Dosyadan herhangi biri varsa easy-install.pth, karşılık gelen satırı kaldırın (kaynak dizinin veya bir yumurta dosyasının yolu olmalıdır).

0

Küresel ortamda yanlışlıkla geçmişte bir noktada "python setup.py install" komutunu çalıştırdım ve kaldırmada çok zorlandım. Bu çözümler işe yaramadı. "pip uninstall", "splunk-appinspect" kaldırılamıyor. Kaldırılacak dosya bulunamadı. " "sudo pip uninstall" işe yaramadı "Splunk-appinspect gereksinimi kaldırılamıyor, yüklü değil". Pip'i kaldırmayı, pip önbelleğini silmeyi, sabit diskimi paket için aramayı vb. Denedim.

"pip show" sonunda beni çözüme götürdü, "Location:" bir dizini işaret ediyordu ve bu dizini yeniden adlandırmak, paketin pip listesinden kaldırılmasına neden oldu. Dizini yeniden adlandırdım ve pip'in listesinde yeniden görünmedi ve şimdi paketimi bir virtualenv'e yeniden yükleyebilirim.


0

Ben kaçmış python setup.py installbenim pycharm içinde, benim Conda taban ortamına tüm paketleri yükler kez. Daha sonra tüm bu paketleri kaldırmak istediğimde,pip uninstall çalışmıyor. Bunları /anaconda3/lib/python3.7/site-packages adresinden manuel olarak silmek zorunda kaldım :(

Bu yüzden neden gereksinimleri.txt dosyası yazmak yerine setup.py kullandıklarını göremiyorum. Gereksinim dosyası, paketleri sanal ortama yüklemek için kullanılabilir ve sistem python paketleriyle uğraşmaz.


-1

Aşağıdaki gibi komutları okumak için bash kullanarak ilgili dosyaları kaldırmak daha iyi olabilir:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"

Bu, daha önce var olan bir cevabın kopyasıdır.
Karl Richter
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.