Usuwanie modułu Pythona zainstalowanego w trybie programowania

93

Cześć, próbowałem pakowania Pythona za pomocą setuptools i aby przetestować, zainstalowałem moduł w trybie programowania. to znaczy

python setup.py develop

To dodało mój katalog modułów do sys.path. Teraz chcę usunąć moduł, czy jest jakiś sposób, aby to zrobić?

Z góry dziękuję

copyninja
źródło
4
Zacznij używać piplub innego menedżera z możliwością deinstalacji do zarządzania pakietami Pythona.
Tomasz Wysocki
1
@Tomasz Jak robisz odpowiednik python setup.py developz pip?
akaihola
7
pip install -e.
Tomasz Wysocki
11
„pip” nie jest właściwą odpowiedzią na to pytanie. Zainstalowanie projektu, który tworzysz za pomocą „pip”, aby go uruchomić lub używać, oznacza, że ​​będziesz musiał ponownie instalować za każdym razem, gdy modyfikujesz kod źródłowy. Prawidłowym sposobem jest użycie „setup.py develop” zgodnie z pierwotnym stwierdzeniem w pytaniu.
Jonathan Hartley
6
@JonathanHartley To po prostu fałsz; pip ma --editable(lub -e) argument, który zachowuje się mniej więcej tak samo jak setuptools 'develop . Wydawało mi się, że może --editableto nowsza niż Twój komentarz, ale nie - szybkie przeszukanie repozytorium pip na GitHubie ujawnia odniesienia do elementów edytowalnych w commitach z 2009 roku. Co więcej, widzę, że zwracał na to uwagę Tomasz Wysocki, zanim skomentowałeś !
Mark Amery,

Odpowiedzi:

225

Użyj opcji --uninstalllub -u, aby developnp .:

python setup.py develop --uninstall

Spowoduje to usunięcie go z pliku easy-install.pth i łącze .egg-link. Jedyną rzeczą, której nie robi, jest usuwanie skryptów (jeszcze).

PJ Eby
źródło
3
Zauważ, że jeśli twoja wersja deweloperska zainstalowała jakieś pliki wykonywalne i zmieniłeś je w swoim setup.py, powinieneś je ręcznie usunąć.
norok2
1
Uruchamiam go tak, jak wyjaśniono, żadnych błędów w danych wyjściowych, ale nadal mogę zaimportować mój pakiet programistyczny globalnie, wygląda na to, że nie został usunięty. EDYCJA: Wiem dlaczego musiałem go uruchomić z --useropcją tak jak podczas instalacji:python setup.py develop --uninstall --user
Marek
Nie sądzę, że jest to bezpieczne, ponieważ może się zmienić zmiana nazwy modułu (na przykład). Musisz ręcznie usunąć wszystko.
matematyka
@ norok2 jakie są ręczne polecenia, które należy wykonać, aby usunąć te pliki wykonywalne. O ile wiem, powyższe działa dla niektórych wersji python / pip, chociaż nie jestem pewien, które z nich.
Charlie Parker
1
@CharlieParker rmlub w delzależności od systemu operacyjnego. Chodziło mi o to, że jeśli miałeś jakieś pliki wykonywalne w czasie instalacji, a następnie zmienisz ich nazwy (lub usuniesz je) w swoim setup.py, to setup.pynie będziesz już o nich wiedział (bez względu na twoją pip/ pythonwersję i musisz się nimi zająć zazwyczaj znajdują się w jakimś binkatalogu na systemach POSIX (czytaj Linuxy, BSD, MacOS X), nie pamiętam o Win.
norok2
16

Edytuj plik easy-install.pth w katalogu site-packages i usuń wiersz wskazujący na wersję rozwojową tego pakietu.

Zooko
źródło
Tak, zrobiłem dokładnie to i był tam jeszcze jeden plik o nazwie pakiet-jajko-link lub coś, co usunąłem, a teraz odniesienie do modułu jest usunięte.Dzięki :)
copyninja
10
„setup.py develop --uninstall” robi to za Ciebie, zobacz odpowiedź @ pjeby
Jonathan Hartley
3
To zadziałało, gdy się develop --uninstallnie udało, ponieważ podzieliłem projekt na dwie części, a niewłaściwy pozostał w oryginalnym katalogu.
Wesley Baugh,
1

Miałem już wcześniej podobny problem. To, co zrobiłem, to załadowałem powłokę Pythona, zaimportowałem moduł, a następnie wydrukowałem jego __file__atrybut. Stamtąd po prostu usunąłbym folder lub plik, który był powiązany.

To, na co możesz chcieć zwrócić uwagę, to użycie virtualenv, ten system pozwala na utworzenie instancji języka Python niezależnie od systemu. Wszystkie moduły, które instalujesz lub używasz w tej instancji, są niezależne, łącznie z wersją modułu.

Wszystkie moje projekty trzymam teraz wewnątrz własnego, zawartego w nim virtualenv, który pozwala mi instalować i używać dowolnych modułów bez martwienia się o zepsucie modułów z innych projektów.

Tanerax
źródło
Cóż, kiedy następnym razem będę bawić się pakietami, użyję tego, aby nie schrzanić mojego systemu Python. Dzięki za informację
copyninja