Czy możesz po prostu usunąć katalog z instalacji Pythona, czy są jakieś pliki, które musisz usunąć?
Odpowiedzi:
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.
Trzy rzeczy, które zostaną zainstalowane, które będziesz musiał usunąć, to:
Teraz w moim systemie Linux żyją one w:
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.
Inny hack oparty na znacznikach czasu:
touch /tmp/tspython setup.py install --prefix=<PREFIX>find <PREFIX> -cnewer /tmp/ts | xargs rm -r| 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/* .
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ę.
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.
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.
dla Pythona w Windows:
python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
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.
W systemie Mac OSX ręcznie usuń te 2 katalogi ze ścieżkiToPython / site-packages / będą działać:
na przykład, aby usunąć pyasn1 , który jest projektem zainstalowanym przez distutils:
Aby dowiedzieć się, gdzie są twoje pakiety witryn:
python -m site
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!