2017-05-30 14 views
0

Meine Struktur wie so istPython Fehler und korrekte Import Führung Import

/App 
__init__.py 
    -/dirA 
     -__init__.py 
     -a.py 
    -/dirB 
     -__init__.py 
     -b.py 
/samy_app 
    __init__.py 
    settings.py 
    urls.py 
manage.py 

Innerhalb von b.py Ich möchte innerhalb von b.py a.py

So importieren habe ich

from App.dirA import a 

Allerdings ist der Fehler, den ich erhalte, "ImportError: Kein Modul namens 'App'"

Ich habe auch relativ versucht Importieren mit .. aber das funktioniert auch nicht.

Ich würde auch gerne wissen, ob ich die Dateien nicht in separaten Verzeichnissen wie das platzieren sollte. Es war wirklich für die Organisation. Oder sollte ich sie aus der App verschieben und die Ordner in demselben Verzeichnis wie manage.py platzieren?

Würde wirklich etwas Hilfe mit diesem lieben. Ich habe den ganzen Tag versucht.

sys.path Ausgang

['', '/root/django-dev', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages'] 

Vielen Dank an alle für all die Hilfe. Gibt es vielleicht etwas, das ich nicht getan habe, als ich meinen Server eingerichtet habe? Ich die Dokumentation zu lesen und es scheint, als ob dieser Import ohne Anfügen alle Pfade funktionieren soll ...

+0

Können Sie bitte bearbeiten, um Einzüge zu verwenden, um die Hierarchie der Dateien anzuzeigen? D.h., sind a und b auf der gleichen Ebene? –

+0

@Brad Ich habe den Beitrag bearbeitet –

+0

Ich bekomme ein kein Modul namens dirA. Fehle ich etwas in meinen Skripten? –

Antwort

0

Ich glaube, wenn ich das getan habe, hatte ich es in der Regel, wie dies zu tun:

from dirA.a import THING_IM_IMPORTING_FROM_A 

wo die Wurzel meiner Anwendung wäre das Verzeichnis App.

+0

Sein aktueller Import sollte aber auch funktionieren, siehe docs [hier] (https://docs.python.org/3/tutorial/modules.html). Sie sollten 'from .. dirA import a' verwenden können. Die absolute Import-Anweisung sollte auch funktionieren. Und 'App' muss nicht im Pythonpfad sein, da der Import auch in dem Verzeichnis nach dem Skript sucht. –

0

Sie erwähnen manage.py, verwenden Sie Django vielleicht?

Wie auch immer, wenn Sie ein Skript aus dirB ausgeführt wird eine Fehlermeldung angezeigt, aber wenn Sie haben Struktur wie folgt aus:

main.py 
App/ 
    __init__.py 
    dirA/ 
     __init__.py 
     a.py 
    dirB 
     __init__.py 
     b.py 

und in main.py Sie haben from App.dirB import b

und in b.py Sie haben

from App.dirA import a oder from ..dirA import a

Sie s sollte in Ordnung sein.

In jedem anderen Fall sollten Sie wahrscheinlich hinzufügen ../ (oder absoluter Pfad davon), um Ihre PYTHONPATH

import sys 
sys.path.append("../") 

aber ich denke, es ist nicht eine sehr gute Idee.

+0

Welcher Teil ist keine gute Idee? –

+0

Hinzufügen von '../' zu Ihrem 'PYTHONPATH' – qocu

+0

Ja, ich benutze django –

0

Edit: Ich habe die Frage missverstanden!

Können Sie überprüfen/App ist ein verschachteltes Verzeichnis eines Verzeichnisses in Ihrem Modul Suchpfad?

Importieren Sie in einer interaktiven Sitzung sys, und geben Sie sys.path ein. Der erste Eintrag ist das CWD oder das Verzeichnis der obersten Programmdatei.Wenn Sie dort kein Verzeichnis sehen, das nach/App führt, müssen Sie es hinzufügen, da Python diese Liste von links nach rechts durchsucht, wenn Sie ein Paket importieren, um nach dem übergeordneten Verzeichnis zu suchen. Sie können entweder die PYTHONPATH-Umgebungsvariable bearbeiten oder eine PTH-Textdatei erstellen und einfach das Verzeichnis eingeben, das dazu führt (zB/home/user/Documents/code ') und das in Ihr Installationsverzeichnis für Python legen, oder Ihr Site-Packages-Ordner.

Sobald Sie fertig sind, wenn Sie sys.path überprüfen, sehen Sie zum Beispiel '/ home/user/Documents/code'. Und/Apps sollten sich in diesem Beispiel im Code-Ordner befinden.

+0

gut der erste Eintrag ist ''. ist das ein Problem? haha die zweite ist/root/django-dev –

+0

Welcher Ansatz ist der richtige? Bearbeiten Sie die PYTHONPATH-Umgebungsvariable oder erstellen Sie eine .pth-Textdatei. –

+0

Nein, '' bedeutet nur das Verzeichnis, in dem Ihre interaktive Sitzung geöffnet ist. Sie sehen immer die leere Zeichenfolge als ersten Eintrag. Wenn Sie zum übergeordneten Verzeichnis von/App navigieren und eine interaktive Sitzung öffnen und von dort aus importieren, sollte es auch funktionieren, da Ihr aktuelles Verzeichnis das übergeordnete Element von/App ist. – w3rallmachines

0

Das übergeordnete Verzeichnis App sollte in PYTHONPATH (oder sys.path) stehen. Wenn sich das Verzeichnis App in /home/dorian/mega_project befindet, sollte PYTHONPATH/home/dorian/mega_project enthalten.