Как мне найти местоположение моего каталога пакетов сайта Python?

Как мне узнать, где находится каталог моих сайтов-пакетов?


person Daryl Spitzer    schedule 23.09.2008    source источник
comment
Если вам просто нужно точное местоположение одного пакета, вы можете использовать pip show <package name>   -  person joshuakcockrell    schedule 25.07.2017


Ответы (20)


Есть два типа каталогов пакетов сайтов: глобальные и для каждого пользователя.

  1. Глобальные пакеты сайтов ("dist -packages ") будут перечислены в sys.path при запуске:

    python -m site
    

    Для получения более краткого списка запустите getsitepackages из модуля сайта в Python. код:

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

    Примечание. В virtualenvs пакеты GetSite недоступны, sys.path сверху тем не менее, правильно отобразит каталог пакетов сайта virtualenv. В Python 3 вы можете использовать модуль sysconfig вместо этого:

    python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
    
  2. Каталог пакетов сайта для каждого пользователя (PEP 370) - это место, где Python устанавливает ваши локальные пакеты:

    python -m site --user-site
    

    Если это указывает на несуществующий каталог, проверьте статус выхода Python и см. python -m site --help для пояснений.

    Подсказка: Запуск pip list --user или pip freeze --user дает вам список всех установленных для каждого пользователя пакетов сайта.


Практические советы

  • <package>.__path__ позволяет определить местоположение (а) конкретного пакета: (подробности)

    $ python -c "import setuptools as _; print(_.__path__)"
    ['/usr/lib/python2.7/dist-packages/setuptools']
    
  • <module>.__file__ позволяет определить расположение конкретного модуля: (разница)

    $ python3 -c "import os as _; print(_.__file__)"
    /usr/lib/python3.6/os.py
    
  • Запустите pip show <package>, чтобы отобразить информацию о пакете в стиле Debian:

    $ pip show pytest
    Name: pytest
    Version: 3.8.2
    Summary: pytest: simple powerful testing with Python
    Home-page: https://docs.pytest.org/en/latest/
    Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
    Author-email: None
    License: MIT license
    Location: /home/peter/.local/lib/python3.4/site-packages
    Requires: more-itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, pluggy
    
person Peterino    schedule 06.09.2017
comment
в файле virtualenv есть каталог пакетов сайта. Вы можете получить каталог для специфичных для сайта модулей внутри / вне virtualenv, используя python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" (он работает как на Python 2, так и на Python 3). ). - person jfs; 13.09.2017
comment
Отлично. И чтобы получить первый: python -c "import site; print(site.getsitepackages()[0])" - person Brent Faust; 04.05.2018
comment
Это должно быть в любом базовом руководстве по использованию Python. Я много лет занимался питоном и ничего не знал о модуле сайта. Спас бы столько головной боли ... - person salotz; 18.10.2019
comment
Я предложил изменить официальный учебник Python. Подробности см. В PR # 16974, и спасибо за предложение @salotz! - person Peterino; 06.11.2019
comment
Я думаю, что stackoverflow.com/a/52638888/1365918 - лучший ответ на этот вопрос. - person kapad; 11.02.2020
comment
Спасибо, Петерино, команда python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])' сэкономила мне несколько часов на отладку пакета при компиляции tenorflow с помощью bazel. - person PhatHV; 18.10.2020

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

(или только первый элемент с site.getsitepackages()[0])

person eudoxos    schedule 18.10.2012
comment
Это хорошо, но, к сожалению, эта функция доступна только в python2.7. Итак, хорошее решение, если вы используете python2.7 или выше, но не работаете с python 2.6 и ниже. - person Dan Niero; 20.01.2013
comment
@TonySeek: Я только что пробовал использовать pypy (2.0.2), и он отлично работает. - person eudoxos; 08.12.2013
comment
python -c импорт сайта; печать (site.getsitepackages ()) - person Lars Schneider; 10.12.2013
comment
Я получаю AttributeError: объект 'module' не имеет атрибута 'getsitepackages' при использовании с virtualenv (python 2.7.8), хотя приведенное ниже решение distutils работает. - person radtek; 05.08.2014
comment
@radtek: для venv я обнаруживаю venv через hasattr(sys,'real_prefix'), а затем эвристически определяю пакеты сайта из [p for p in sys.path if p.endswith('site-packages')][-1] (плюс проверяю, найден ли он, прежде чем выполнять [-1]. - person eudoxos; 15.08.2014
comment
как я могу настроить локальную папку сайта в моем домашнем местоположении? - person Малъ Скрылевъ; 14.05.2015
comment
@ МалъСкрылевъ создайте для этого отдельный вопрос, у вас больше шансов получить ответ. - person eudoxos; 15.05.2015
comment
@radtek Это известная ошибка, что модуль сайта не работает для virtualenv github.com/pypa/ virtualenv / issues / 355 - person Guillem Cucurull; 06.07.2016
comment
@eudoxos прав. Вы можете получить все пути, если используете sys.path. - person Zhang LongQI; 03.02.2017
comment
@ МалъСкрылевъ Вы можете просто использовать pip install --user PACKAGE_NAME - person Zhang LongQI; 03.02.2017

Решение, которое:

  • за пределами virtualenv - предоставляет путь к глобальным пакетам сайтов,
  • insidue a virtualenv - предоставляет пакеты сайта virtualenv

... это однострочный:

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

Отформатированный для удобства чтения (а не для использования в качестве однострочного), это выглядит следующим образом:

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


Источник: очень старая версия " Как установить Django "документацию (хотя это полезно не только для установки Django)

person Daryl Spitzer    schedule 23.09.2008
comment
Предоставляет ли virtualenv возможность найти свои пакеты сайтов? - person Daryl Spitzer; 13.11.2011
comment
Вы можете использовать virtualenvwrapper, у которого есть команда cdsitepackages, чтобы напрямую перейти в каталог site-packages среды. - person john2x; 10.02.2012
comment
@PiotrDobrogost: у меня работает на Python 2.7 в виртуальном окружении Linux - person RichVel; 06.03.2013
comment
Первый комментарий больше не применяется: он показал правильное расположение как снаружи, так и внутри virtualenv. - person astrojuanlu; 15.04.2016
comment
@njwilson Спасибо за решение. Действительно помогло. в системе Windows он обычно остается в Python Path \ Lib \ site-packages - person Doogle; 27.12.2016
comment
У меня не сработало в Windows 10 с использованием Linux bash, возвращает /usr/lib/python3/dist-packages вместо /usr/lib/python3.5/dist-packages. - person Delgan; 15.09.2017

Для Ubuntu,

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

...не является правильным.

Он укажет вам на /usr/lib/pythonX.X/dist-packages

Эта папка содержит только пакеты, которые ваша операционная система автоматически установила для запуска программ.

В ubuntu папка site-packages, содержащая пакеты, установленные через setup_tools \ easy_install \ pip, будет находиться в /usr/local/lib/pythonX.X/dist-packages

Вторая папка, вероятно, более полезна, если вариант использования связан с установкой или чтением исходного кода.

Если вы не используете Ubuntu, вы, вероятно, безопасно скопируете первое поле кода в терминал.

person David Hollander    schedule 06.01.2011
comment
Если спрашивающий ищет конкретное местоположение пакета, module.__file__ - лучший способ. Если они пытаются что-то установить… просто используйте инструменты. - person Tobu; 30.11.2012
comment
'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages() в Ubuntu (хотя в списке он идет после /usr/local/...). Вы получаете что-то только в /usr/local через sudo pip, и вам не следует использовать sudo pip в Ubuntu, если вы не решили создать свой собственный дистрибутив: если вы используете sudo pip, вы обязаны убедиться, что все зависимости текущего и будущего < / i> модули python, установленные через sudo apt или sudo pip, совместимы. Подумайте, какая проблема virtualenv была создана для решения - person jfs; 13.09.2017
comment
Четкое объяснение, чтобы понять различия 2 dist-packages в (L) Ubuntu. - person Timo; 28.11.2017

Вот что сработало для меня:

python -m site --user-site
person Ramashri    schedule 22.05.2012
comment
Для меня это указывает на папку, которой даже не существует (~/.local/lib/python2.7/site-packages). - person Neil Traft; 11.07.2014
comment
то же самое, в OS X Mavericks мой домашний .local - это не то, что я хотел найти, плюс да, его на самом деле нет в любом случае. - person radtek; 11.08.2014
comment
Это в моей основной папке / Библиотеке, мне пришлось вручную перейти к ней, по какой-то причине прямой полный путь не работал - person ericjam; 18.09.2015
comment
как мне использовать установленные здесь пакеты? если я делаю virtualenv, он жалуется, что пакет не существует. как вызвать пакеты, установленные в произвольном месте? - person AbtPst; 26.04.2016
comment
для меня этот ответ не работает ни на osx внутри, ни вне virtualenv, ни на ubuntu без virtualenv. - person jitter; 18.05.2016
comment
Это полезно в определенных обстоятельствах. Например, если вы используете setuptools, вы можете вызвать разработку с помощью чего-то вроде python setup.py develop --script-dir ~/bin --install-dir /home/thomp/.local/lib/python2.7/site-packages - person dat; 30.09.2016
comment
Это говорит вам, где Python будет искать пользовательские пакеты. Комментарии вроде даже не существуют и не то, что я хотел найти, не имеют смысла в этом контексте. - person Honest Abe; 31.03.2017

Допустим, вы установили пакет django. импортируйте его и введите dir (django). Он покажет вам все функции и атрибуты этого модуля. Введите интерпретатор Python -

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

Вы можете сделать то же самое, если установили mercurial.

Это для Snow Leopard. Но я думаю, что это должно работать и в целом.

person Sumod    schedule 23.02.2011
comment
››› import pg ››› print pg .__ path__ Traceback (последний вызов последний): файл ‹stdin›, строка 1, в ‹module› AttributeError: объект 'module' не имеет атрибута 'path ' - person Dannid; 05.03.2013
comment
он работает, мне нужно найти пакет sklearn, чтобы добавить его в путь PYDEV, спасибо. - person berkay; 03.01.2015
comment
используйте для этого django.__file__, а не __path__. и нет, это не гарантия, что это имеет какое-либо отношение к пакетам сайта, но с такими вещами, как django, которые вы, скорее всего, установили pip, он будет работать, когда вы находитесь в поторопитесь, и его можно использовать и для других целей (например, для чтения файла конфигурации по умолчанию из файловой системы). - person JL Peyret; 16.03.2019
comment
Основываясь на этом и других ответах, вы можете сделать это в одной строке из командной строки, чтобы получить путь к вашему foo.bar пакету: python -c "import foo.bar as _; print(_.__path__[0])" - person snark; 12.12.2019

Современный способ stdlib использует модуль sysconfig, доступный в версиях 2.7 и 3.2+. В отличие от текущего принятого ответа, этот метод по-прежнему работает независимо от того, активна ли у вас виртуальная среда.

Примечание: sysconfig (исходный код) не следует путать с подмодулем distutils.sysconfig (источник ) упоминается в нескольких других ответах здесь. Последний - это совершенно другой модуль, и в нем отсутствует функция get_paths, обсуждаемая ниже.

В настоящее время Python использует восемь путей (docs):

  • stdlib: каталог, содержащий файлы стандартной библиотеки Python, не зависящие от платформы.
  • platstdlib: каталог, содержащий файлы стандартной библиотеки Python, зависящие от платформы.
  • platlib: каталог для файлов для конкретных платформ и сайтов.
  • purelib: каталог для файлов, специфичных для сайта, не зависящих от платформы.
  • include: каталог для файлов заголовков, не зависящих от платформы.
  • platinclude: каталог для файлов заголовков, зависящих от платформы.
  • scripts: каталог для файлов скриптов.
  • данные: каталог для файлов данных.

В большинстве случаев пользователям, которые задают этот вопрос, будет интересен путь purelib (в некоторых случаях вас может заинтересовать в платлибе тоже). Путь purelib - это место, где обычные пакеты Python будут установлены такими инструментами, как pip.

На системном уровне вы увидите что-то вроде этого:

# Linux
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/lib/python3.8/site-packages

# macOS (brew installed python3.8)
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/Cellar/[email protected]/3.8.3/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages

# Windows
C:\> py -c "import sysconfig; print(sysconfig.get_path('purelib'))"
C:\Users\wim\AppData\Local\Programs\Python\Python38\Lib\site-packages

С венвом вы получите что-то вроде этого

# Linux
/tmp/.venv/lib/python3.8/site-packages

# macOS
/private/tmp/.venv/lib/python3.8/site-packages

# Windows
C:\Users\wim\AppData\Local\Temp\.venv\Lib\site-packages

Функция sysconfig.get_paths() возвращает dict всех соответствующих путей установки. , пример в Linux:

>>> import sysconfig
>>> sysconfig.get_paths()
{'stdlib': '/usr/local/lib/python3.8',
 'platstdlib': '/usr/local/lib/python3.8',
 'purelib': '/usr/local/lib/python3.8/site-packages',
 'platlib': '/usr/local/lib/python3.8/site-packages',
 'include': '/usr/local/include/python3.8',
 'platinclude': '/usr/local/include/python3.8',
 'scripts': '/usr/local/bin',
 'data': '/usr/local'}

Также доступен сценарий оболочки для отображения этих сведений, который можно вызвать, выполнив sysconfig как модуль:

python -m sysconfig
person wim    schedule 04.10.2018
comment
Это отличный ответ, я рад, что новый модуль sysconfig упрощает это. Есть ли способ получить локальный префикс platlib, например, /usr/local/lib/python3.6/site-packages? Традиционно локально установленные вещи должны идти в /usr/local. - person eudoxos; 07.12.2019
comment
Самый лучший ответ на этот вопрос! Спасибо. Единственное, чего мне не хватало, - это порядок, в котором эти местоположения проверяются при обнаружении оператора импорта. Кроме того, выполняется ли предварительный поиск / кеширование любого из этих мест при загрузке python? Зная, что это тоже было бы полезно ИМО. - person kapad; 11.02.2020

Как отмечали другие, distutils.sysconfig имеет соответствующие настройки:

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

... хотя по умолчанию site.py делает что-то более грубое, перефразированное ниже:

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

(он также добавляет ${sys.prefix}/lib/site-python и добавляет оба пути для sys.exec_prefix, если эта константа отличается).

Тем не менее, каков контекст? Вы не должны напрямую связываться со своим site-packages; setuptools / distutils будет работать для установки, и ваша программа может работать в virtualenv, где ваш путь к python полностью локален для пользователя, поэтому он также не должен предполагать использование системных пакетов сайта напрямую.

person Charles Duffy    schedule 23.09.2008
comment
надежно работает с python2 на osx и ubuntu с virtualenv и без него, но не с python3 вообще. - person jitter; 18.05.2016
comment
2008 год был некоторое время назад - этот ответ был за три месяца до выпуска Python 3.0. - person Charles Duffy; 18.05.2016
comment
конечно, но сегодня мой комментарий может помочь. поправьте меня, если ошибаюсь. более того, я не отрицал ни этот, ни какой-либо другой ответ в отношении python3. - person jitter; 18.05.2016

Собственные системные пакеты, установленные с установкой python в системах на основе Debian, можно найти по адресу:

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

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

используя этот небольшой код:

from distutils.sysconfig import get_python_lib
print get_python_lib()

Однако список пакетов, установленных через pip, можно найти по адресу:

/ USR / местные / бен /

Или можно просто написать следующую команду, чтобы перечислить все пути, по которым находятся пакеты python.

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

Примечание: расположение может отличаться в зависимости от вашей ОС, например, в 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']
person fnatic_shank    schedule 08.08.2013
comment
Если я правильно помню, dist-packages специфичны для Debian и производных. - person Samuel; 22.07.2017
comment
@SamuelSantana, вы правы. dist-пакеты специфичны для систем на основе debian. В этом случае я вызвал site.getsitepackages() из установки системы, следовательно, пакеты dist, другие установки будут отображать пакеты сайтов. - person fnatic_shank; 23.03.2018

Все ответы (или: один и тот же ответ повторяется снова и снова) неадекватны. Что вы хотите сделать:

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

Последняя строка показывает вам установочный каталог. Работает на Ubuntu, а вышеперечисленные - нет. Не спрашивайте меня об окнах или других дисках, но поскольку это тот же самый каталог, который easy_install использует по умолчанию, он, вероятно, верен везде, где работает easy_install (так, везде, даже для Mac). Повеселись. Примечание: в исходном коде много нецензурных словечек.

person cheater    schedule 06.02.2012
comment
Спасибо, это очень полезно, на py3 с скобками для печати он дает мне /usr/local/lib/python3.4/dist-packages Я пытаюсь понять, как получить /usr/lib/python3.4/dist -пакеты так что дальше придется поиграть. - person Stuart Axon; 02.12.2015
comment
требует внешней библиотеки easy_install и не завершается корректно, если недоступна, что неадекватно :) - person jitter; 18.05.2016
comment
на самом деле, это не идеально, но у меня это сработало и потребовало много времени, чтобы разобраться, поэтому я помещаю его здесь в надежде, что кто-то еще сможет использовать время, которое я уже потратил на это. - person cheater; 25.05.2016

Примечание: предлагаемое решение (distutils.sysconfig.get_python_lib()) не работает, когда существует более одного каталога пакетов сайтов (как рекомендовано в этой статье). Он вернет только основной каталог сайтов-пакетов.

Увы, лучшего решения у меня тоже нет. Python, похоже, не отслеживает каталоги пакетов сайтов, а только пакеты внутри них.

person Community    schedule 10.11.2009
comment
Я предполагаю, что по этой причине get_python_lib() при запуске из virtualenv показывает site-packages Python, используемый для создания virtualenv, а не site-packages virtualenv. - person Piotr Dobrogost; 12.11.2011
comment
@Piotr Это, вероятно, ошибка в distutils.sysconfig. Я только что протестировал его и получил внутренние пакеты сайта, как и ожидалось. - person Tobu; 30.11.2012
comment
Также протестирован с Python 2.7, установленным в virtualenv в Linux, и метод distutils.sysconfig отлично работает для получения внутренних пакетов сайта Python. - person RichVel; 06.03.2013

pip show предоставит все сведения о пакете: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]

Чтобы узнать местоположение:

pip show <package_name>| grep Location

В Linux вы можете перейти в папку site-packages:

cd $(python -c "import site; print(site.getsitepackages()[0])")
person Sourabh Potnis    schedule 03.01.2019
comment
Добавление в конец команды OS X 'cut' также даст вам строку: pip3 show foo | grep Location | cut -d ' ' -f 2 - person crajun; 04.12.2020
comment
cut - это GNU coreutil gnu.org/software/coreutils / manual / html_node / - person xcvbn; 30.06.2021

У меня это работает. Он предоставит вам папки как dist-packages, так и site-packages. Если папка находится не на пути Python, это все равно не принесет вам много пользы.

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

Вывод (установка Ubuntu):

['/home/username/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
person just_an_old_guy    schedule 30.03.2012
comment
принятый ответ - рекомендуемый способ, поэтому вы должны сказать, почему ваш лучше, поскольку это своего рода взлом - person CharlesB; 30.03.2012
comment
Что не так со взломом? ;) Это проще и легче понять и запомнить, если вы работаете в интерактивном режиме. - person just_an_old_guy; 31.03.2012

Это должно работать на всех дистрибутивах в виртуальной среде и за ее пределами из-за своей "низкотехнологичной" природы. Модуль os всегда находится в родительском каталоге site-packages.

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

Чтобы изменить каталог на каталог сайтов-пакетов, я использую следующий псевдоним (в системах * nix):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
person Pyramid Newbie    schedule 15.03.2015
comment
Мне нравится ваш низкотехнологичный подход. Вот версия, не зависящая от платформы: import os; print (os.path.join (os.path.dirname (os .__ file__), 'site-packages')) - person DougR; 04.12.2020
comment
мой исходный код тоже не зависит от платформы. Windows принимает как прямую косую черту ('/'), так и обратную косую черту (``) в качестве разделителя пути. Просто в Windows чаще используется обратная косая черта. - person Pyramid Newbie; 14.03.2021

Дополнительное примечание к уже упомянутой функции get_python_lib: на некоторых платформах разные каталоги используются для модулей, специфичных для платформы (например, для модулей, требующих компиляции). Если вы передадите plat_specific=True функции, вы получите пакеты сайта для пакетов, специфичных для платформы.

person Armin Ronacher    schedule 23.09.2008

Вы должны попробовать эту команду, чтобы определить место установки pip

Python 2

pip show six | grep "Location:" | cut -d " " -f2

Python 3

pip3 show six | grep "Location:" | cut -d " " -f2
person Community    schedule 06.05.2019

Ответ на старый вопрос. Но используйте для этого ipython.

pip install ipython
ipython 
import imaplib
imaplib?

Это даст следующий вывод о пакете 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
person Sahil Agarwal    schedule 18.07.2016
comment
Это не каталог сайтов-пакетов, а каталог, в который установлен пакет. Это также полезно только в том случае, если вы используете iPython, а не для того, чтобы программно получить каталог для установки. - person Daniel Underwood; 11.12.2016

Для тех, кто использует поэзию, вы можете найти свой путь к виртуальной среде с помощью poetry debug:

$ poetry debug

Poetry
Version: 1.1.4
Python:  3.8.2

Virtualenv
Python:         3.8.2
Implementation: CPython
Path:           /Users/cglacet/.pyenv/versions/3.8.2/envs/my-virtualenv
Valid:          True

System
Platform: darwin
OS:       posix
Python:   /Users/cglacet/.pyenv/versions/3.8.2

Используя эту информацию, вы можете составить список пакетов сайта:

ls /Users/cglacet/.pyenv/versions/3.8.2/envs/my-virtualenv/lib/python3.8/site-packages/
person cglacet    schedule 19.11.2020

Для проекта, над которым я работал, мне пришлось сделать что-то немного другое: найти каталог relative site-packages относительно префикса базовой установки. Если папка site-packages находится в /usr/lib/python2.7/site-packages, мне нужна /lib/python2.7/site-packages часть. Фактически, я встречал системы, в которых site-packages находился в /usr/lib64, и принятый ответ НЕ работал в этих системах.

Подобно ответу читера, мое решение проникает глубоко в кишки Distutils, чтобы найти путь, который фактически проходит внутри setup.py. Было так больно осознавать, что я не хочу, чтобы кому-то когда-либо приходилось разбираться в этом снова.

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', ''))

Это должно напечатать что-то вроде /Lib/site-packages или /lib/python3.6/site-packages.

person MultipleMonomials    schedule 16.12.2017

То, что не было упомянуто, что я считаю полезным, если у вас установлены две версии Python, например. как 3.8, так и 3.5 на вашем компьютере могут быть две папки, называемые пакетами сайтов. В этом случае вы можете указать версию Python, используя следующее:

py -3.5 -c "import site; print(site.getsitepackages()[1])
person Stamatis Tiniakos    schedule 16.09.2020