odinstalowanie pipa nie jest już prawidłową odpowiedzią. Oto dowód. [sri @ localhost python] $ pip uninstall foo DEPRECATION: Deinstalacja zainstalowanego projektu distutils (foo) jest przestarzała i zostanie usunięta w przyszłej wersji. Wynika to z faktu, że odinstalowanie projektu distutils tylko częściowo odinstaluje projekt.
złośnica
@shrewmouse, która już się nie wyświetla.
JC Rocamonde
@JCRocamonde Dzięki pakietowi, który utworzyłem, najnowsza wersja programu pip pokazuje, 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.więc wciąż jest to problem.
Josh
@Josh u góry pliku setup.py robi „z konfiguracji importu setuptools” zamiast „z konfiguracji importu distutils.core”.
Następnie usuń także katalog zawierający np /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/na macOS. Nie ma plików, ale Python nadal importuje pusty moduł:
>>>import my_module
>>> my_module.__file__
None
Po usunięciu Python pokazuje:
>>>import my_module
Traceback(most recent call last):File"<stdin>", line 1,in<module>ModuleNotFoundError:No module named 'my_module'
Jak mogę ponownie zainstalować pakiet, z którego mam kod źródłowy przy użyciu setup.py?
ア レ ッ ク ス
5
Pozostawia to również puste katalogi na ich miejscu.
Dilawar,
3
Cześć, próbowałem twojej sugestii, dla niektórych plików, gdy próbuję cat files.txt | xargs rm -rf mówi, że odmowa dostępu, nawet w trybie sudo, np. dla / usr / local / bin / pydoc lub / usr / local / bin / idle Jakieś pomysły dlaczego?
212
Dla mnie działa głównie:
mieć zainstalowany pip, np .:
$ easy_install pip
Sprawdź, jak nazywa się zainstalowany pakiet z punktu widzenia pip:
$ pip freeze
Spowoduje to wyświetlenie nazw wszystkich pakietów, które zainstalowałeś (i które zostały wykryte przez pip). Nazwa może być czasem długa, a następnie użyj tylko nazwy pakietu wyświetlanej na końcu i po niej #egg=. W większości przypadków możesz również zignorować część wersji (cokolwiek następuje ==lub -).
Następnie odinstaluj pakiet:
$ pip uninstall package.name.you.have.found
Jeśli poprosi o potwierdzenie usunięcia paczki, to masz szczęście i zostanie ona usunięta.
pip wykrywa wszystkie pakiety, które zostały zainstalowane przez pip. Powinien także wykryć większość pakietów zainstalowanych przez easy_install lub setup.py, ale w niektórych rzadkich przypadkach może się to nie powieść.
Oto prawdziwa próbka z mojego lokalnego testu z pakietem o nazwie ttr.rdstmcw MS Windows.
Wszystko, co napisano powyżej, nadal obowiązuje, w każdym razie dostępne są teraz niewielkie modyfikacje.
Zainstaluj pip w Pythonie 2.7.9 i Pythonie 3.4
Najnowsze wersje Pythona zawierają pakiet ensurepippozwalający zainstalować pip nawet w trybie offline:
$ python -m surepip --upgrade
W niektórych systemach (takich jak Debian Jessie) jest to niedostępne (aby zapobiec zerwaniu instalacji pythonowego systemu).
Za pomocą greplubfind
W powyższych przykładach założono, że został grepzainstalowany. Miałem (w tym czasie miałem MS Windows na moim komputerze) zainstalowany zestaw narzędzi linuksowych (w tym grep). Alternatywnie użyj natywnego MS Windows findlub po prostu zignoruj to filtrowanie i znajdź nazwę na nieco dłuższej liście wykrytych pakietów python.
jakiego narzędzia do pakowania / wersji używasz, aby to działało? ( distutils, distributeitp ...)
Ciro Santilli 4 病毒 审查 六四 事件 法轮功
1
Używam setuptools. Możesz sprawdzić bitbucket.org/vlcinsky/ttr.aws.utils.s3 (co nie jest idealne). W każdym razie jestem niezadowolony z używania pakietów przestrzeni nazw, czasem import jest przerywany bez widocznego powodu. Ale to inna historia.
Jan Vlcinsky
1
poprawianie siebie. Mimo że importuję setuptools, w rzeczywistości używam distribute. Kolejna lekcja: kiedy instaluję własny pakiet z pypi i planuję opracować inny lokalnie współużytkujący tę samą przestrzeń nazw, nie używaj$ pip install <the package> , nie używaj $ easy_install <the package>, w przeciwnym razie podczas importowania pakietu programistycznego wystąpią konflikty.
Jan Vlcinsky
1
Aby pomóc innym: ponieważ nie jestem rootem, instaluję wszystko w moim domu. Oto co zrobiłem easy_install --user --prefix=$HOME pip. Potem dodaje się następujące w moim PATH: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/bini ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre
3
Należy zaakceptować odpowiedź, ponieważ jest to o wiele łatwiejsze, a pip zwykle i tak jest dostarczany z Pythonem. Jest prosty w użyciu w wierszu polecenia / terminalu - pip uninstall modulelub python -m pip uninstall modulepowinien działać. Powinien również być wieloplatformowy, podobnie jak część Pythona.
Edward
81
Odpowiedź nr 1 ma problemy:
Nie działa na komputerze Mac.
Jeśli zainstalowany jest plik zawierający spacje lub inne znaki specjalne, xargspolecenie zakończy się niepowodzeniem i usunie wszystkie pliki / katalogi pasujące do poszczególnych słów.
-rw rm -rfto niepotrzebne, aw najgorszym mogło usunąć rzeczy, których nie chcę.
Zamiast tego, dla systemu uniksowego:
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 --
Istnieją również nierozwiązywalne problemy z odinstalowaniem setup.pyinstalacji, które nie przeszkadzają w typowym przypadku. Aby uzyskać bardziej kompletną odpowiedź, zobacz tę stronę wiki:
Dlaczego po prostu nie zostawiasz sugestii pod oceną? Należy pamiętać, że te „poważne problemy” dotyczą spraw narożnych.
lpapp,
17
Zostawiłem komentarz pod tym ocenionym. Mój komentarz jest ukryty pod linkiem „ładuj więcej komentarzy”, który klikają bardzo niewiele osób. Udzieliłem również własnej odpowiedzi, ponieważ miałem dużo więcej do powiedzenia, tj. link w mojej odpowiedzi. Również przypadek narożny nie byłby pierwszym terminem, który przychodzi mi do głowy, gdy w pliku jest spacja.
Ian Kelling
Jeśli chodzi o wartość, myślę, że to zawiedzie w przypadku nazw plików zawierających nowe wiersze :) Niezależnie od tego, czy opiekunowie pakietów są tak źli, mam nadzieję, że nigdy się nie dowiem.
Jack O'Connor,
2
W OS X Mavericks przynajmniej xargs nie ma opcji -d. Dlaczego? Ponieważ Apple cię kocha. W każdym razie ma to takie same efekty, jak powyżej, i jest bezpieczne dla przestrzeni i tym podobnych. Jest to jednak specyficzne dla Bash. Po uruchomieniu instalacji z opcją --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski
2
@IanKelling Osadzanie zmiennych w printfłańcuchu formatu nie powiedzie się, jeśli łańcuch zawiera np . Znaki %lub \. Zawsze podawaj ciąg formatu: printf '%s\0' "$line"(unika także echa). Chociaż możesz dodatkowo ominąć pętlę, używająctr '\n' '\0' < files.txt | xargs -0 rm -f
geirha,
39
Najpierw nagraj zainstalowane pliki. Możesz powtórzyć to polecenie, nawet jeśli wcześniej uruchomiłeś setup.py install:
python setup.py install --record files.txt
Kiedy chcesz odinstalować, możesz po prostu:
sudo rm $(cat files.txt)
Działa to, ponieważ polecenie rm usuwa listę plików oddzieloną spacjami, a rekord instalacji jest taką listą.
Czy istnieje sposób, aby sprawdzić nie tylko, czy to mój program go zainstalował, ale także czy od tego czasu żadna inna aplikacja nie używała tego zasobu? Na przykład zainstalowałem narzędzie, aby to zrobić, musiałem zainstalować kilka bibliotek, być może niektóre z nich zostały już zainstalowane (co oznacza, że nie mogę usunąć w procesie odinstalowywania), ale także nie mogę usunąć niczego, co inne aplikacje nie zainstalowałem, ponieważ moja biblioteka zainstalowała się pierwsza ...
Gabrielle
19
Teraz python daje wybór do instalacji pippodczas instalacji (jestem w systemie Windows, a przynajmniej python robi to w przypadku systemu Windows!). Biorąc pod uwagę, że zdecydowałeś się zainstalować pippodczas instalacji Pythona (tak naprawdę nie musisz wybierać, ponieważ jest on domyślny), pipjest już dla Ciebie zainstalowany. Następnie wpisz w pipwierszu polecenia, powinna pojawić się pomoc. Znajdziesz tam niezbędne instrukcje użytkowania. Np. pip listPokazuje listę zainstalowanych pakietów. Możesz użyć
pip uninstall package_name
odinstalować dowolny pakiet, którego już nie chcesz. Przeczytaj więcej tutaj (dokumentacja pip) .
Leniwy sposób: po prostu odinstaluj z menu instalacji systemu Windows (jeśli używasz systemu Windows) lub z polecenia rpm, pod warunkiem, że najpierw go ponownie zainstalujesz po utworzeniu pakietu dystrybucyjnego.
Nie wiem, czy mi się podoba, ale masz rację dla myślenia ortogalicznego. :)
Lennart Regebro,
Szczerze mówiąc, nie jestem pewien, czy stąd „leniwy sposób” ;-) Ale pomyślałem, że wspomnę, że można było stworzyć bardziej „standardowy” instalator. Dziwne, że setup.py nie zapewnia jednak czystego sposobu usuwania pakietów.
RedGlyph,
1
Odinstalowanie wymaga scentralizowanych rejestrów zainstalowanych pakietów i jego plików, a nie ma takiego. Trwają dyskusje na temat ulepszenia tej historii, którą można rozwiązać w Pythonie 2.7 / 3.2 lub 2.8 / 3.3.
Lennart Regebro,
1
@ Lennart: nie będzie Python 2.8, przynajmniej takie jest obecne oficjalne oświadczenie
Piotr Owsiak,
2
@PiotrOwsiak: Tak, ale wtedy nie było to stwierdzenie. 2.8 było w tym czasie nadal możliwe i tak było do momentu zatwierdzenia PEP 404, chyba pod koniec zeszłego roku.
Lennart Regebro,
6
Przejdź do katalogu pakietu python i usuń plik .egg, np .: In python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/
W python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/
Działa, chyba że instaluje zainstalowane pliki poza pakietem, co niektórzy robią, np. Setuptools, który instaluje i polecenie easy_install.
Lennart Regebro
3
Normalnie, jeśli pakiet zostałby zainstalowany przy użyciu pliku pyt.i setup.py zgodnie z opcją, nie byłoby jajka. OTOH, jeśli istnieje, ponieważ użyto easy_install, udokumentowanym sposobem odinstalowania pakietów jest użycie easy_install -m przed usunięciem pliku jaja; w przeciwnym razie skorupy jaj mogą pozostać w pliku easy-install.pth.
Ned Deily,
5
Nie do końca odpowiadam na pytanie, ale coś, co pomaga mi na co dzień:
Zainstaluj swoje pakiety za pomocą
pip install .
To umieszcza pakiet $HOME/.local. Odinstaluj za pomocą
Znacznie łatwiej jest napisać to jako sudo xargs rm -v < install.record.
poolie
1
Jeśli nadal masz pliki, które powinny zostać usunięte po ponownej instalacji pakietu, upewnij się, że folder buildrównież został usunięty. Dlatego zakładając, że pkgjest to pakiet, który chcesz usunąć:
W pewnym momencie w przeszłości w moim globalnym środowisku uruchomiłem „python setup.py install” i miałem duże trudności z odinstalowaniem. Te rozwiązania nie pomogły. „Odinstaluj pip” nie działał z „Nie można odinstalować„ splunk-appinspect ”. Nie znaleziono plików do odinstalowania”. „odinstalowanie sudo pip” nie działało „Nie można odinstalować wymagania splunk-appinspect, niezainstalowany”. Próbowałem odinstalować pip, usunąć pamięć podręczną pip, przeszukać pakiet na dysku twardym itp.
„pip show” ostatecznie doprowadziło mnie do rozwiązania, „Lokalizacja:” wskazywało na katalog, a zmiana nazwy tego katalogu spowodowała usunięcie pakietu z listy pip. Zmieniłem nazwę katalogu z powrotem i nie pojawił się ponownie na liście pip, a teraz mogę ponownie zainstalować mój pakiet w virtualenv.
python setup.py installRaz uruchomiłem w PyCharm, instaluje wszystkie pakiety w moim podstawowym środowisku conda. Później, gdy chcę usunąć wszystkie te pakiety, pip uninstallnie działa. Musiałem je ręcznie usunąć z /anaconda3/lib/python3.7/site-packages :(
Nie widzę więc powodu, dla którego używają pliku setup.py zamiast pisać plik wymagania.txt. Plik wymagań może służyć do instalowania pakietów w środowisku wirtualnym i nie będzie bałaganu w pakietach Pythona.
pip uninstall <your_package>
. Zobacz stackoverflow.com/questions/1231688/... .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.
więc wciąż jest to problem.Odpowiedzi:
Uwaga: Unikaj
python setup.py install
używaniapip install .
Musisz usunąć wszystkie pliki ręcznie, a także cofnąć wszelkie inne czynności wykonywane ręcznie przez instalację.
Jeśli nie znasz listy wszystkich plików, możesz ją ponownie zainstalować za pomocą tej
--record
opcji i rzucić okiem na listę, która się tworzy.Aby zarejestrować listę zainstalowanych plików, możesz użyć:
Gdy chcesz odinstalować, możesz użyć xargs do usunięcia:
Lub jeśli korzystasz z systemu Windows, użyj Powershell:
Następnie usuń także katalog zawierający np
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/
namacOS
. Nie ma plików, ale Python nadal importuje pusty moduł:Po usunięciu Python pokazuje:
źródło
cat files.txt | xargs sudo rm -rf
Dla mnie działa głównie:
mieć zainstalowany pip, np .:
Sprawdź, jak nazywa się zainstalowany pakiet z punktu widzenia pip:
Spowoduje to wyświetlenie nazw wszystkich pakietów, które zainstalowałeś (i które zostały wykryte przez pip). Nazwa może być czasem długa, a następnie użyj tylko nazwy pakietu wyświetlanej na końcu i po niej
#egg=
. W większości przypadków możesz również zignorować część wersji (cokolwiek następuje==
lub-
).Następnie odinstaluj pakiet:
Jeśli poprosi o potwierdzenie usunięcia paczki, to masz szczęście i zostanie ona usunięta.
pip wykrywa wszystkie pakiety, które zostały zainstalowane przez pip. Powinien także wykryć większość pakietów zainstalowanych przez easy_install lub setup.py, ale w niektórych rzadkich przypadkach może się to nie powieść.
Oto prawdziwa próbka z mojego lokalnego testu z pakietem o nazwie
ttr.rdstmc
w MS Windows.Edytuj 2015-05-20
Wszystko, co napisano powyżej, nadal obowiązuje, w każdym razie dostępne są teraz niewielkie modyfikacje.
Zainstaluj pip w Pythonie 2.7.9 i Pythonie 3.4
Najnowsze wersje Pythona zawierają pakiet
ensurepip
pozwalający zainstalować pip nawet w trybie offline:$ python -m surepip --upgrade
W niektórych systemach (takich jak Debian Jessie) jest to niedostępne (aby zapobiec zerwaniu instalacji pythonowego systemu).
Za pomocą
grep
lubfind
W powyższych przykładach założono, że został
grep
zainstalowany. Miałem (w tym czasie miałem MS Windows na moim komputerze) zainstalowany zestaw narzędzi linuksowych (w tym grep). Alternatywnie użyj natywnego MS Windowsfind
lub po prostu zignoruj to filtrowanie i znajdź nazwę na nieco dłuższej liście wykrytych pakietów python.źródło
distutils
,distribute
itp ...)setuptools
. Możesz sprawdzić bitbucket.org/vlcinsky/ttr.aws.utils.s3 (co nie jest idealne). W każdym razie jestem niezadowolony z używania pakietów przestrzeni nazw, czasem import jest przerywany bez widocznego powodu. Ale to inna historia.setuptools
, w rzeczywistości używamdistribute
. Kolejna lekcja: kiedy instaluję własny pakiet z pypi i planuję opracować inny lokalnie współużytkujący tę samą przestrzeń nazw, nie używaj$ pip install <the package>
, nie używaj$ easy_install <the package>
, w przeciwnym razie podczas importowania pakietu programistycznego wystąpią konflikty.easy_install --user --prefix=$HOME pip
. Potem dodaje się następujące w moim PATH:ln -s /home/tflutre/.local/bin/pip ~/bin
,ln -s /home/tflutre/.local/bin/pip2.7 ~/bin
iln -s /home/tflutre/.local/bin/pip2 ~/bin
.pip uninstall module
lubpython -m pip uninstall module
powinien działać. Powinien również być wieloplatformowy, podobnie jak część Pythona.Odpowiedź nr 1 ma problemy:
xargs
polecenie zakończy się niepowodzeniem i usunie wszystkie pliki / katalogi pasujące do poszczególnych słów.-r
wrm -rf
to niepotrzebne, aw najgorszym mogło usunąć rzeczy, których nie chcę.Zamiast tego, dla systemu uniksowego:
A dla Windows:
Istnieją również nierozwiązywalne problemy z odinstalowaniem
setup.py
instalacji, które nie przeszkadzają w typowym przypadku. Aby uzyskać bardziej kompletną odpowiedź, zobacz tę stronę wiki:https://ofswiki.org/wiki/Uninstalling_setup.py_install
źródło
OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
printf
łańcuchu formatu nie powiedzie się, jeśli łańcuch zawiera np . Znaki%
lub\
. Zawsze podawaj ciąg formatu:printf '%s\0' "$line"
(unika także echa). Chociaż możesz dodatkowo ominąć pętlę, używająctr '\n' '\0' < files.txt | xargs -0 rm -f
Najpierw nagraj zainstalowane pliki. Możesz powtórzyć to polecenie, nawet jeśli wcześniej uruchomiłeś
setup.py install
:Kiedy chcesz odinstalować, możesz po prostu:
Działa to, ponieważ polecenie rm usuwa listę plików oddzieloną spacjami, a rekord instalacji jest taką listą.
źródło
Teraz python daje wybór do instalacji
pip
podczas instalacji (jestem w systemie Windows, a przynajmniej python robi to w przypadku systemu Windows!). Biorąc pod uwagę, że zdecydowałeś się zainstalowaćpip
podczas instalacji Pythona (tak naprawdę nie musisz wybierać, ponieważ jest on domyślny),pip
jest już dla Ciebie zainstalowany. Następnie wpisz wpip
wierszu polecenia, powinna pojawić się pomoc. Znajdziesz tam niezbędne instrukcje użytkowania. Np.pip list
Pokazuje listę zainstalowanych pakietów. Możesz użyćodinstalować dowolny pakiet, którego już nie chcesz. Przeczytaj więcej tutaj (dokumentacja pip) .
źródło
Leniwy sposób: po prostu odinstaluj z menu instalacji systemu Windows (jeśli używasz systemu Windows) lub z polecenia rpm, pod warunkiem, że najpierw go ponownie zainstalujesz po utworzeniu pakietu dystrybucyjnego.
Na przykład,
(„foo” jest oczywiście przykładem).
źródło
Przejdź do katalogu pakietu python i usuń plik .egg, np .: In python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/
W python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/
źródło
Nie do końca odpowiadam na pytanie, ale coś, co pomaga mi na co dzień:
Zainstaluj swoje pakiety za pomocą
To umieszcza pakiet
$HOME/.local
. Odinstaluj za pomocąźródło
pip unistall .
nie działało dla mnie, ale działałopip uninstall <package_name>
, dzięki!Prawdopodobnie możesz to zrobić jako alternatywę:
1) Pobierz wersję python -
-> Powyższe polecenie podaje aktualną wersję Pythona, czyli 2.4.3
2) Pobierz katalog instalacyjny Pythona -
-> Z powyższego polecenia można uzyskać katalog instalacyjny - /usr/lib/python2.4/site-packages
3) Stąd możesz usunąć pakiety i pliki jajek Pythona
To działało dla mnie .. I udało mi się odinstalować pakiet, który mnie niepokoił :)
źródło
Myślę, że możesz otworzyć plik setup.py, zlokalizować nazwę pakietu, a następnie poprosić pip o odinstalowanie.
Zakładając, że nazwa jest dostępna w zmiennej „METADATA”:
źródło
Rozszerzając to, co powiedział Martin, nagrywanie danych wyjściowych instalacji i trochę skryptów bash robi całkiem nieźle. Oto co robię ...
I presto. Odinstalowano
źródło
sudo xargs rm -v < install.record
.Jeśli nadal masz pliki, które powinny zostać usunięte po ponownej instalacji pakietu, upewnij się, że folder
build
również został usunięty. Dlatego zakładając, żepkg
jest to pakiet, który chcesz usunąć:Przestań ćwiczyć dla Python3 i usuń pakiet oraz jego plik * .egg-info
źródło
At
{virtualenv}/lib/python2.7/site-packages/
(jeśli nie używasz virtualenv, to{system_dir}/lib/python2.7/dist-packages/
)distribute-0.6.34-py2.7.egg
)easy-install.pth
, usuń odpowiedni wiersz (powinna to być ścieżka do katalogu źródłowego lub pliku jaja).źródło
W pewnym momencie w przeszłości w moim globalnym środowisku uruchomiłem „python setup.py install” i miałem duże trudności z odinstalowaniem. Te rozwiązania nie pomogły. „Odinstaluj pip” nie działał z „Nie można odinstalować„ splunk-appinspect ”. Nie znaleziono plików do odinstalowania”. „odinstalowanie sudo pip” nie działało „Nie można odinstalować wymagania splunk-appinspect, niezainstalowany”. Próbowałem odinstalować pip, usunąć pamięć podręczną pip, przeszukać pakiet na dysku twardym itp.
„pip show” ostatecznie doprowadziło mnie do rozwiązania, „Lokalizacja:” wskazywało na katalog, a zmiana nazwy tego katalogu spowodowała usunięcie pakietu z listy pip. Zmieniłem nazwę katalogu z powrotem i nie pojawił się ponownie na liście pip, a teraz mogę ponownie zainstalować mój pakiet w virtualenv.
źródło
python setup.py install
Raz uruchomiłem w PyCharm, instaluje wszystkie pakiety w moim podstawowym środowisku conda. Później, gdy chcę usunąć wszystkie te pakiety,pip uninstall
nie działa. Musiałem je ręcznie usunąć z /anaconda3/lib/python3.7/site-packages :(Nie widzę więc powodu, dla którego używają pliku setup.py zamiast pisać plik wymagania.txt. Plik wymagań może służyć do instalowania pakietów w środowisku wirtualnym i nie będzie bałaganu w pakietach Pythona.
źródło
Lepszym rozwiązaniem może być usunięcie powiązanych plików za pomocą bash do odczytu poleceń, takich jak:
źródło