Czy istnieje sposób na znalezienie wszystkich pakietów Python PyPI, które zostały zainstalowane za pomocą easy_install lub pip? Mam na myśli wykluczenie wszystkiego, co zostało / jest zainstalowane przy pomocy narzędzi dystrybucji (w tym przypadku apt-get na Debianie).
python
pip
easy-install
pypi
Jürgen A. Erhard
źródło
źródło
Odpowiedzi:
pip freeze
wyświetli listę zainstalowanych pakietów i ich wersji. Umożliwia także zapisanie tych pakietów w pliku, który można później wykorzystać do skonfigurowania nowego środowiska.https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
źródło
pip freeze
ipip list
wypisz wszystko. Nie wykluczają pakietów, które nie zostały zainstalowanepip
.pip freeze
niezawodny w skryptach, podczas gdypip list
generuje nieoczekiwane błędy, gdy jest używany z potokami.pip list -l
Lubpip list --local
najlepsza odpowiedź, patrz stackoverflow.com/a/43012269/491884 autor: @MJBOd wersji 1.3 pip możesz teraz używać
pip list
Ma kilka przydatnych opcji, w tym możliwość wyświetlania nieaktualnych pakietów. Oto dokumentacja: https://pip.pypa.io/en/latest/reference/pip_list/
źródło
pip freeze
pip list --user
pokazuje tylko pakiety zainstalowane przez użytkownika i wyklucza pakiety ogólnosystemowe.Jeśli ktoś się zastanawia, możesz użyć polecenia „pokaż pip”.
Spowoduje to wyświetlenie katalogu instalacyjnego danego pakietu.
źródło
Jeśli Debian zachowuje się jak najnowsze wersje Ubuntu w odniesieniu do
pip install
domyślnego celu, jest to całkiem łatwe: instaluje się w nim/usr/local/lib/
zamiast/usr/lib
(apt
domyślny cel). Sprawdź /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747Jestem użytkownikiem ArchLinux i podczas eksperymentów z pipem spotkałem ten sam problem. Oto jak rozwiązałem to w Arch.
Kluczem jest tutaj
/usr/lib/python2.7/site-packages
, do którego katalogu instaluje się pip, YMMV.pacman -Qo
jest jak łuk za pac Kage człowiek sprawdza ager na własność pliku.No package
jest częścią zamian daje gdy pakiet nie jest właścicielem pliku:error: No package owns $FILENAME
. Trudne obejście: pytam o to,__init__.py
ponieważpacman -Qo
jest trochę nieświadomy, jeśli chodzi o katalogi :(Aby to zrobić dla innych dystrybucji, musisz dowiedzieć się, gdzie
pip
instaluje się rzeczy (po prostusudo pip install
coś), jak zapytać o własność pliku (metoda Debian / Ubuntudpkg -S
) i co to jest zwrot „żadna paczka nie posiada tej ścieżki” (Debian / Ubuntu isno path found matching pattern
). Użytkownicy Debiana / Ubuntu, strzeżcie się:dpkg -S
zawiodą, jeśli dacie mu link symboliczny. Po prostu rozwiąż najpierw, używającrealpath
. Lubię to:Użytkownicy Fedory mogą spróbować (dzięki @eddygeek):
źródło
dpkg
napisz błąd do stderr, więc muszę dodać przekierowanie2>&1
. I dla produkcji międzynarodowej dodajLANG=
przedxargs dpkg -s
. ised
jest także miłym narzędziem;), aby zachować tylko nazwę pakietu ścieżki. Tak więc kończę na:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
Zacząć od:
Aby wyświetlić listę wszystkich pakietów. Po znalezieniu żądanego pakietu użyj:
Spowoduje to wyświetlenie szczegółów dotyczących tego pakietu, w tym jego folderu. Możesz pominąć pierwszą część, jeśli znasz już nazwę pakietu
Kliknij tutaj, aby uzyskać więcej informacji na temat pip show i tutaj aby uzyskać więcej informacji na temat listy pip.
Przykład:
źródło
pip.get_installed_distributions()
poda listę zainstalowanych pakietówźródło
Poniżej jest trochę powolny, ale daje dobrze sformatowaną listę pakietów, które
pip
są świadome. Oznacza to, że nie wszystkie z nich zostały zainstalowane „przez” pip, ale wszystkie powinny być w stanie zaktualizować za pomocą pip.Powodem, dla którego działa powoli, jest to, że wyświetla zawartość całego repozytorium pypi. Złożyłem zgłoszenie sugerujące, aby
pip list
zapewnić podobną funkcjonalność, ale bardziej efektywnie.Przykładowe dane wyjściowe: (ograniczyło wyszukiwanie do podzbioru zamiast „.” Dla wszystkich).
źródło
Dodając do odpowiedzi @Paul Woolcock,
utworzy plik wymagań ze wszystkimi zainstalowanymi pakietami wraz z zainstalowanymi numerami wersji w aktywnym środowisku w bieżącej lokalizacji. Bieganie
zainstaluje pakiety określone w pliku wymagań.
źródło
Nowsze wersje pipa mają możliwość robienia tego, co OP chce za pomocą
pip list -l
lubpip freeze -l
(--list
).Na Debianie (przynajmniej) strona podręcznika nie wyjaśnia tego, a ja to odkryłem - przy założeniu, że funkcja musi istnieć - z
pip list --help
.Ostatnie komentarze sugerują, że ta funkcja nie jest oczywista ani w dokumentacji, ani w istniejących odpowiedziach (choć niektórzy o tym sugerują), więc pomyślałem, że powinienem opublikować. Wolałbym to zrobić jako komentarz, ale nie mam punktów reputacji.
źródło
pip freeze --local
przez 8 lat.pip list --local
jest również dostępny ... ale zauważ, że pytanie OP nie dotyczy środowisk wirtualnych (które--local
obsługuje), ale rozróżniania pakietów dystrybucyjnych zsudo pip install
pakietów.Zauważ, że jeśli masz wiele wersji Pythona zainstalowanych na twoim komputerze, możesz mieć kilka wersji pip związanych z każdą z nich.
W zależności od skojarzeń może być konieczne zachowanie ostrożności podczas używania polecenia pip:
Pracował dla mnie, gdy uruchamiam Python3.4. Po prostu użycie
pip list
zwróciło błądThe program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.źródło
Jak wskazał @almenon, to już nie działa i nie jest obsługiwanym sposobem uzyskania informacji o pakiecie w kodzie. Z powyższego wynika wyjątek:
Aby to zrobić, możesz zaimportować
pkg_resources
. Oto przykład:Jestem na
v3.6.5
źródło
Oto jeden linijka dla fedora lub innych dystrybucji rpm (na podstawie wskazówek @barraponto):
Dodaj to do poprzedniego polecenia, aby uzyskać czystszy wynik:
źródło
Pobierz wszystkie nazwy plików / folderów
site-packages/
(idist-packages/
jeśli istnieje) i użyj menedżera pakietów, aby usunąć te, które zostały zainstalowane przez pakiet.źródło
pip freeze wyświetla listę wszystkich zainstalowanych pakietów, nawet jeśli nie przez pip / easy_install. W CentOs / Redhat znajduje się pakiet zainstalowany przez rpm.
źródło
Jeśli korzystasz z dystrybucji python Anaconda , możesz użyć
conda list
polecenia, aby zobaczyć, co zostało zainstalowane za pomocą jakiej metody:Aby pobrać wpisy zainstalowane przez
pip
(w tym ewentualniepip
również):Oczywiście prawdopodobnie chcesz po prostu wybrać pierwszą kolumnę, którą możesz zrobić (z wyłączeniem,
pip
jeśli to konieczne):Wreszcie możesz pobrać te wartości i odinstalować je wszystkie za pomocą pip:
Zwróć uwagę na użycie
-y
flagi,pip uninstall
aby uniknąć konieczności potwierdzania usunięcia.źródło
Dla tych, którzy nie mają zainstalowanego pipa, znalazłem ten szybki skrypt na github (działa z Python 2.7.13):
źródło
lista pip [opcje] Pełną listę można znaleźć tutaj
źródło
Przynajmniej dla Ubuntu (może także innych) działa to (zainspirowane poprzednim postem w tym wątku):
źródło