14 Stimmen

Python - Absolute Importe aus einem Unterordner durchführen

Im Grunde genommen stelle ich die gleiche Frage wie dieser Mann: Wie macht man relative Importe in Python?

Aber niemand gab ihm eine richtige Antwort. Da Sie sich in einem Unterordner befinden und ein Verzeichnis nach oben und dann in einen ANDEREN Unterordner gehen wollen, funktioniert das, was sie vorgeschlagen haben, nicht (wie der OP in seinen Kommentaren zu ihren Antworten dargelegt hat).

Ich weiß, dass man das mit sys.path machen kann, aber ich würde eine sauberere Methode vorziehen.

Ejemplo:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

Wie würde ich Modul_A in Modul_B importieren?

12voto

nosklo Punkte 204121
main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. Sie laufen python main.py .
  2. main.py tut: import app.package_a.module_a
  3. module_a.py tut import app.package_b.module_b

Alternativ könnten auch 2 oder 3 verwendet werden: from app.package_a import module_a

Das wird funktionieren, solange Sie app in Ihrem PYTHONPATH. main.py könnte dann überall sein.

Sie schreiben also eine setup.py zum Kopieren (Installieren) des gesamten Anwendungspakets und der Unterpakete in die Python-Ordner des Zielsystems, und main.py zu den Skriptordnern des Zielsystems.

2voto

David Z Punkte 121773

Wenn ich Lesen richtig , in Python 2.5 oder höher:

from ..Module_B import Module_B

Ich dachte, ich kenne mich gut mit Python aus, aber ich hatte keine Ahnung, dass das in Version 2.5 möglich ist.

0voto

Nick Stinemates Punkte 38639

Wenn Sie dann Modul_B in App importieren, würden Sie

Modul_B.py: import ModuleA

App.py (die auch ModulA importiert, das sich nun standardmäßig in Ihrem Python-Pfad befindet)

import Module_B.Module_B

Eine andere Alternative ist, __init__.py (die im Ordner Module_A/App) zu aktualisieren:

import os
import sys
sys.path.extend('%s../' % os.getcwd())
import ModuleA

Eine andere Alternative ist, den Ordner zur Umgebungsvariable PYTHONPATH hinzuzufügen.

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