Как мне найти местоположение моего каталога site-packages?
python
installation
Дэрил Спитцер
источник
источник
pip show <package name>
Ответы:
Существует два типа каталогов сайтов-пакетов, глобальные и для каждого пользователя .
Глобальные каталоги site-packages (" dist-packages ") перечислены
sys.path
при запуске:Для более краткого списка запустите
getsitepackages
из модуля сайта в коде Python:Примечание. С помощью virtualenvs getsitepackages недоступна , однако ,
sys.path
сверху будет правильно отображаться каталог site-packages для virtualenv. В Python 3 вы можете использовать вместо этого модуль sysconfig :В каталоге site-packages для каждого пользователя ( PEP 370 ) Python устанавливает ваши локальные пакеты:
Если это указывает на несуществующий каталог, проверьте состояние выхода Python и посмотрите
python -m site --help
объяснения.Подсказка: работает
pip list --user
илиpip freeze --user
выдает список всех установленных на сайт пользовательских пакетов.Практические советы
<package>.__path__
позволяет определить местоположение (я) конкретного пакета: ( подробности )<module>.__file__
позволяет определить местоположение конкретного модуля: ( разница )Запустите,
pip show <package>
чтобы показать информацию о пакете в стиле Debian:источник
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(он работает как на Python 2, так и на 3).python -c "import site; print(site.getsitepackages()[0])"
(или просто первый элемент с
site.getsitepackages()[0]
)источник
hasattr(sys,'real_prefix')
а затем эвристически определяю пакеты сайтов[p for p in sys.path if p.endswith('site-packages')][-1]
(плюс проверяю, найден ли один из них, прежде чем делать[-1]
.Решение, которое:
... это одна строка:
Отформатированный для удобочитаемости (а не использования в качестве однострочника), который выглядит следующим образом:
Источник: очень старая версия документации «Как установить Django» (хотя это полезно не только для установки Django)
источник
cdsitepackages
, чтобы напрямую перейти в каталог site-packages среды./usr/lib/python3/dist-packages
вместо/usr/lib/python3.5/dist-packages
.Для Ubuntu ,
...не является правильным.
Это укажет вам на
/usr/lib/pythonX.X/dist-packages
Эта папка содержит только пакеты, которые ваша операционная система автоматически установила для запуска программ.
В Ubuntu папка site-packages, содержащая пакеты, установленные через setup_tools \ easy_install \ pip, будет находиться в
/usr/local/lib/pythonX.X/dist-packages
Вторая папка, вероятно, является более полезной, если пример использования связан с установкой или чтением исходного кода.
Если вы не используете Ubuntu, вы, вероятно, можете безопасно скопировать первый кодовый блок в терминал.
источник
module.__file__
это лучший способ. Если они пытаются установить вещи ... просто используйте инструменты.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
на Ubuntu (хотя это идет после/usr/local/...
в списке). Вы получаете что-то только/usr/local
через via,sudo pip
и вы не должны использоватьsudo pip
в Ubuntu, если вы не решили сделать свой собственный дистрибутив: если вы используетеsudo pip
, то вы должны убедиться, что все зависимости текущих и будущих модулей python установлены черезsudo apt
илиsudo pip
совместимы. Подумайте, какую проблемуvirtualenv
создали, чтобы решитьdist-packages
в (L) Ubuntu.Вот что сработало для меня:
источник
~/.local/lib/python2.7/site-packages
).virtualenv
это, он жалуется, что пакет не существует. Как вызвать пакеты, установленные в произвольном месте?Допустим, вы установили пакет 'django'. импортируйте его и введите dir (django). Он покажет вам все функции и атрибуты этого модуля. Введите интерпретатор Python -
Вы можете сделать то же самое, если вы установили Mercurial.
Это для снежного барса. Но я думаю, что это должно работать в целом.
источник
django.__file__
для этого, а не__path__
. и, нет, это не гарантия, что это имеет какое-либо отношение к пакетам сайта, но с такими вещами, как django, которые вы, скорее всего, установили в pip , это будет делать, когда вы спешите, и его можно использовать для а также для других целей (например, чтение файла конфигурации по умолчанию из файловой системы).foo.bar
пакету:python -c "import foo.bar as _; print(_.__path__[0])"
Как уже отмечали другие,
distutils.sysconfig
имеет соответствующие настройки:... хотя значение по умолчанию
site.py
делает что-то более грубое, перефразируя ниже:(он также добавляет
${sys.prefix}/lib/site-python
и добавляет оба пути дляsys.exec_prefix
, если эта константа будет отличаться).Тем не менее, каков контекст? Вы не должны возиться с вашим
site-packages
напрямую; setuptools / distutils будет работать для установки, и ваша программа может быть запущена в virtualenv, где ваш pythonpath полностью локальный для пользователя, поэтому она также не должна предполагать непосредственное использование системных пакетов сайта.источник
python2
OSX и Ubuntu с и без virtualenv, но не сpython3
вообще.python3
.Современный способ stdlib использует
sysconfig
модуль, доступный в версиях 2.7 и 3.2+.Примечание :
sysconfig
( источник ) не следует путать сdistutils.sysconfig
подмодулем ( источником ), упомянутым в нескольких других ответах здесь. Последний представляет собой совершенно другой модуль, и в нем отсутствуетget_paths
функция, описанная ниже.В настоящее время Python использует восемь путей ( документов ):
В большинстве случаев пользователи, находящие этот вопрос, будут заинтересованы в пути «purelib» (в некоторых случаях вас может заинтересовать и «platlib»). В отличие от текущего принятого ответа, этот метод все еще работает независимо от того, активирован ли у вас virtualenv.
На системном уровне (это Python 3.7.0 в Mac OS):
С venv вы получите что-то вроде этого
Сценарий оболочки также доступен для отображения этих деталей, которые вы можете вызвать, выполнив
sysconfig
в качестве модуля:источник
platlib
, например/usr/local/lib/python3.6/site-packages
? Традиционно, локально установленные вещи должны войти/usr/local
.Нативные системные пакеты, установленные с установкой Python в системах на основе Debian, можно найти по адресу:
В OSX -
/Library/Python/2.7/site-packages
используя этот небольшой код:
Однако список установленных пакетов
pip
можно найти по адресу:Или можно просто написать следующую команду, чтобы перечислить все пути, где находятся пакеты Python.
Примечание: расположение может отличаться в зависимости от вашей ОС, как в OSX
источник
site.getsitepackages()
из системы установки отсюда dist-пакеты, другие установки покажут site-пакеты.Все ответы (или: один и тот же ответ повторяется снова и снова) неадекватны. Что вы хотите сделать, это:
Последняя строка показывает вам установочный каталог. Работает на Ubuntu, а вышеперечисленные - нет. Не спрашивайте меня о Windows или других дисках, но так как это тот же самый каталог, который easy_install использует по умолчанию, он, вероятно, корректен везде, где работает easy_install (то есть везде, даже в macs). Радоваться, веселиться. Примечание: в оригинальном коде много ругательств.
источник
easy_install
и не выходит из строя изящно, если недоступен, что неадекватно :)Примечание: предлагаемое решение (
distutils.sysconfig.get_python_lib()
) не работает, если существует более одного каталога пакетов сайта (как рекомендуется в этой статье ). Он вернет только основной каталог site-packages.Увы, у меня нет лучшего решения. Кажется, что Python не отслеживает каталоги пакетов сайтов, а только пакеты внутри них.
источник
get_python_lib()
при запуске из virtualenv показываются пакеты сайтов Python, используемые для создания virtualenv, а не пакеты сайтов virtualenv .Это работает для меня. Он получит как папки dist-packages, так и папки site-packages. Если папка не находится на пути Python, она все равно не принесет вам пользы.
Выход (установка Ubuntu):
источник
Это должно работать на всех дистрибутивах в и из виртуальной среды из-за ее «низкотехнологичного» характера. Модуль os всегда находится в родительском каталоге 'site-packages'
Чтобы изменить dir на dir site-packages, я использую следующий псевдоним (в системах * nix):
источник
Дополнительное примечание к
get_python_lib
упомянутой функции: на некоторых платформах для отдельных платформ используются разные каталоги (например, модули, требующие компиляции). Если вы перейдетеplat_specific=True
к функции, вы получите пакеты для сайта для конкретных платформ.источник
источник
Пип-шоу предоставит все подробности о пакете: https://pip.pypa.io/en/stable/reference/pip_show/ [пип-шоу] [1]
Чтобы получить местоположение:
источник
Ответ на старый вопрос. Но используйте для этого ipython.
Это даст следующий вывод о пакете imaplib -
источник
Вы должны попробовать эту команду, чтобы определить место установки pip
Python 2
Python 3
источник
Мне пришлось сделать что-то немного другое для проекта, над которым я работал: найти относительный каталог site-packages относительно базового префикса установки. Если папка site-packages была в
/usr/lib/python2.7/site-packages
, я хотел/lib/python2.7/site-packages
часть. Я фактически сталкивался с системами,site-packages
в которых/usr/lib64
, и принятый ответ НЕ работал на этих системах.Подобно ответу мошенника, мое решение заглядывает глубоко в кишки Distutils, чтобы найти путь, который фактически проходит внутри
setup.py
. Было так тяжело понять, что я не хочу, чтобы кто-нибудь когда-нибудь снова это выяснил.Это должно напечатать что-то вроде
/Lib/site-packages
или/lib/python3.6/site-packages
.источник
Если он уже добавлен в,
PYTHONPATH
вы также можете сделать что-то вродеисточник