Wenn ich renne
import sys
print sys.path
Auf meinem Mac (Mac OS X 10.6.5, Python 2.6.1) erhalte ich die folgenden Ergebnisse.
/Library/Python/2.6/site-packages/ply-3.3-py2.6.egg ... /Library/Python/2.6/site-packages/ipython-0.10.1-py2.6.egg /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload /Library/Python/2.6/site-packages /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode
Sie sind in 5 Kategorien eingeteilt.
- /Library/Python/2.6/site-packages/*.egg
- /Library/Python/2.6/site-packages
- Frameworks / Python.framework / Versions / 2.6 / lib / python2.6
- Frameworks / Python.framework / Versions / 2.6 / Extras / lib / python
- PATH von der Umgebungsvariablen PYTHONPATH.
Und ich kann mit dem Code weitere Pfade hinzufügen
sys.path.insert(0, MORE_PATH)
- Welche Routinen richten diese Pfade ein und wann?
- Sind einige der Pfade im Python-Quellcode erstellt?
- Ist es möglich, dass die mit 'sys.path.insert' eingefügten Pfade ignoriert werden? Ich bin neugierig, da ich bei mod_wsgi festgestellt habe, dass die Pfade bei 'sys.path.insert' nicht gefunden werden. Ich habe einen anderen Beitrag für diese Frage gestellt.
HINZUGEFÜGT
Basierend auf Michaels Antwort habe ich in site.py nachgesehen und den folgenden Code erhalten.
def addsitepackages(known_paths):
"""Add site-packages (and possibly site-python) to sys.path"""
sitedirs = []
seen = []
for prefix in PREFIXES:
if not prefix or prefix in seen:
continue
seen.append(prefix)
if sys.platform in ('os2emx', 'riscos'):
sitedirs.append(os.path.join(prefix, "Lib", "site-packages"))
elif sys.platform == 'darwin' and prefix == sys.prefix:
sitedirs.append(os.path.join("/Library/Python", sys.version[:3], "site-packages"))
Ich denke auch, dass der Verzeichnisname mit site.py (/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 für meinen Mac) in Python-Quellcode integriert sein sollte.
seen
ist kein Set? : PAntworten:
Das meiste wird in Pythons eingerichtet,
site.py
das beim Starten des Interpreters automatisch importiert wird (es sei denn, Sie starten es mit der-S
Option). Während der Initialisierung werden im Interpreter selbst nur wenige Pfade eingerichtet (Sie können dies herausfinden, indem Sie Python mit starten-S
).Darüber hinaus werden einige Frameworks (wie Django, glaube ich)
sys.path
beim Start geändert, um ihren Anforderungen zu entsprechen.Das
site
Modul hat eine ziemlich gute Dokumentation , einen kommentierten Quellcode und druckt einige Informationen aus, wenn Sie es über ausführenpython -m site
.quelle
/usr/local/lib/python<version>/dist-packages
und/usr/{lib,share}/python<version>/dist-packages
automatisch zum Pfad hinzugefügt (gemäß/usr/lib/python2.7/site.py
Ubuntu 14.04).Vom Lernen von Python :
quelle
site.py ist in der Tat die Antwort. Ich wollte alle Abhängigkeiten von dem alten Python entfernen, der standardmäßig auf meinem Mac installiert ist. Dies funktioniert ziemlich gut, da 'site.py' jedes Mal aufgerufen wird, wenn der Python-Interpreter gestartet wird.
Für Mac habe ich die folgende Zeile am Ende von main () in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/site.py manuell hinzugefügt:
sys.path = filter (lambda a: not a.startswith('/System'), sys.path)
quelle
site.py
dies durch die Verwendung der Befehlszeilenoption-S
beim Ausführen von Python verhindert werden kann. Aus Dokumenten - Deaktivieren Sie den Import des Modulssite
und die damit verbundenen ortsabhängigen Manipulationensys.path
.Pfad hat diese Teile:
$PYTHONPATH
Pfade werden nicht ignoriert. Sie werden jedoch möglicherweise nicht gefunden, und dies führt nicht zu einem Fehler. sys.path sollte nur ebenfalls hinzugefügt und nicht abgezogen werden. Django würde keine Pfade entfernen.
quelle
Hinzufügen zur akzeptierten Antwort und Adressieren der Kommentare, die besagen, dass ein Modul keine Einträge entfernen sollte aus
sys.path
:Dies trifft im Großen und Ganzen zu, aber es gibt Umstände, unter denen Sie Änderungen vornehmen möchten,
sys.path
indem Sie Einträge entfernen. Zum Beispiel - und das ist Mac-spezifisch; * nix / Windows-Folgerungen können vorhanden sein. Wenn Sie eine benutzerdefinierte FolgerungPython.framework
für die Aufnahme in Ihr eigenes Projekt erstellen, möchten Sie möglicherweise die Standardeinträge ignorieren, diesys.path
auf das System verweisenPython.framework
.Sie haben mehrere Möglichkeiten:
Hacken Sie die
site.py
, wie @damirv angibt, oderFügen Sie
sitecustomize
dem benutzerdefinierten Framework Ihr eigenes Modul (oder Paket) hinzu, das das gleiche Endergebnis erzielt. Wie in densite.py
Kommentaren angegeben (jedenfalls für 2.7.6):quelle
Beachten Sie auch: Wenn die
PYTHONHOME
Umgebung env var festgelegt ist, werden Standardbibliotheken aus diesem Pfad anstelle der Standardbibliotheken geladen, wie dokumentiert .Dies ist keine direkte Antwort auf die Frage, sondern etwas, das ich gerade entdeckt habe und das dazu führte, dass die falschen Standardbibliotheken geladen wurden, und meine Suche führte mich hierher.
quelle
Sie verwenden Systempython
/usr/bin/python
.sys.path wird beim Start von Python aus Systemdateien festgelegt.
Berühren Sie diese Dateien nicht, insbesondere site.py, da dies das System stören kann.
Sie können jedoch sys.path in Python ändern, insbesondere beim Start:
in ~ / .bashrc oder ~ / .zshrc:
export PYTHONSTARTUP=~/.pythonrc
in ~ / .pythonrc:
Schreiben Sie Ihre Änderungen in sys.path.
Diese Änderungen sind nur für Sie in interaktiven Shells.
Installieren Sie zum Hacken mit geringem Risiko für das System Ihre eigene und neuere Python-Version.
quelle