Jak odinstalować pakiet Pythona, który został zainstalowany przy użyciu distutils?


92

Czy możesz po prostu usunąć katalog z instalacji Pythona, czy są jakieś pliki, które musisz usunąć?

Odpowiedzi:


45

Różni się w zależności od opcji, które przekazujesz installi zawartości plików konfiguracyjnych distutils w systemie / w pakiecie. Nie wierzę, że jakiekolwiek pliki są modyfikowane poza katalogami określonymi w ten sposób.

Warto zauważyć, że w distutils nie ma obecnie polecenia odinstalowania .

Warto również zauważyć, że usunięcie pakietu / jajka może powodować problemy z zależnościami - narzędzia takie jak easy_installpróba złagodzenia takich problemów.


4
Czy możesz zaktualizować to, aby bezpośrednio zająć się pozostałą częścią pytania dotyczącą plików?
S.Lott

Myślałem, że tak - żadne pliki nie są tworzone poza katalogami określonymi przez konfigurację distutils i flagi instalacji, więc wszelkie "pokutujące" pliki będą istnieć w tych katalogach. To zależy od pakietu.
powolny

2
@cdleary: dzięki, ale miałem nadzieję, że po prostu wyjaśnisz i wzmocnisz swoją odpowiedź, a nie dodasz długiego wątku komentarza.
S.Lott

2
@ S.Lott: Przepraszam, ale nie wiem, która część odpowiedzi wymaga wyjaśnienia - czy możesz być bardziej szczegółowy?
cdleary

1
msg139773 Data: 2011-07-04 14:35 distutils2 / Packaging udostępnia teraz funkcję usuwania i komendę usuwania pysetup.
Edward

19

Trzy rzeczy, które zostaną zainstalowane, które będziesz musiał usunąć, to:

  1. Pakiety / moduły
  2. Skrypty
  3. Pliki danych

Teraz w moim systemie Linux żyją one w:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Ale w systemie Windows jest bardziej prawdopodobne, że znajdują się one całkowicie w katalogu dystrybucyjnym Pythona. Nie mam pojęcia o OSX, poza tym, że wolę podążać za wzorcem Linuksa.


14

Inny hack oparty na znacznikach czasu:

  1. Utwórz kotwicę: touch /tmp/ts
  2. Zainstaluj ponownie pakiet do usunięcia: python setup.py install --prefix=<PREFIX>
  3. Usuń pliki nowsze niż plik kotwicy: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1. Nie podoba mi się | xargs rm -r. Zalecam ręczne przejrzenie każdego pliku . Na ext4 (i innych systemach plików) findspowoduje to również wyświetlenie wszystkich folderów . Jeśli Twój prefiks to /usr, zamierzasz usunąć/usr/* .
Mateen Ulhaq

8

Tak, można bezpiecznie po prostu usunąć wszystko, co zainstalował distutils. Dotyczy to zainstalowanych folderów lub plików .egg. Oczywiście wszystko, co zależy od tego kodu, nie będzie już działać.

Jeśli chcesz, aby działał ponownie, po prostu zainstaluj go ponownie.

Nawiasem mówiąc, jeśli używasz distutils, rozważ również użycie funkcji wielu wersji. Pozwala na zainstalowanie wielu wersji dowolnego pojedynczego pakietu. Oznacza to, że nie musisz usuwać starej wersji pakietu, jeśli chcesz po prostu zainstalować nowszą wersję.


5

W Ubuntu 12.04 odkryłem, że jedyne miejsce, w którym domyślnie musisz szukać, to pod

/usr/local/lib/python2.7/

I po prostu usuń powiązany folder i plik, jeśli taki istnieje!


Czasami w / usr / lib / python <2.7 / 3.6>
Vineet

4

Jeśli jest to do celów testowych i / lub programistycznych, setuptools ma plik Develop polecenie które aktualizuje się za każdym razem, gdy wprowadzasz zmianę (więc nie musisz odinstalowywać i ponownie instalować za każdym razem, gdy wprowadzasz zmianę). Możesz również odinstalować pakiet za pomocą tego polecenia.

Jeśli to zrobisz, wszystko, co zadeklarujesz jako skrypt, zostanie pozostawione jako plik pokutujący.


4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

usuwa wszystkie pliki i pozostawia puste katalogi.

To nie jest idealne rozwiązanie, powinno wystarczyć, aby uniknąć konfliktów dotyczących pakietów.

Następnie możesz zakończyć zadanie ręcznie, jeśli chcesz, czytając files.txt, lub być odważniejszym i zautomatyzować również usuwanie pustych katalogów.

Bezpiecznym pomocnikiem byłoby:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Testowano w Pythonie 2.7.6, Ubuntu 14.04.


3

dla Pythona w Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?

2

Właśnie odinstalowałem pakiet Pythona i chociaż nie jestem pewien, czy zrobiłem to idealnie, jestem dość pewny.

Zacząłem od uzyskania listy wszystkich plików związanych z Pythonem, uporządkowanych według daty, przy założeniu, że wszystkie pliki w moim pakiecie będą miały mniej więcej ten sam znacznik czasu, a żadne inne pliki nie będą.

Na szczęście mam zainstalowanego Pythona pod /opt/Python-2.6.1; gdybym używał Pythona, który jest dostarczany z moją dystrybucją Linuksa, musiałbym przeszukać wszystko /usr, co zajęłoby dużo czasu.

Następnie przejrzałem tę listę i zauważyłem z ulgą, że wszystko, co chciałem zrobić, składało się z jednego katalogu /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/i jednego pliku /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info.

Więc właśnie je usunąłem.

Oto jak otrzymałem posortowaną według daty listę plików:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Nawiasem mówiąc, myślę, że to musi być GNU „znajdź”; smak, który dostajesz w OS X, nie zna „-printf '% T @'”)

Używam tego cały czas.


2

W systemie Windows 7

Panel sterowania -> Programy -> Odinstaluj

, następnie

wybierz pakiet Pythona do usunięcia.


@Mauricio Nie widzę na liście starych wersji, ale widzę pliki egg w pakietach witryn. Czy to problem?

1

W systemie Mac OSX ręcznie usuń te 2 katalogi ze ścieżkiToPython / site-packages / będą działać:

  • {packageName}
  • {nazwa_pakietu} - {wersja} -info

na przykład, aby usunąć pyasn1 , który jest projektem zainstalowanym przez distutils:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Aby dowiedzieć się, gdzie są twoje pakiety witryn:

python -m site

1
Działa zgodnie z oczekiwaniami.
c1377554,

-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. 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.

Następnie wpisuję:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Gotowe!


1
Spróbuj wyjaśnić, co robisz i dlaczego, zamiast pokazywać tylko wyjście konsoli.
Headhunter Xamd
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.