2014-08-27 18 views
6

Ich möchte mit dem Merkur-Repository von hg selbst arbeiten. Das heißt, ich klonte Mercurial von https://www.mercurial-scm.org/repo/hg und möchte einige hg Befehle innerhalb des geklonten Repository ausführen. Das Problem ist, dass hg in diesem Klon hg ausführbare Datei versucht, seine Python-Module aus diesem Verzeichnis und nicht von /usr/lib/pythonVERSION etc. zu laden. Wie ich verstehe, geschieht dies, weil Python-Importpfad sys.path enthält eine leere Zeichenfolge als erster Eintrag, die wahrscheinlich bedeutet "aktuell Verzeichnis". PYTHONPATH Umgebungsvariable ist nicht festgelegt.So entfernen Sie das aktuelle Verzeichnis aus dem Python-Importpfad

Die Frage ist, wie kann ich verhindern, dass meine installierte "falsche" Module importiert.

+0

'sys.path.insert (0,"/usr/lib/pythonVERSION ")'? –

+0

Wo soll ich es hinstellen? Ich möchte das System 'hg' Skript nicht ändern. – ragol

Antwort

0

@ragol, ich denke, Padraic hat die richtige Lösung. Innerhalb des Python-Skripts, in dem Sie versuchen, hg-Befehle auszuführen, müssen Sie den folgenden Befehl eingeben: sys.path.insert(0,"/usr/lib/pythonVERSION")

Platzieren Sie den Befehl ganz am Anfang Ihres Python-Skripts. Der Befehl weist python an, beim Importieren von Modulen zuerst in das Verzeichnis /usr/lib/pythonVERSION zu schauen.

Wenn das nicht funktioniert, müssen Sie möglicherweise genauer mit dem Pfad sein. Wenn beispielsweise das Modul, das Sie zu importieren versuchen, im /usr/lib/pythonVERSION/site-packages/hg Verzeichnis befindet, können Sie den folgenden Befehl verwenden: sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

Das Skript, das ich ausführen möchte, ist '/ usr/bin/hg', das selbst mercurial ist. Vielleicht verstehe ich Sie nicht richtig, aber es scheint, dass Sie vorschlagen, es zu ändern. Das ist natürlich die einfachste Lösung, würde aber bedeuten, dass ich eine vom Paketmanager installierte Datei modifizieren würde. Ich mag diese Idee nicht. Ich würde lieber ein externes Skript schreiben, das '/ usr/bin/hg' so aufruft, dass es keine Module aus dem aktuellen Verzeichnis lädt. – ragol

+0

Wie lautet der Name des Skripts, das Sie ausführen? Hat es die Erweiterung .py? Ich gehe davon aus, dass Sie entweder ein Python-Skript erstellt oder bearbeitet haben und versuchen, ein Modul namens mercurial zu importieren. Was ich vorschlage, ist, den Befehl sys.path.insert vor der Zeile einzufügen, in der Sie versuchen, das Merkurmodul – rolb

+1

@rolb zu importieren, wie oft muss er Ihnen sagen? Er führt '/ usr/bin/hg' als ausführbare Datei aus. Es kann eine tatsächliche ausführbare Datei sein, es kann ein Skript mit einem Shebang sein. Es hat keine Erweiterung, sie sind unter UNIX nicht erforderlich. –

1

Die Art, wie ich mit dem Thema durch die Schaffung eines /usr/local/bin/hg sh Skript mit dem folgenden Inhalt ist beschäftigen würde:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

(Ubuntu-basierte Distributionen verwenden dist-packages statt site-packages)

PYTHONPATH ist eine spezielle Umgebungsvariable von Python-Interpreter respektiert Pfade Zusatzmodul Import zu bekommen.

Alternativ können Sie PYTHONPATH in Ihre Shell exportieren, aber es wird Ihre gesamte Erfahrung beeinflussen.

Verwandte Themen