Qu'est-ce que le répertoire site-packages de python?

119

Le répertoire site-packagesest mentionné dans divers articles liés à Python. Qu'Est-ce que c'est? Comment l'utiliser?

Omer Dagan
la source

Réponses:

72

site-packagesest le répertoire cible des packages Python créés manuellement. Lorsque vous construisez et installez des packages Python à partir des sources (en utilisant distutils , probablement en exécutant python setup.py install), vous trouverez les modules installés dans site-packagespar défaut.

Il existe des emplacements standard:

  • Unix (pur) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (non pur): exec-prefix/lib/pythonX.Y/site-packages
  • Les fenêtres: prefix\Lib\site-packages

1 Pure signifie que le module utilise uniquement du code Python. Non pur peut également contenir du code C / C ++.

site-packagesfait par défaut partie du chemin de recherche Python , donc les modules installés là-bas peuvent être importés facilement par la suite.


Lecture utile

Omer Dagan
la source
10
l'emplacement se trouvait être /usr/local/lib/python3.6/site-packagessur ubuntu
mehmet
J'ai vu des systèmes Gentoo avec lib64!
MultipleMonomials
2
est-ce que conda ou pip s'installe dans des packages de site, ou simplement des packages construits manuellement?
Monica Heddneck
2
La question vraiment intéressante est: pourquoi ce répertoire? Pourquoi ne pas simplement installer sur /usr/lib/python3.6?
Torsten Bronger
40

Lorsque vous utilisez l' --useroption avec pip , le package est installé dans le dossier de l'utilisateur au lieu du dossier global et vous n'aurez pas besoin d'exécuter la commande pip avec les privilèges d'administrateur.

L'emplacement du dossier des packages de l'utilisateur peut être trouvé en utilisant:

python -m site --user-site

Cela imprimera quelque chose comme:

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

Lorsque vous n'utilisez pas l' --useroption avec pip , le package est installé dans le dossier global donné par:

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

Cela imprimera quelque chose comme:

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

Remarque: les valeurs imprimées ci-dessus concernent Windows 10 avec Anaconda 4.x installé avec les valeurs par défaut.

Shital Shah
la source
24

site-packages est juste l'emplacement où Python installe ses modules.

Inutile de le «trouver», python sait où le trouver par lui-même, cet emplacement fait toujours partie du PYTHONPATH (sys.path).

Par programme, vous pouvez le trouver de cette façon:

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'

Anthony Perot
la source
3
Probablement plus facile d'importer le site que site.getsitepackages ()
JSharm
1
Toutes les distributions Python ne l'ont pas fait site-packages, et cela augmentera StopIteration. Par exemple, Debian (et Ubuntu) doivent dist-packagesinstaller leurs modules distribués.
Mike T
Si vous utilisez virtualenv et n'héritez pas de packages globaux, cela fonctionnera toujours. Je ne code jamais sans virtualenv
Anthony Perot