Comment puis-je trouver l'emplacement de mon site Python-packages directory?
Comment puis-je trouver l'emplacement de mon site-packages répertoire?
17 réponses
il existe deux types de sites-packages directories, global et par utilisateur .
-
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. -
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
oupip freeze --user
vous donne une liste de tous les paquets installés par utilisateur site-packages.
>>> 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]
)
à 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())
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.
C'est ce qui a fonctionné pour moi:
python -m site --user-site
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.
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.
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']
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.
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.
ç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']
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.
from distutils.sysconfig import get_python_lib
print get_python_lib()
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'
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
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.
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
.