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ąć?

Hortitude
źródło

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.

cdleary
źródło
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.

Ali Afshar
źródło
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
maksymk
źródło
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ę.

Salim Fadhley
źródło
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!

Hydrox24
źródło
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.

Jason Baker
źródło
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.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
3

dla Pythona w Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
user8074545
źródło
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.

offby1
źródło
2

W systemie Windows 7

Panel sterowania -> Programy -> Odinstaluj

, następnie

wybierz pakiet Pythona do usunięcia.

b_dev
źródło
@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
Lynne
źródło
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!

goodpen
źródło
1
Spróbuj wyjaśnić, co robisz i dlaczego, zamiast pokazywać tylko wyjście konsoli.
Headhunter Xamd