Comment trouver l'emplacement de mon répertoire de sites-packages?
python
installation
Daryl Spitzer
la source
la source
pip show <package name>
Réponses:
Il existe deux types de répertoires de packages de site, globaux et par utilisateur .
Les répertoires globaux des packages de site (" dist-packages ") sont répertoriés
sys.path
lorsque vous exécutez:Pour une liste plus concise exécutée à
getsitepackages
partir du module de site en code Python:Remarque: Avec virtualenvs getsitepackages n'est pas disponible ,
sys.path
ci-dessus listera correctement le répertoire des packages de site de virtualenv. En Python 3, vous pouvez utiliser le module sysconfig à la place:Le répertoire des packages de site par utilisateur ( PEP 370 ) est l'endroit où Python installe vos packages locaux:
Si cela pointe vers un répertoire inexistant, vérifiez l'état de sortie de Python et voyez
python -m site --help
pour des explications.Astuce: en cours d'exécution
pip list --user
oupip freeze --user
vous donne une liste de tous les packages de sites installés par utilisateur .Conseils pratiques
<package>.__path__
vous permet d'identifier les emplacements d'un package spécifique: ( détails )<module>.__file__
vous permet d'identifier l'emplacement d'un module spécifique: ( différence )Exécutez
pip show <package>
pour afficher les informations sur les paquets de style Debian:la source
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(cela fonctionne aussi bien sur Python 2 que sur 3).python -c "import site; print(site.getsitepackages()[0])"
(ou juste le premier article avec
site.getsitepackages()[0]
)la source
hasattr(sys,'real_prefix')
, puis je détermine les paquets du site de manière heuristique[p for p in sys.path if p.endswith('site-packages')][-1]
(et vérifie s'il y en a un avant de faire le[-1]
.Une solution qui:
... est ce one-liner:
Formaté pour la lisibilité (plutôt que d'être utilisé comme une ligne), qui ressemble à ceci:
Source: une très ancienne version de la documentation "Comment installer Django" (bien que cela soit utile à plus qu'une simple installation de Django)
la source
cdsitepackages
, pour passer directement au répertoire des packages de site de l'environnement./usr/lib/python3/dist-packages
place de/usr/lib/python3.5/dist-packages
.Pour Ubuntu ,
...n'est pas correcte.
Il vous indiquera
/usr/lib/pythonX.X/dist-packages
Ce dossier contient uniquement les packages que votre système d'exploitation a installés automatiquement pour que les programmes s'exécutent.
Sur ubuntu , le dossier site-packages contenant les packages installés via setup_tools \ easy_install \ pip sera dans
/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 pouvez probablement copier-coller en toute sécurité la première boîte de code dans le terminal.
la source
module.__file__
c'est la meilleure façon. S'ils essaient d'installer des choses… utilisez simplement les outils.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
sur Ubuntu (même si cela va après/usr/local/...
dans la liste). Vous n'obtenez que quelque chose/usr/local
viasudo pip
et vous ne devriez pas utilisersudo pip
sur Ubuntu à moins que vous ayez décidé de faire votre propre distribution: si vous utilisezsudo pip
, il est de votre responsabilité de vous assurer que toutes les dépendances des modules python actuels et futurs installés viasudo apt
ousudo pip
sont compatibles. Considérez quel problème avirtualenv
été créé pour résoudredist-packages
Ubuntu 2 en (L).C'est ce qui a fonctionné pour moi:
la source
~/.local/lib/python2.7/site-packages
).virtualenv
il se plaint que le paquet n'existe pas. comment invoquer les packages installés à un emplacement personnalisé?Disons que vous avez installé le paquet 'django'. importez-le et tapez dir (django). Il vous montrera toutes les fonctions et attributs de ce module. Tapez l'interpréteur python -
Vous pouvez faire la même chose si vous avez installé mercurial.
C'est pour Snow Leopard. Mais je pense que cela devrait aussi fonctionner en général.
la source
django.__file__
pour cela plutôt que__path__
. et, non, ce n'est pas une garantie que cela a quelque chose à voir avec les sites-packages, mais avec des choses comme django, que vous avez probablement installé pip , il le fera lorsque vous êtes pressé et il peut être utilisé pour à d'autres fins également (lecture d'un fichier de configuration par défaut à partir du système de fichiers par exemple).foo.bar
package:python -c "import foo.bar as _; print(_.__path__[0])"
Comme d'autres l'ont noté,
distutils.sysconfig
a les paramètres pertinents:... bien que la valeur par défaut
site.py
fasse quelque chose d'un peu plus grossier, paraphrasé ci-dessous:(il ajoute
${sys.prefix}/lib/site-python
et ajoute également les deux chemins poursys.exec_prefix
, si cette constante est différente).Cela dit, quel est le contexte? Vous ne devriez pas jouer avec votre
site-packages
directement; setuptools / distutils fonctionnera pour l'installation, et votre programme peut s'exécuter dans un virtualenv où votre chemin python est complètement utilisateur local, il ne devrait donc pas non plus supposer l'utilisation directe des packages de site du système.la source
python2
sur osx et ubuntu avec et sans virtualenv mais pas avecpython3
du tout.python3
.Un moyen stdlib moderne utilise le
sysconfig
module, disponible dans les versions 2.7 et 3.2+.Remarque :
sysconfig
( source ) ne doit pas être confondu avec ledistutils.sysconfig
sous - module ( source ) mentionné dans plusieurs autres réponses ici. Ce dernier est un module entièrement différent et il lui manque laget_paths
fonction décrite ci-dessous.Python utilise actuellement huit chemins ( docs ):
Dans la plupart des cas, les utilisateurs qui trouvent cette question seraient intéressés par le chemin «purelib» (dans certains cas , vous pourriez également être intéressé par «platlib»). Contrairement à la réponse actuellement acceptée, cette méthode fonctionne toujours, que vous ayez activé ou non virtualenv.
Au niveau du système (il s'agit de Python 3.7.0 sur mac OS):
Avec un venv, vous obtiendrez quelque chose comme ça
Un script shell est également disponible pour afficher ces détails, que vous pouvez invoquer en exécutant en
sysconfig
tant que module:la source
platlib
, par exemple/usr/local/lib/python3.6/site-packages
? Traditionnellement, les choses installées localement devraient entrer/usr/local
.Les paquets système natifs installés avec l'installation de python dans les systèmes basés sur Debian peuvent être trouvés sur:
Sous OSX -
/Library/Python/2.7/site-packages
en utilisant ce petit code:
Cependant, la liste des packages installés via
pip
se trouve sur:Ou on peut simplement écrire la commande suivante pour lister tous les chemins où se trouvent les packages python.
Remarque: l'emplacement peut varier en fonction de votre système d'exploitation, comme dans OSX
la source
site.getsitepackages()
depuis l'installation du système d'où les dist-packages, les autres installations afficheront les sites-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, c'est ceci:
La dernière ligne vous montre le répertoire d'installation. Fonctionne sur Ubuntu, contrairement aux précédents. Ne me posez pas de questions sur Windows ou d'autres dists, mais comme c'est exactement le même répertoire que easy_install utilise par défaut, il est probablement correct partout où easy_install fonctionne (donc partout, même sur mac). S'amuser. Remarque: le code d'origine contient de nombreux jurons.
la source
easy_install
et n'échoue pas correctement s'il n'est pas disponible, ce qui est insuffisant :)Remarque: la solution proposée (
distutils.sysconfig.get_python_lib()
) ne fonctionne pas lorsqu'il existe plusieurs répertoires de sites-packages (comme recommandé par cet article ). Il ne renverra que le répertoire principal des packages de site.Hélas, je n'ai pas de meilleure solution non plus. Python ne semble pas garder la trace des répertoires des packages de sites, juste les packages qu'ils contiennent.
la source
get_python_lib()
lorsqu'il est exécuté à partir de virtualenv montre les packages de site de Python utilisés pour créer virtualenv et non les sites-packages de virtualenv .Cela fonctionne pour moi. Il vous donnera à la fois les dossiers dist-packages et site-packages. Si le dossier n'est pas sur le chemin de Python, il ne vous sera pas très utile de toute façon.
Sortie (installation Ubuntu):
la source
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'
Pour changer dir en dir site-packages j'utilise l'alias suivant (sur les systèmes * nix):
la source
Une note supplémentaire à la
get_python_lib
fonction mentionnée déjà: sur certaines plateformes, différents répertoires sont utilisés pour les modules spécifiques à la plateforme (par exemple: les modules qui nécessitent une compilation). Si vous passezplat_specific=True
à la fonction, vous obtenez les packages de site pour les packages spécifiques à la plate-forme.la source
la source
pip show donnera tous les détails sur un package: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
Pour obtenir l'emplacement:
la source
Réponse à une vieille question. Mais utilisez ipython pour cela.
Cela donnera la sortie suivante sur le paquet imaplib -
la source
Vous devriez essayer cette commande pour déterminer l'emplacement d'installation de pip
Python 2
Python 3
la source
Je devais faire quelque chose un peu différent pour un projet que je travaillais sur: trouver le rapport répertoire site-packages par rapport à la base préfixe installation. Si le dossier site-packages était dedans
/usr/lib/python2.7/site-packages
, je voulais la/lib/python2.7/site-packages
partie. En fait, j'ai rencontré des systèmes là où ilssite-packages
se trouvaient/usr/lib64
, et la réponse acceptée n'a PAS fonctionné sur ces systèmes.Semblable à la réponse du tricheur, ma solution jette un coup d'œil dans les entrailles des Distutils, pour trouver le chemin qui se fait réellement passer à l'intérieur
setup.py
. C'était tellement pénible de comprendre que je ne veux pas que quiconque ait à le comprendre à nouveau.Cela devrait imprimer quelque chose comme
/Lib/site-packages
ou/lib/python3.6/site-packages
.la source
S'il est déjà ajouté au,
PYTHONPATH
vous pouvez également faire quelque chose commela source