Jak znaleźć lokalizację mojego katalogu pakietów witryn?
python
installation
Daryl Spitzer
źródło
źródło
pip show <package name>
Odpowiedzi:
Istnieją dwa typy katalogów pakietów witryn, globalne i na użytkownika .
Katalogi globalnych pakietów serwisów („pakiety dystrybucyjne ”) są wyświetlane
sys.path
po uruchomieniu:Dla bardziej zwięzły listy prowadzonej
getsitepackages
z modułem miejscu w kodzie Pythona:Uwaga: Z virtualenvs getitepackages nie jest dostępny ,
sys.path
z góry jednak poprawnie wyświetli katalog pakietów witryny wirtualnych. W Pythonie 3 możesz zamiast tego użyć modułu sysconfig :Każdego użytkownika site-pakiety katalog ( PEP 370 ), gdzie Python instaluje lokalne pakiety:
Jeśli to wskazuje na nieistniejący katalog, sprawdź status wyjścia Pythona i zobacz
python -m site --help
wyjaśnienia.Wskazówka: Uruchamianie
pip list --user
lubpip freeze --user
daje listę wszystkich zainstalowanych pakietów witryn użytkownika .Praktyczne wskazówki
<package>.__path__
pozwala zidentyfikować lokalizację konkretnej paczki: ( szczegóły )<module>.__file__
pozwala zidentyfikować lokalizację konkretnego modułu: ( różnica )Uruchom,
pip show <package>
aby wyświetlić informacje o pakiecie w stylu Debiana:źródło
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(działa to zarówno na Pythonie 2, jak i 3).python -c "import site; print(site.getsitepackages()[0])"
(lub tylko pierwszy element z
site.getsitepackages()[0]
)źródło
hasattr(sys,'real_prefix')
a następnie heurystycznie określam pakiety witryn[p for p in sys.path if p.endswith('site-packages')][-1]
(plus sprawdzam, czy został znaleziony przed wykonaniem[-1]
.Rozwiązanie, które:
... to ten jednowarstwowy:
Sformatowany pod kątem czytelności (zamiast używania jako jednowarstwowy), wygląda następująco:
Źródło: bardzo stara wersja dokumentacji „Jak zainstalować Django” (chociaż jest to przydatne nie tylko do instalacji Django)
źródło
cdsitepackages
, aby bezpośrednio przejść do katalogu pakietów witryny./usr/lib/python3/dist-packages
zamiast/usr/lib/python3.5/dist-packages
.Dla Ubuntu ,
...nie jest poprawne.
Wskaże ci to
/usr/lib/pythonX.X/dist-packages
Ten folder zawiera tylko pakiety, które system operacyjny automatycznie zainstalował, w celu uruchomienia programów.
W Ubuntu będzie znajdować się folder site-packages zawierający pakiety zainstalowane przez setup_tools \ easy_install \ pip
/usr/local/lib/pythonX.X/dist-packages
Drugi folder jest prawdopodobnie najbardziej przydatny, jeśli przypadek użycia dotyczy instalacji lub odczytu kodu źródłowego.
Jeśli nie korzystasz z Ubuntu, prawdopodobnie bezpiecznie wklejasz pierwszą skrzynkę z kodem do terminala.
źródło
module.__file__
jest to lepszy sposób. Jeśli próbują coś zainstalować… po prostu użyj narzędzi.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
na Ubuntu (choć jest to po/usr/local/...
liście). Dostajesz tylko coś/usr/local
za pośrednictwemsudo pip
i nie powinieneś używaćsudo pip
na Ubuntu, chyba że zdecydujesz się stworzyć własną dystrybucję: jeśli używaszsudo pip
, Twoim obowiązkiem jest upewnić się, że wszystkie zależności między obecnymi i przyszłymi modułami Pythona zainstalowanymi przezsudo apt
lubsudo pip
są kompatybilne. Zastanów się, jaki problemvirtualenv
został rozwiązanydist-packages
Ubuntu 2 w (L).Oto, co zadziałało dla mnie:
źródło
~/.local/lib/python2.7/site-packages
).virtualenv
to zrobię , narzeka, że pakiet nie istnieje. jak wywołać pakiety zainstalowane w niestandardowej lokalizacji?Załóżmy, że zainstalowałeś pakiet „django”. zaimportuj go i wpisz dir (django). Pokaże Ci wszystkie funkcje i atrybuty tego modułu. Wpisz interpreter Pythona -
Możesz zrobić to samo, jeśli zainstalowałeś mercurial.
To jest dla Snow Leopard. Ale myślę, że powinno to również ogólnie działać.
źródło
django.__file__
do tego zamiast__path__
. i nie, nie jest to gwarancją, że ma to coś wspólnego z pakietami witryn, ale z takimi rzeczami jak django, że najprawdopodobniej zainstalowałeś pip , zrobi to, gdy się spieszysz i można go użyć do inne cele (np. odczyt domyślnego pliku konfiguracyjnego z systemu plików).foo.bar
pakietu:python -c "import foo.bar as _; print(_.__path__[0])"
Jak zauważyli inni,
distutils.sysconfig
ma odpowiednie ustawienia:... choć domyślnie
site.py
robi coś bardziej prymitywnego, sparafrazowanego poniżej:(dodaje również
${sys.prefix}/lib/site-python
i dodaje obie ścieżkisys.exec_prefix
, jeśli ta stała powinna być inna).To powiedziawszy, jaki jest kontekst? Nie powinieneś zadzierać
site-packages
bezpośrednio; setuptools / distutils będą działały podczas instalacji, a twój program może działać w virtualenv, gdzie twoja ścieżka python jest całkowicie lokalna dla użytkownika, więc nie powinna zakładać bezpośredniego korzystania z systemowych pakietów witryn.źródło
python2
OSX i Ubuntu zi bez virtualenv, ale wcale nie działapython3
.python3
.Nowoczesnym sposobem stdlib jest
sysconfig
moduł, dostępny w wersji 2.7 i 3.2+.Uwaga :
sysconfig
( źródła ) nie należy mylić zdistutils.sysconfig
podmodułem ( źródłem ) wymienionym w kilku innych odpowiedziach tutaj. Ten ostatni jest zupełnie innym modułem i nie maget_paths
funkcji omówionej poniżej.Python używa obecnie ośmiu ścieżek ( dokumentów ):
W większości przypadków użytkownicy, którzy znajdą to pytanie, byliby zainteresowani ścieżką „purelib” (w niektórych przypadkach możesz być również zainteresowany „platlib”). W przeciwieństwie do obecnie przyjętej odpowiedzi, ta metoda nadal działa niezależnie od tego, czy masz aktywowaną funkcję virtualenv.
Na poziomie systemu (jest to Python 3.7.0 w systemie Mac OS):
Z venv dostaniesz coś takiego
Dostępny jest również skrypt powłoki, który wyświetla te szczegóły, które można wywołać, wykonując
sysconfig
jako moduł:źródło
platlib
, np./usr/local/lib/python3.6/site-packages
? Tradycyjnie rzeczy lokalnie instalowane powinny wejść/usr/local
.Natywne pakiety systemowe zainstalowane z instalacją Pythona w systemach opartych na Debianie można znaleźć pod adresem:
W OSX -
/Library/Python/2.7/site-packages
za pomocą tego małego kodu:
Listę zainstalowanych pakietów
pip
można znaleźć na stronie:Lub można po prostu napisać następujące polecenie, aby wyświetlić listę wszystkich ścieżek, w których znajdują się pakiety Pythona.
Uwaga: lokalizacja może się różnić w zależności od systemu operacyjnego, na przykład w OSX
źródło
site.getsitepackages()
z instalacji systemu, stąd pakiety dist, inne instalacje pokażą pakiety strony.Wszystkie odpowiedzi (lub: ta sama odpowiedź powtarzana w kółko) są nieodpowiednie. Co chcesz zrobić, to:
Ostatni wiersz pokazuje reż. Instalacji. Działa na Ubuntu, podczas gdy powyższe nie. Nie pytaj mnie o Windows lub inne dists, ale ponieważ jest to dokładnie ten sam katalog, którego domyślnie używa easy_install, prawdopodobnie jest poprawny wszędzie tam, gdzie działa easy_install (więc wszędzie, nawet Mac). Baw się dobrze. Uwaga: oryginalny kod zawiera wiele przekleństw.
źródło
easy_install
i nie zawiedzie z wdziękiem, jeśli jest niedostępna, co jest nieodpowiednie :)Uwaga dodatkowa: proponowane rozwiązanie (
distutils.sysconfig.get_python_lib()
) nie działa, gdy istnieje więcej niż jeden katalog pakietów stron (zgodnie z zaleceniami tego artykułu ). Zwróci tylko główny katalog pakietów witryny.Niestety, nie mam też lepszego rozwiązania. Wydaje się, że Python nie śledzi katalogów pakietów stron, tylko zawarte w nich pakiety.
źródło
get_python_lib()
którego uruchamiany z poziomu virtualenv pokazuje pakiety strony Pythona używane do tworzenia virtualenv, a nie pakiety site virtualenv .To działa dla mnie. Otrzymasz zarówno foldery dist-package, jak i foldery pakietów stron. Jeśli folder nie znajduje się na ścieżce Pythona, i tak nie będzie ci dobrze.
Dane wyjściowe (instalacja Ubuntu):
źródło
Powinno to działać we wszystkich dystrybucjach w środowisku wirtualnym i poza nim ze względu na jego „niski poziom” technologiczny. Moduł os zawsze znajduje się w katalogu nadrzędnym „pakietów witryn”
Aby zmienić katalog na katalog pakietów stron używam następującego aliasu (w systemach * nix):
źródło
Dodatkowa uwaga do
get_python_lib
wspomnianej już funkcji: na niektórych platformach dla modułów specyficznych dla platformy wykorzystywane są różne katalogi (np. Moduły wymagające kompilacji). Jeśli przejdzieszplat_specific=True
do tej funkcji, otrzymasz pakiety witryny dla pakietów specyficznych dla platformy.źródło
źródło
pip show poda wszystkie szczegóły dotyczące pakietu: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
Aby uzyskać lokalizację:
źródło
Odpowiedz na stare pytanie. Ale użyj do tego ipython.
To da następujące dane wyjściowe dotyczące pakietu imaplib -
źródło
Powinieneś spróbować tego polecenia, aby określić lokalizację instalacji pip
Python 2
Python 3
źródło
Musiałem zrobić coś nieco innego dla projektu, nad którym pracowałem: znajdź względny katalog pakietów stron w stosunku do podstawowego prefiksu instalacji. Jeśli folder site-packages był w
/usr/lib/python2.7/site-packages
środku, chciałem tę/lib/python2.7/site-packages
część. W rzeczywistości napotkałem systemy, w którychsite-packages
był/usr/lib64
, i zaakceptowana odpowiedź NIE działała na tych systemach.Podobnie do odpowiedzi oszusta, moje rozwiązanie zagląda głęboko w trzewia Distutils, aby znaleźć ścieżkę, która faktycznie przechodzi wokół
setup.py
. Zrozumienie tego było dla mnie takim bólem, że nie chcę, aby ktokolwiek musiał to znowu wymyślać.To powinno wydrukować coś takiego jak
/Lib/site-packages
lub/lib/python3.6/site-packages
.źródło
Jeśli jest już dodany do
PYTHONPATH
, możesz również zrobić coś takiegoźródło