Что такое каталог пакетов сайта python?

119

Каталог site-packagesупоминается в различных статьях, связанных с Python. Что это? Как это использовать?

Омер Даган
источник

Ответы:

72

site-packages- это целевой каталог для пакетов Python, созданных вручную. Когда вы собираете и устанавливаете пакеты Python из исходного кода (используя distutils , возможно, выполняя python setup.py install), вы найдете установленные модули site-packagesпо умолчанию.

Есть стандартные локации:

  • Unix (чистый) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (не чистый): exec-prefix/lib/pythonX.Y/site-packages
  • Окна: prefix\Lib\site-packages

1 Pure означает, что модуль использует только код Python. Не чистый код также может содержать код C / C ++.

site-packagesпо умолчанию является частью пути поиска Python , поэтому установленные там модули можно легко импортировать впоследствии.


Полезное чтение

Омер Даган
источник
10
место оказалось /usr/local/lib/python3.6/site-packagesна убунту
Mehmet
Я видел системы Gentoo с этим lib64!
MultipleMonomials
2
устанавливается ли conda или pip в пакеты сайта или просто вручную созданные пакеты?
Monica Heddneck
2
Действительно интересный вопрос: почему этот каталог? Почему бы просто не установить в /usr/lib/python3.6?
Torsten Bronger
40

Когда вы используете --userопцию с pip , пакет устанавливается в папку пользователя, а не в глобальную папку, и вам не нужно запускать команду pip с правами администратора.

Местоположение папки пакетов пользователя можно найти с помощью:

python -m site --user-site

Это напечатает что-то вроде:

C:\Users\%USERNAME%\AppData\Roaming\Python\Python35\site-packages

Если вы не используете --userопцию с pip , пакет устанавливается в глобальную папку, указанную:

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

Это напечатает что-то вроде:

['C:\\Program Files\\Anaconda3', 'C:\\Program Files\\Anaconda3\\lib\\site-packages'

Примечание. Указанные выше значения относятся к Windows 10 с установленным Anaconda 4.x со значениями по умолчанию.

Шитал Шах
источник
24

site-packages - это просто место, где Python устанавливает свои модули.

Не нужно «искать его», python сам знает, где его искать, это местоположение всегда является частью PYTHONPATH (sys.path).

Программно это можно найти так:

import sys
site_packages = next(p for p in sys.path if 'site-packages' in p)
print site_packages

'/Users/foo/.envs/env1/lib/python2.7/site-packages'

Энтони Перо
источник
3
Наверное, проще импортировать сайт, чем site.getsitepackages ()
JSharm
1
Не во всех дистрибутивах Python есть site-packages, и это будет расти StopIteration. Например, Debian (и Ubuntu) должны dist-packagesустановить свои распределенные модули.
Mike T
Если вы используете virtualenv и не наследуете глобальные пакеты, это всегда будет работать. Я никогда не кодирую без virtualenv
Энтони Перо