Eier im Pfad vor PYTHONPATH Umgebungsvariable

Wenn ich Pakete von easy_install installiert habe , werden die Eier vor sys.path vor den Items in der Variable PYTHONPATH vorangestellt.

Zum Beispiel, wenn ich ein Ei-Paket namens Foo installiert sowie ein Paket namens foo im aktuellen Verzeichnis, und dann tun dies:

 PYTHONPATH="." python >>> import foo 

Dies wird die Ei-Version von foo anstelle des lokalen Verzeichnisses verwenden. Die Inspektion von sys.path zeigt, dass Eier vor Gegenständen von PYTHONPATH . Das ist defekt. Gibt es eine Möglichkeit, dieses Verhalten zu überschreiben?

2 Solutions collect form web for “Eier im Pfad vor PYTHONPATH Umgebungsvariable”

Leider ist dies mit einer setuptools/command/easy_install.py Vorlage tief in setuptools/command/easy_install.py . Du könntest ein gepatchtes Setup mit einer bearbeiteten Vorlage erstellen, aber ich habe keine saubere Möglichkeit gefunden, easy_install von außen zu erweitern.

Jedes Mal, wenn easy_install läuft, wird es die Datei easy_install.pth regenerieren. Hier ist ein schnelles Skript, das du nach easy_install ausführen kannst, um die Kopf- und Fußzeile aus easy_install.pth zu entfernen. Sie können ein Wrapper Shell-Skript erstellen, um dies sofort nach easy_install :

 #!/usr/bin/env python import sys path = sys.argv[1] lines = open(path, 'rb').readlines() if lines and 'import sys' in lines[0]: open(path, 'wb').write(''.join(lines[1:-1]) + '\n') 

Beispiel:

 % easy_install gdata % PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]' ['', '/Users/pat/virt/lib/python2.6/site-packages/gdata-2.0.14-py2.6.egg'] % ./fix_path ~/virt/lib/python2.6/site-packages/easy_install.pth % PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]' ['', '/Users/pat/xyz'] 

Für mehr Klärung, hier ist das Format der easy-install.pth :

 import sys; sys.__plen = len(sys.path) ./gdata-2.0.14-py2.6.egg import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new) 

Die beiden import sys Linien sind die Täter, die die Eier zu Beginn des Weges erscheinen lassen. Mein Skript entfernt einfach diese sys.path -munging lines.

Ich habe so etwas wie das folgende getan, um dem Systempfad vorzugehen, wenn ich eine ausführbare Datei auf der obersten Ebene python läuft:

 import sys sys.path = ["<your python path>"] + sys.path 

Oft ist die "<your python path>" für mich die Verwendung des __file__ Attributs zu tun, um einen Blick zu suchen, der das Top-Level-Modul für mein Projekt enthält. Dies ist nicht für den Einsatz in der Herstellung von Eiern empfohlen, obwohl ich nicht scheinen, die Konsequenzen zu beachten. Es kann eine andere Alternative zu __file__ .

  • Warum kann ich Python 2.7 unter Centos 5.5 nicht installieren?
  • Warum ist eine Ei-Info-Datei erstellt, wenn ich distutils verwende?
  • Cross-Kompilieren von Python-Erweiterungen
  • Verpackungsressourcen mit setuptools / verteilen
  • Wie macht easy_install benutzerdefinierte Befehle in setup.py ausführen?
  • Kann ich setuptools ohne berechtigungen zu / usr / local etc benutzen
  • Wie kann ich das Ei-Plugin einfach deinstallieren und es ohne Neustart laden?
  • Pip install traceback Fehler beim Installieren von Paketen in Python
  • Erstellen Sie ein startfähiges GUI-Skript aus Python-Setup-Tools (ohne Konsolenfenster!)
  • Stoppen von setup.py von der Installation als Ei
  • Beste Weg, um Code über mehrere setup.py Skripte zu teilen?
  • Python ist die beste Programmiersprache der Welt.