Jak mogę znaleźć lokalizację mojej witryny Python-katalogu pakietów?

Jak znaleźć lokalizację mojej witryny-katalogu pakietów?

Author: Daryl Spitzer, 2008-09-23

17 answers

Istnieją dwa rodzaje katalogów pakietów witryn, global i na użytkownika.

  1. Global site-packages ("dist-packages") katalogi są wyświetlane w sys.path po uruchomieniu:

    python -m site
    

    Dla bardziej zwięzłej listy Uruchom getsitepackages z modułu strony w kodzie Pythona:

    python -c "import site; print(site.getsitepackages())"
    

    uwaga: z virtualenvs getsitepackages nie jest dostępny, sys.path z góry wyświetli się lista virtualenv ' s site-packages / align = "left" /

  2. Na użytkownika katalog site-packages (PEP 370 ) jest miejscem, w którym Python instaluje Twoje lokalne Pakiety:

    python -m site --user-site
    

    Jeśli to wskazuje na nieistniejący katalog sprawdź status zakończenia Pythona i zobacz python -m site --help dla wyjaśnienia.

    podpowiedź: uruchamianie pip list --user lub pip freeze --user daje listę wszystkich zainstalowanych na użytkownika pakietów witryny.

 182
Author: Peterino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 22:27:35
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(lub po prostu pierwszy element z site.getsitepackages()[0])

 613
Author: eudoxos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-29 13:50:18

Z "Jak zainstalować Django" dokumentacja (choć jest to przydatne nie tylko do instalacji Django) - wykonaj następujące czynności z powłoki:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

Sformatowany pod kątem czytelności (a nie jako jednolinijkowy), który wygląda następująco:

from distutils.sysconfig import get_python_lib
print(get_python_lib())
 296
Author: Daryl Spitzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 05:26:36

Dla Ubuntu ,

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

...nie jest poprawne.

Wskaże ci /usr/lib/pythonX.X/dist-packages

Ten folder zawiera tylko pakiety, które Twój system operacyjny zainstalował automatycznie, aby uruchamiać programy.

w systemie ubuntu folder site-packages zawierający pakiety zainstalowane przez setup_tools\easy_install \ pip będzie znajdować się w /usr/local/lib/pythonX.X/dist-packages

Drugi folder jest prawdopodobnie bardziej przydatny, jeśli przypadek użycia jest związany z instalacją lub odczytem źródła kod.

Jeśli nie używasz Ubuntu, prawdopodobnie możesz bezpiecznie skopiować pierwsze pole kodu do terminala.

 97
Author: David Hollander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 03:08:09

To mi się udało:

python -m site --user-site
 62
Author: Ramashri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-22 04:34:22

Jak zauważyli inni, distutils.sysconfig ma odpowiednie ustawienia:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

...chociaż domyślne site.py robi coś nieco bardziej prymitywnego, parafrazując poniżej:

import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])

(dodaje również ${sys.prefix}/lib/site-python i dodaje obie ścieżki dla sys.exec_prefix, jeśli ta stała będzie inna).

To powiedziane, jaki jest kontekst? Nie powinieneś mieszać bezpośrednio ze swoją site-packages; setuptools / distutils będzie działać do instalacji, a twój program może działać w virtualenv, gdzie twój pythonpath jest całkowicie user-local, więc nie powinno też zakładać bezpośredniego korzystania z systemowych pakietów site-packages.

 21
Author: Charles Duffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 17:14:02

Załóżmy, że zainstalowałeś pakiet 'django'. zaimportuj go i wpisz w katalogu (django). Pokaże Ci wszystkie funkcje i atrybuty tego modułu. Wpisz interpreter Pythona -

>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']

Możesz zrobić to samo, jeśli masz zainstalowany mercurial.

To dla Snow Leoparda. Ale myślę, że to powinno działać w ogóle, jak również.
 20
Author: Sumod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-30 16:36:55

Natywne pakiety systemowe zainstalowane z instalacją Pythona w systemach opartych na Debianie można znaleźć pod adresem :

/usr / lib / python2. 7 / dist-packages /

W OSX- /Library/Python/2.7/site-packages

Używając tego małego kodu:

from distutils.sysconfig import get_python_lib
print get_python_lib()

Lista pakietów zainstalowanych przez pip znajduje się pod adresem:

/usr / local / bin /

Można też po prostu napisać następujące polecenie, aby wyświetlić listę wszystkich ścieżek, w których znajdują się Pakiety Pythona.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

Uwaga: lokalizacja może się różnić w zależności od systemu operacyjnego, jak w OSX

>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']
 14
Author: fnatic_shank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 05:37:59

Wszystkie odpowiedzi (lub: ta sama odpowiedź powtarzana w kółko) są niewystarczające. To co chcesz zrobić to:

from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
  """ class easy_install had problems with the fist parameter not being
      an instance of Distribution, even though it was. This is due to
      some import-related mess.
      """

  def __init__(self):
    from distutils.dist import Distribution
    dist = Distribution()
    self.distribution = dist
    self.initialize_options()
    self._dry_run = None
    self.verbose = dist.verbose
    self.force = None
    self.help = 0
    self.finalized = 0

e = easy_install_default()
import distutils.errors
try:
  e.finalize_options()
except distutils.errors.DistutilsError:
  pass

print e.install_dir

Ostatnia linia pokazuje katalog 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.

 13
Author: cheater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-06 02:40:22

Uwaga na marginesie: proponowane rozwiązanie (distutils.sysconfig.get_python_lib()) nie działa, gdy istnieje więcej niż jeden katalog site-packages (zgodnie z zalecanym przez ten artykuł ). Zwróci tylko główny katalog stron-packages.

Niestety, ja też nie mam lepszego rozwiązania. Python nie śledzi katalogów site-packages, tylko pakiety znajdujące się w nich.
 11
Author: Vladimir Vagaytsev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 06:30:52

To mi pasuje. Otrzymasz zarówno foldery dist-packages, jak i site-packages. Jeśli folder nie znajduje się na ścieżce Pythona, nie będzie i tak dobrze ci to robi.

import sys; 
print [f for f in sys.path if f.endswith('packages')]

Wyjście (instalacja Ubuntu):

['/home/username/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
 9
Author: just_an_old_guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-30 16:36:22

Dodatkowa uwaga do wspomnianej już funkcji get_python_lib: Na niektórych platformach używane są różne katalogi dla modułów specyficznych dla platformy (np. Moduły wymagające kompilacji). Jeśli przejdziesz plat_specific=True do funkcji, otrzymasz Pakiety witryny dla konkretnych pakietów platformy.

 8
Author: Armin Ronacher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 17:16:22
from distutils.sysconfig import get_python_lib
print get_python_lib()
 7
Author: Florian Bösch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 17:09:54

Powinno to działać na wszystkich dystrybucjach w środowisku wirtualnym i poza nim ze względu na jego" low-tech " charakter. Moduł systemu operacyjnego zawsze znajduje się w katalogu nadrzędnym 'site-packages'

import os; print(os.path.dirname(os.__file__) + '/site-packages')

Aby zmienić katalog do katalogu site-packages używam następującego aliasu (na systemach *nix):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
 7
Author: Pyramid Newbie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 07:32:10

Odpowiedź na Stare pytanie. Ale użyj do tego ipythona.

pip install ipython
ipython 
import imaplib
imaplib?

To da następujące wyjście O pakiecie imaplib -

Type:        module
String form: <module 'imaplib' from '/usr/lib/python2.7/imaplib.py'>
File:        /usr/lib/python2.7/imaplib.py
Docstring:  
IMAP4 client.

Based on RFC 2060.

Public class:           IMAP4
Public variable:        Debug
Public functions:       Internaldate2tuple
                        Int2AP
                        ParseFlags
                        Time2Internaldate
 2
Author: Sahil Agarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 09:12:47

Nowoczesny sposób stdlib jest za pomocą sysconfig Moduł dostępny w wersji 2.7 i 3.2+. Python obecnie używa osiem ścieżek ( docs):

  • stdlib : katalog zawierający standardowe pliki biblioteki Pythona, które nie są specyficzne dla platformy.
  • platstdlib: katalog zawierający standardowe pliki biblioteki Pythona, które są specyficzne dla platformy.
  • platlib : katalog dla site-specific, pliki specyficzne dla platformy.
  • purelib : katalog dla plików specyficznych dla witryny, nie związanych z platformą.
  • include : katalog dla plików nagłówkowych innych niż platformy.
  • platinclude : katalog dla plików nagłówkowych specyficznych dla platformy.
  • scripts : katalog plików skryptów.
  • data : katalog plików z danymi.

W większości przypadków użytkownicy znajdujący to pytanie będą interesuje Cię ścieżka 'purelib' (w w niektórych przypadkach , może zainteresować Cię również 'platlib'). W przeciwieństwie do aktualnie akceptowanej odpowiedzi, metoda ta nie powinna źle się zachowywać w zależności od tego, czy masz aktywowany virtualenv.

Na poziomie systemu (jest to Python 3.7.0 na mac OS):

>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'

Z venv, dostaniesz coś takiego

>>> import sysconfig                                                                                                                                                
>>> sysconfig.get_paths()['purelib']                                                                                                                                
'/private/tmp/.venv/lib/python3.7/site-packages'

Skrypt powłoki jest również dostępny do wyświetlania tych szczegółów, które można wywołać wykonując sysconfig jako moduł:

python -m sysconfig

Uwaga: sysconfig (źródło) nie należy mylić z podmodułem distutils.sysconfig (źródło ) wspomnianym w kilku innych odpowiedziach tutaj. Jest to zupełnie inny moduł i brakuje w nim funkcji get_paths omówionej powyżej.

 1
Author: wim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-10 17:30:24

Musiałem zrobić coś nieco innego dla projektu, nad którym pracowałem: znaleźć relative katalog site-packages w stosunku do podstawowego prefiksu instalacyjnego. Jeśli folder site-packages znajdował się w /usr/lib/python2.7/site-packages, chciałem użyć /lib/python2.7/site-packages. W rzeczywistości natknąłem się na systemy, w których site-packages było w /usr/lib64, A przyjęta odpowiedź nie zadziałała na tych systemach.

Podobnie jak odpowiedź cheatera, moje rozwiązanie zagląda głęboko w wnętrzności Distutils, aby znaleźć ścieżkę, która faktycznie przechodzi around inside setup.py. To było takie bolesne, że nie chcę, żeby ktoś musiał to znowu rozgryźć.

import sys
import os
from distutils.command.install import INSTALL_SCHEMES

if os.name == 'nt':
    scheme_key = 'nt'
else:
    scheme_key = 'unix_prefix'

print(INSTALL_SCHEMES[scheme_key]['purelib'].replace('$py_version_short', (str.split(sys.version))[0][0:3]).replace('$base', ''))

, które powinny wydrukować coś w rodzaju /Lib/site-packages lub /lib/python3.6/site-packages.

 0
Author: MultipleMonomials,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-16 09:49:25