Wie finde ich den Speicherort meines Site-Packages-Verzeichnisses?
python
installation
Daryl Spitzer
quelle
quelle
pip show <package name>
Antworten:
Es gibt zwei Arten von Site-Paket-Verzeichnissen: global und pro Benutzer .
Globale Site-Packages - Verzeichnisse (" dist-packages ") werden aufgelistet,
sys.path
wenn Sie Folgendes ausführen:Für eine übersichtlichere Liste, die
getsitepackages
vom Site-Modul in Python-Code ausgeführt wird:Hinweis: Bei virtualenvs ist getsitepackages nicht verfügbar .
sys.path
Von oben wird das Site-Packages-Verzeichnis von virtualenv jedoch korrekt aufgelistet. In Python 3 können Sie stattdessen das Modul sysconfig verwenden:Im Verzeichnis der Benutzer- Site-Pakete ( PEP 370 ) pro Benutzer installiert Python Ihre lokalen Pakete:
Wenn dies auf ein nicht vorhandenes Verzeichnis verweist, überprüfen Sie den Exit-Status von Python und finden Sie
python -m site --help
Erklärungen.Tipp: Wird ausgeführt
pip list --user
oderpip freeze --user
gibt Ihnen eine Liste aller pro Benutzer installierten Site-Pakete.Praktische Tipps
<package>.__path__
Mit dieser Option können Sie die Speicherorte eines bestimmten Pakets identifizieren: ( Details )<module>.__file__
Mit dieser Option können Sie den Standort eines bestimmten Moduls ermitteln: ( Unterschied )Führen Sie es aus
pip show <package>
, um Paketinformationen im Debian-Stil anzuzeigen:quelle
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(es funktioniert sowohl unter Python 2 als auch unter Python 3).python -c "import site; print(site.getsitepackages()[0])"
(oder nur erster Artikel mit
site.getsitepackages()[0]
)quelle
hasattr(sys,'real_prefix')
und bestimme dann Site-Pakete heuristisch aus[p for p in sys.path if p.endswith('site-packages')][-1]
(plus überprüfe, ob es eines gefunden hat, bevor ich das mache[-1]
.Eine Lösung, die:
... ist das einzeilig:
Aus Gründen der Lesbarkeit formatiert (anstatt als Einzeiler verwendet zu werden), sieht dies wie folgt aus:
Quelle: Eine sehr alte Version der Dokumentation "So installieren Sie Django" (obwohl dies nicht nur für die Installation von Django nützlich ist)
quelle
cdsitepackages
, um direkt in das Site-Packages-Verzeichnis der Umgebung zu wechseln./usr/lib/python3/dist-packages
stattdessen zurückgegeben/usr/lib/python3.5/dist-packages
.Für Ubuntu ,
...das ist nicht richtig.
Es wird Sie darauf hinweisen
/usr/lib/pythonX.X/dist-packages
Dieser Ordner enthält nur Pakete, die Ihr Betriebssystem automatisch installiert hat, damit Programme ausgeführt werden können.
Unter Ubuntu befindet sich der Ordner site-packages, der Pakete enthält, die über setup_tools \ easy_install \ pip installiert wurden
/usr/local/lib/pythonX.X/dist-packages
Der zweite Ordner ist wahrscheinlich der nützlichere, wenn der Anwendungsfall mit der Installation oder dem Lesen des Quellcodes zusammenhängt.
Wenn Sie Ubuntu nicht verwenden, können Sie die erste Codebox wahrscheinlich sicher in das Terminal einfügen.
quelle
module.__file__
ist dies der bessere Weg. Wenn sie versuchen, Dinge zu installieren, verwenden Sie einfach die Tools.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
auf Ubuntu (obwohl es geht nach/usr/local/...
in der Liste). Sie erhalten nur etwas in/usr/local
viasudo pip
und sollten es nichtsudo pip
unter Ubuntu verwendensudo pip
, es sei denn, Sie haben sich für eine eigene Distribution entschieden. Wenn Sie es verwenden , liegt es in Ihrer Verantwortung, sicherzustellen, dass alle Abhängigkeiten der aktuellen und zukünftigen Python-Module, die übersudo apt
oder installiertsudo pip
sind, kompatibel sind. Überlegen Sie, welches Problemvirtualenv
zur Lösung erstellt wurdedist-packages
in (L) Ubuntu zu verstehen .Das hat bei mir funktioniert:
quelle
~/.local/lib/python2.7/site-packages
).virtualenv
, beschwert es sich, dass das Paket nicht existiert. Wie rufe ich die an einem benutzerdefinierten Speicherort installierten Pakete auf?Angenommen, Sie haben das Paket 'django' installiert. importiere es und tippe dir (django) ein. Es zeigt Ihnen alle Funktionen und Attribute dieses Moduls. Geben Sie den Python-Interpreter ein -
Sie können dasselbe tun, wenn Sie mercurial installiert haben.
Dies ist für Schneeleopard. Aber ich denke, es sollte auch allgemein funktionieren.
quelle
django.__file__
dafür eher als__path__
. und nein, es ist keine Garantie dafür, dass dies irgendetwas mit Site-Paketen zu tun hat, aber mit Dingen wie Django, die Sie höchstwahrscheinlich installiert haben , funktioniert es, wenn Sie es eilig haben und für die es verwendet werden kann auch für andere Zwecke (z. B. Lesen einer Standardkonfigurationsdatei aus dem Dateisystem).foo.bar
Paket zu erhalten:python -c "import foo.bar as _; print(_.__path__[0])"
Wie andere angemerkt haben,
distutils.sysconfig
hat die relevanten Einstellungen:... obwohl die Standardeinstellung
site.py
etwas gröberes macht, wie unten umschrieben:(Es werden auch
${sys.prefix}/lib/site-python
beide Pfade hinzugefügt und hinzugefügtsys.exec_prefix
, falls diese Konstante unterschiedlich sein sollte.)Das heißt, was ist der Kontext? Sie sollten nicht direkt mit Ihrem
site-packages
herumspielen; setuptools / distutils funktionieren für die Installation, und Ihr Programm wird möglicherweise in einer virtuellen Umgebung ausgeführt, in der Ihr Python-Pfad vollständig benutzerlokal ist. Daher sollte es auch nicht davon ausgehen, dass die Site-Pakete des Systems direkt verwendet werden.quelle
python2
auf osx und ubuntu mit und ohne virtualenv aber überhaupt nicht mitpython3
.python3
.Eine moderne stdlib-Methode ist die Verwendung von
sysconfig
Modulen, die in den Versionen 2.7 und 3.2+ verfügbar sind.Hinweis :
sysconfig
( Quelle ) ist nicht mit dem in mehreren anderen Antworten hier erwähntendistutils.sysconfig
Submodul ( Quelle ) zu verwechseln . Letzteres ist ein ganz anderes Modul und es fehlt dasget_paths
unten diskutierte Funktion.Python verwendet derzeit acht Pfade ( Dokumente ):
In den meisten Fällen interessieren sich Benutzer, die diese Frage finden, für den Pfad "purelib" (in einigen Fällen sind Sie möglicherweise auch für "platlib" interessiert). Im Gegensatz zur aktuell akzeptierten Antwort funktioniert diese Methode weiterhin, unabhängig davon, ob Sie eine virtuelle Umgebung aktiviert haben oder nicht.
Auf Systemebene (dies ist Python 3.7.0 unter Mac OS):
Mit einem Venv bekommst du so etwas
Zur Anzeige dieser Details steht auch ein Shell-Skript zur Verfügung, das Sie durch Ausführen
sysconfig
als Modul aufrufen können :quelle
platlib
, z/usr/local/lib/python3.6/site-packages
. Traditionell sollten lokal installierte Dinge eingesetzt werden/usr/local
.Die nativen Systempakete, die mit der Python-Installation auf Debian-basierten Systemen installiert wurden, finden Sie unter:
In OSX -
/Library/Python/2.7/site-packages
mit diesem kleinen Code:
Die Liste der über installierten Pakete
pip
finden Sie jedoch unter:Oder Sie können einfach den folgenden Befehl schreiben, um alle Pfade aufzulisten, in denen sich Python-Pakete befinden.
Hinweis: Der Speicherort kann je nach Betriebssystem variieren, wie in OSX
quelle
site.getsitepackages()
von der Systeminstallation aus die dist-Pakete aufgerufen , andere Installationen zeigen Site-Pakete an.Alle Antworten (oder: dieselbe Antwort, die immer wieder wiederholt wird) sind unzureichend. Was Sie tun möchten, ist Folgendes:
Die letzte Zeile zeigt Ihnen das Installationsverzeichnis. Funktioniert unter Ubuntu, die oben genannten nicht. Fragen Sie mich nicht nach Windows oder anderen Dists, aber da es genau das gleiche Verzeichnis ist, das easy_install standardmäßig verwendet, ist es wahrscheinlich überall dort richtig, wo easy_install funktioniert (also überall, sogar auf Macs). Habe Spaß. Hinweis: Der Originalcode enthält viele Schimpfwörter.
quelle
easy_install
und schlägt nicht ordnungsgemäß fehl, wenn sie nicht verfügbar ist, was nicht ausreicht :)Eine Randnotiz: Die vorgeschlagene Lösung (
distutils.sysconfig.get_python_lib()
) funktioniert nicht, wenn mehr als ein Site-Packages-Verzeichnis vorhanden ist (wie in diesem Artikel empfohlen ). Es wird nur das Hauptverzeichnis der Site-Pakete zurückgegeben.Leider habe ich auch keine bessere Lösung. Python scheint nicht die Verzeichnisse von Site-Paketen zu verfolgen, sondern nur die darin enthaltenen Pakete.
quelle
get_python_lib()
wenn sie von innerhalb virtualenv Shows laufen wird Website-Pakete von Python verwendet , um virtualenv und nicht die von virtualenv site-packages .Das funktioniert bei mir. Sie erhalten sowohl Ordner für dist-Pakete als auch für Site-Pakete. Wenn sich der Ordner nicht auf Pythons Pfad befindet, wird er Ihnen sowieso nicht viel nützen.
Ausgabe (Ubuntu-Installation):
quelle
Dies sollte auf allen Distributionen in und außerhalb der virtuellen Umgebung funktionieren, da es sich um "Low-Tech" handelt. Das OS-Modul befindet sich immer im übergeordneten Verzeichnis von 'Site-Paketen'.
Um dir in das Site-Paket-Verzeichnis zu ändern, verwende ich den folgenden Alias (auf * nix-Systemen):
quelle
Ein zusätzlicher Hinweis zu der
get_python_lib
bereits erwähnten Funktion: Auf einigen Plattformen werden unterschiedliche Verzeichnisse für plattformspezifische Module verwendet (z. B. Module, die kompiliert werden müssen). Wenn Sieplat_specific=True
an die Funktion übergeben, erhalten Sie die Site-Pakete für plattformspezifische Pakete.quelle
quelle
pip show gibt alle Details zu einem Paket an: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
So ermitteln Sie den Standort:
quelle
Antwort auf alte Frage. Verwenden Sie dazu jedoch ipython.
Dies gibt die folgende Ausgabe über das imaplib-Paket -
quelle
Sie sollten diesen Befehl versuchen, um den Installationsort von pip zu bestimmen
Python 2
Python 3
quelle
Ich musste für ein Projekt, an dem ich arbeitete, etwas anderes tun: Suchen Sie das relative Site-Packages-Verzeichnis relativ zum Basisinstallationspräfix. Wenn sich der Site-Packages-Ordner befand
/usr/lib/python2.7/site-packages
, wollte ich das/lib/python2.7/site-packages
Teil. Ich bin in der Tat auf Systeme gestoßen, in denen es sichsite-packages
befand/usr/lib64
, und die akzeptierte Antwort funktionierte auf diesen Systemen NICHT.Ähnlich wie bei der Antwort des Betrügers späht meine Lösung tief in die Eingeweide von Distutils, um den Weg zu finden, der tatsächlich im Inneren herumgereicht wird
setup.py
. Es war so schmerzhaft herauszufinden, dass ich nicht möchte, dass jemand dies jemals wieder herausfinden muss.Das sollte so etwas wie
/Lib/site-packages
oder drucken/lib/python3.6/site-packages
.quelle
Wenn es bereits zum hinzugefügt wurde,
PYTHONPATH
können Sie auch so etwas tunquelle