17 ответов:
существует два типа каталогов site-packages,глобальные и для каждого пользователя.
глобальные site-packages (" dist-packages") каталоги перечислены в
sys.pathпри запуске:python -m siteдля более краткого списка выполнить
getsitepackagesС модуль сайта в коде Python:python -c "import site; print(site.getsitepackages())"Примечание: С virtualenvs getsitepackages is недоступно,
sys.pathсверху будет правильно указан каталог site-packages virtualenv.The для каждого пользователя каталог site-packages (PEP 370) где Python устанавливает ваши локальные пакеты:
python -m site --user-siteесли это указывает на несуществующий каталог, проверьте состояние выхода Python и см.
python -m site --helpдля объяснения.подсказка: под управлением
pip list --userилиpip freeze --userдает вам список всех установленных для каждого пользователя сайт-пакеты.
>>> import site; site.getsitepackages() ['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'](или просто первый пункт с
site.getsitepackages()[0])
С " Как установить Django " документация (хотя это полезно не только для установки Django) - выполните следующее из оболочки:
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"отформатирован для удобства чтения (а не использовать в качестве подводки), которая выглядит следующим образом:
from distutils.sysconfig import get_python_lib print(get_python_lib())
Для Ubuntu,
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"...не правильно.
Он будет указывать вам!--1-->
эта папка содержит только пакеты, которые ваша операционная система автоматически установила для запуска программ.
на ubuntu, папка site-packages, содержащая пакеты, установленные через setup_tools\easy_install\pip, будет находиться в
/usr/local/lib/pythonX.X/dist-packagesвторая папка, вероятно, более полезна, если случай использования связано с установкой или чтением исходного кода.
Если вы не используете Ubuntu, вы, вероятно, безопасно копируете первое поле кода в терминал.
как уже отмечалось,
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, где ваш pythonpath полностью является локальным пользователем,поэтому он не должен предполагать использование системных пакетов сайта напрямую.
допустим, вы установили пакет '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.
Это для снежного барса. Но я думаю, что это должно работать в целом.
собственные системные пакеты, установленные с установкой 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 / local / bin/
или можно просто написать следующую команду, чтобы перечислить все пути где находятся пакеты 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']
все ответы (или: один и тот же ответ повторяется снова и снова) неадекватны. Что вы хотите сделать это:
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в последней строке отображается установочный каталог. Не спрашивайте меня о windows или других дисках, но поскольку это тот же самый dir, который использует easy_install по умолчанию, это, вероятно, правильно везде, где работает easy_install (так, везде, даже Mac). Повеселись. Примечание: оригинальный код имеет много ругательств в оно.
боковое Примечание: предлагаемое решение (
distutils.sysconfig.get_python_lib()) не работает, когда есть несколько каталогов site-packages (как рекомендовано в статье). Он будет возвращать только основной каталог site-packages.увы, у меня нет лучшего решения. Python, похоже, не отслеживает каталоги site-packages, а только пакеты внутри них.
это работает для меня. Он получит вам как папки 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']
дополнительно к
get_python_libфункция уже упоминалось: на некоторых платформах различные каталоги используются для конкретных модулей платформы (например: модули, которые требуют компиляции). Если вы пройдетеplat_specific=Trueв функцию вы получаете пакеты сайта для конкретных пакетов платформы.
Это должно работать на всех дистрибутивах В и из виртуальной среды из-за его" низкотехнологичной " природы. Модуль ОС всегда находится в Родительском каталоге 'site-packages'
import os; print(os.path.dirname(os.__file__) + '/site-packages')чтобы изменить dir на сайт-пакеты dir я использую следующий псевдоним (на *Nix системах):
alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
ответ на старый вопрос. Но для этого используйте 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
современный способ stdlib использует
sysconfigмодуль, доступный в версии 2.7 и 3.2+. Python в настоящее время использует восемь дорожки (docs):
- stdlib: каталог, содержащий стандартные файлы библиотеки Python, которые не зависят от платформы.
- platstdlib: каталог, содержащий стандартные файлы библиотеки Python, которые зависят от платформы.
- platlib: каталог для специфичных для сайта и платформы файлов.
- purelib: каталог для специфичных для сайта, не связанных с платформой файлов.
- включить: каталог для файлов заголовков, не зависящих от платформы.
- platinclude: каталог для специфичных для платформы заголовочных файлов.
- скрипты каталог файлов скрипт.
- сведения каталог файлов данных.
в большинстве случаев пользователи, обнаруживающие этот вопрос, будут заинтересованы в пути "purelib" (in в некоторых случаях, вы можете быть заинтересованы в 'platlib' тоже). В отличие от принятого в настоящее время ответа, этот метод не должен плохо себя вести в зависимости от того, активирован ли virtualenv.
на системном уровне (это Python 3.7.0 на 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'С a венв, ты получишь что-то вроде этого
>>> import sysconfig >>> sysconfig.get_paths()['purelib'] '/private/tmp/.venv/lib/python3.7/site-packages'сценарий оболочки также доступен для отображения этих сведений, которые можно вызвать, выполнив
sysconfigкак модуль:python -m sysconfigПримечание:
sysconfig(источник) не следует путать сdistutils.sysconfigподмодуля (источник) упоминается в нескольких других ответах здесь. Это совершенно другой модуль, и ему не хватает
Я должен был сделать что-то немного другое для проекта, над которым я работал: найти относительные каталог 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.
Comments