Що таке каталог пакунків для сайтів 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
  • Windows: prefix\Lib\site-packages

1 Чисто означає, що модуль використовує лише код Python. Нечисті можуть також містити код C / C ++.

site-packagesза замовчуванням є частиною шляху пошуку Python , тому встановлені там модулі можна легко імпортувати згодом.


Корисне читання


10
Місце траплялося /usr/local/lib/python3.6/site-packagesна ubuntu
mehmet

Я бачив системи Gentoo з ним lib64!
MultipleMonomials

2
конда чи піп встановлюються в пакунки для сайтів чи просто вручну вбудовані пакети?
Моніка Геднек

2
Дійсно цікаве питання: Чому цей каталог? Чому б просто не встановити /usr/lib/python3.6?
Торстен Бронгер

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-пакети - це лише місце, де Python встановлює свої модулі.

Не потрібно "знаходити його", пітон знає, де його знайти сам, це місце завжди є частиною ПІТОНПАТУ (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встановити свої розподілені модулі.
Майк Т

Якщо ви використовуєте virtualenv і не успадковуєте глобальні пакети, це завжди спрацює. Я ніколи не кодуюсь без virtualenv
Ентоні Перот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.