Comment puis-je trouver l'emplacement de mon site Python-packages directory?

Comment puis-je trouver l'emplacement de mon site-packages répertoire?

680
demandé sur Daryl Spitzer 2008-09-23 21:04:43

17 réponses

il existe deux types de sites-packages directories, global et par utilisateur .

  1. Global site-packages (" dist-packages ") les répertoires sont listés dans sys.path lorsque vous lancez:

    python -m site
    

    pour une liste plus concise, Lancez getsitepackages à partir du module site en code Python:

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

    Note: avec virtualenvs getsitepackages n'est pas disponible , sys.path ci-dessus va lister correctement le répertoire des sites-paquets de virtualenv.

  2. le par utilisateur site-packages directory ( PEP 370 ) est l'endroit où Python installe vos paquets locaux:

    python -m site --user-site
    

    Si cela pointe vers un répertoire non-existant, vérifiez l'état de sortie de Python et consultez python -m site --help pour des explications.

    Conseil: exécuter pip list --user ou pip freeze --user vous donne une liste de tous les paquets installés par utilisateur site-packages.

182
répondu Peterino 2018-04-20 22:27:35
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(ou tout simplement le premier article avec site.getsitepackages()[0] )

613
répondu eudoxos 2015-08-29 13:50:18

à Partir de "Comment Installer Django" documentation (bien que cela soit utile à plus que juste des Django d'installation) - exécuter les opérations suivantes à partir de la coquille:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

formaté pour être lisible (plutôt que d'être utilisé comme une seule doublure), qui ressemble à ce qui suit:

from distutils.sysconfig import get_python_lib
print(get_python_lib())
296
répondu Daryl Spitzer 2012-01-26 05:26:36

Pour Ubuntu ,

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

... n'est pas correct.

il vous indiquera /usr/lib/pythonX.X/dist-packages

ce dossier ne contient que les paquets que votre système d'exploitation a installés automatiquement pour les programmes à exécuter.

sur ubuntu , le dossier site-paquets qui contient les paquets installés via setup_tools\easy_install\pip sera en /usr/local/lib/pythonX.X/dist-packages

le deuxième dossier est probablement le plus utile si le cas d'utilisation est lié à l'installation ou à la lecture du code source.

si vous n'utilisez pas Ubuntu, vous êtes probablement en sécurité copier-coller la première boîte de code dans le terminal.

97
répondu David Hollander 2011-01-06 03:08:09

C'est ce qui a fonctionné pour moi:

python -m site --user-site
62
répondu Ramashri 2012-05-22 04:34:22

Comme d'autres l'ont noté, distutils.sysconfig a les paramètres pertinents:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

...bien que le défaut site.py fasse quelque chose d'un peu plus rudimentaire, paraphrasé ci-dessous:

import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])

(il ajoute aussi ${sys.prefix}/lib/site-python et ajoute les deux chemins pour sys.exec_prefix aussi, si cette constante est différente).

cela dit, quel est le contexte? Vous ne devriez pas jouer avec votre site-packages directement; setuptools / distutils fonctionne pour l'installation, et votre programme peut être en cours d'exécution dans un virtualenv où votre pythonpath est complètement utilisateur-local, donc il ne devrait pas supposer l'utilisation du système site-paquets directement non plus.

21
répondu Charles Duffy 2008-09-23 17:14:02

disons que vous avez installé le paquet 'django'. importer et tapez dir(django). Il vous montrera, toutes les fonctions et attributs avec ce module. Tapez l'interpréteur python -

>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']

Vous pouvez faire la même chose si vous avez installé mercurial.

c'est pour le léopard des Neiges. Mais je pense que ça devrait marcher en général aussi.

20
répondu Sumod 2012-03-30 16:36:55

les paquets de systèmes natifs installés avec l'installation de python dans les systèmes basés sur Debian se trouvent à:

/usr/lib / python2.7 / dist-packages /

OSX /Library/Python/2.7/site-packages

en utilisant ce petit code:

from distutils.sysconfig import get_python_lib
print get_python_lib()

cependant, la liste des paquets installés via pip peut être trouvée à:

/ usr / local / bin/

ou on peut simplement écrire la commande suivante pour lister tous les chemins où se trouvent les paquets python.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

Note: l'emplacement peut varier en fonction de votre OS, comme dans 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']
14
répondu fnatic_shank 2018-03-23 05:37:59

toutes les réponses (ou: la même réponse répétée encore et encore) sont inadéquates. Ce que vous voulez faire est ceci:

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

la dernière ligne vous montre le dir d'installation. Fonctionne sur Ubuntu, alors que ceux ci-dessus ne fonctionnent pas. Ne me parlez pas de windows ou d'autres dists, mais puisque c'est exactement le même dir que easy_install utilise par défaut, c'est probablement correct partout où easy_install fonctionne (donc, partout, même macs). Amuser. Note: le code original a beaucoup de jurons.

13
répondu cheater 2012-02-06 02:40:22

d'Un côté-remarque: La solution proposée ( distutils.sysconfig.get_python_lib() ) ne fonctionne pas quand il y a plus d'un site-packages répertoire ( recommandé par le présent article, ). Il ne retournera que le répertoire principal du site-packages.

hélas, je n'ai pas de meilleure solution non plus. Python ne semble pas garder la trace des répertoires de sites-paquets, juste les paquets qu'ils contiennent.

11
répondu Vladimir Vagaytsev 2018-10-04 06:30:52

ça me va. Il vous procurera à la fois des dossiers dist-packages et site-packages. Si le dossier N'est pas sur le chemin de Python, il ne sera pas tu fais beaucoup de bien de toute façon.

import sys; 
print [f for f in sys.path if f.endswith('packages')]

sortie (installation Ubuntu):

['/home/username/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
9
répondu just_an_old_guy 2012-03-30 16:36:22

une note supplémentaire à la fonction get_python_lib déjà mentionnée: sur certaines plates-formes, différents répertoires sont utilisés pour des modules spécifiques à la plate-forme (par exemple: modules qui nécessitent une compilation). Si vous passez plat_specific=True à la fonction vous obtenez les paquets du site pour les paquets spécifiques à la plate-forme.

8
répondu Armin Ronacher 2008-09-23 17:16:22
from distutils.sysconfig import get_python_lib
print get_python_lib()
7
répondu Florian Bösch 2008-09-23 17:09:54

cela devrait fonctionner sur toutes les distributions dans et hors de l'environnement virtuel en raison de sa nature" low-tech". Le module os réside toujours dans le répertoire parent de' site-packages '

import os; print(os.path.dirname(os.__file__) + '/site-packages')

pour changer dir au site-packages dir j'utilise l'alias suivant (on *nix systems):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
7
répondu Pyramid Newbie 2017-06-02 07:32:10

réponse à une vieille question. Mais utilisez ipython pour cela.

pip install ipython
ipython 
import imaplib
imaplib?

Cela donnera la sortie suivante sur le paquet 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
2
répondu Sahil Agarwal 2016-07-18 09:12:47

une voie moderne stdlib utilise sysconfig module, disponible dans les versions 2.7 et 3.2+. Python utilise actuellement huit les chemins ( docs ):

  • stdlib : répertoire contenant les fichiers de bibliothèque standard de Python qui ne sont pas spécifiques à une plate-forme.
  • platstdlib : répertoire contenant les fichiers de bibliothèque Python standard qui sont spécifiques à une plate-forme.
  • platlib : répertoire de fichiers spécifiques à un site et à une plate-forme.
  • purelib : répertoire de fichiers spécifiques à un site et non spécifiques à une plate-forme.
  • include : répertoire pour les fichiers d'en-tête non spécifiques à une plate-forme.
  • platinclude : répertoire de plate-forme spécifique fichiers d'en-tête.
  • scripts : répertoire de fichiers de script.
  • data : répertoire de fichiers de données.

dans la plupart des cas, les utilisateurs qui trouvent cette question seraient intéressés par le chemin 'purelib' (dans certains cas , vous pourriez être intéressé par 'platlib' aussi). Contrairement à la actuellement acceptées réponse, cette méthode ne doit pas se comporter de manière inappropriée selon que vous avez activé ou non un virtualenv.

au niveau du système (C'est Python 3.7.0 sur 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'

avec un venv, vous obtiendrez quelque chose comme ça

>>> import sysconfig                                                                                                                                                
>>> sysconfig.get_paths()['purelib']                                                                                                                                
'/private/tmp/.venv/lib/python3.7/site-packages'

un script shell est également disponible pour afficher ces détails, que vous pouvez invoquer en exécutant sysconfig comme un module:

python -m sysconfig

Note: sysconfig ( la source ) ne doit pas être confondue avec le sous-module distutils.sysconfig ( source ) mentionné dans plusieurs autres réponses ici. C'est un module entièrement différent et il manque la fonction get_paths discutée ci-dessus.

1
répondu wim 2018-10-10 17:30:24

j'ai dû faire quelque chose de légèrement différent pour un projet sur lequel je travaillais: trouver le relatif site-packages directory relatif au préfixe d'installation de base. Si le dossier site-packages était dans /usr/lib/python2.7/site-packages , je voulais la partie /lib/python2.7/site-packages . J'ai, en fait , rencontré des systèmes où site-packages était dans /usr/lib64 , et la réponse acceptée N'a pas fonctionné sur ces systèmes.

semblable à la réponse de tricheur, ma solution jette un regard profond dans les tripes des Distutils, pour trouver le chemin qui passe réellement à l'intérieur de setup.py . C'était une douleur pour comprendre que je ne veux pas que quelqu'un ait à comprendre cela à nouveau.

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', ''))

qui devrait imprimer quelque chose comme /Lib/site-packages ou /lib/python3.6/site-packages .

0
répondu MultipleMonomials 2017-12-16 09:49:25