2011-01-15 10 views
1

Ich habe ein seltsames Problem mit dem Importieren eines Moduls. Ich habe ein virtualenv Setup und ein Modul ist in {env}/lib/python2.6/site-packages/pkgname verfügbar. Es gibt eine __init__.py Datei und pkgname.py innerhalb.Python importiert Verwirrung

Jetzt, wenn ich {env}/bin/python ausführen und import pkgname.pkgname ausführen, funktioniert es ganz gut. Aber wenn ich ein Skript erstellen in {env}/bin/pkgname.py mit Inhalt:

#!{env}/bin/python 

import pkgname.pkgname 

if __name__ == "__main__": 
    pkgname.pkgname.run() 

dies nicht versuchen, die gleiche Datei erneut zu importieren (da das Paket und die Datei die gleichen Namen haben). Wie kann ich das Suchen im selben Verzeichnis deaktivieren? Oder wie kann ich den Import erzwingen, um zuerst die globalen Pakete zu betrachten?

Alternativ, was ist der "richtige" Weg, dies zu tun? Aus Gründen der Konsistenz würde ich mein Startskript lieber als das eigentliche Paket bezeichnen, das es auszuführen versucht.

+2

Aus diesem Grund setzen wir keine Erweiterungen für ausführbare Dateien in öffentlichen Verzeichnissen. –

Antwort

2

Nennen Sie es pkgname. Erledigt. OK, dann wird es nicht starten, wenn du in Windows doppelklickst, aber das ist normalerweise kein Problem.

+0

Außerdem müssen Sie die Datei an einen Ort wie "scripts/pkgname" verschieben, sonst kollidiert sie mit dem Paket "pkgname". Und es funktioniert. – viraptor

+0

Richtig, in diesem Fall ist es in {env}/bin, wie in der Frage erwähnt. Das bedeutet/usr/local/bin oder so ähnlich. Und ich habe normalerweise meine Pakete in src/pkgname, also kein pb da. :) –

0

Sie können sys.path ändern. Es ist nur eine Liste der zu durchsuchenden Pfade und der aktuelle Ordner sollte der erste Eintrag sein. Ihre Datei sollte ausgeführt werden, wenn Sie den aktuellen Ordner an das Ende der Liste verschieben. Aber ich würde generell so etwas ohne einen guten Grund nicht tun. Ist es nicht möglich, die Datei name.py, runpkgname.py oder etwas ähnliches umzubenennen?

+0

Oder entfernen Sie einfach die Erweiterung .py, so dass sie keinen gültigen Modulnamen mehr besitzt. –