16 Stimmen

Importieren eines Python-Pakets aus einem Skript mit dem gleichen Namen

Ich versuche, mein Python-Projekt neu zu organisieren, indem ich Skripte aus dem Paketverzeichnis in ein Verzeichnis mit einem Top-Level-Skript verschiebe. Nach diesen Änderungen sieht meine Projekt-Hierarchie so aus:

MyProject/
    setup.py

    scripts/
        my_package.py

    my_package/
        __init__.py
        module_foo.py

Beachten Sie, wie das Skript und das Paket denselben Namen haben.

Das Skript my_package.py sieht etwa so aus:

# MyProject/scripts/my_package.py
import os
try:
    import my_package
    print os.path.abspath(my_package.__file__)
except ImportError as e:
    print e

Wenn wir das obige Skript ausführen, importiert der Interpreter das aktuelle Modul anstelle des Pakets mit dem gleichen Namen (Hinweis: das Paket my_package wurde bereits als Ei in site-packages installiert und unsere virtuelle Umgebung ist ordnungsgemäß aktiviert).

Wie kann ich das Paket my_package aus dem Skript my_package.py importieren, wenn sie denselben Namen haben?

Weitere technische Informationen:

  • Python 2.7.3
  • Ubuntu Server 12.04 LTS
  • VirtualEnv 1.11.6

1voto

User Punkte 13421

Für mich funktioniert es mit

sys.path.insert(0, '..')

da der Import etwas ähnliches wie für Pfad in sys.path: macht.

1voto

nealmcb Punkte 10705

Sie möchten wahrscheinlich my_package.py in den kanonischen Namen für das Kernskript eines Moduls umbenennen: __main__.py und es wieder in Ihr Modulverzeichnis legen. Sorgen Sie dann auch dafür, dass das ausführbare my_package automatisch generiert wird, indem Sie ein entry_point dafür in Ihrer setup.py-Datei definieren. Python-Apps auf die richtige Weise: entry points und Skripte, von Chris Warrick behandelt dies ausführlich.

Siehe auch Was ist main.py? - Stack Overflow, um einige der anderen Möglichkeiten zu sehen, wie my_package automatisch aufgerufen werden kann, wie z. B. python -m my_package.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X