2016-12-11 2 views
0

Meine Kolben-Anwendung ist eine große Listen von Dateien jetzt und ich versuche, es in zwei primäre Ordner aufzuteilen, App und Spinnen, so dass es wie folgt aussieht:Import aus einer Datei in einem separaten Verzeichnis

- app 
    -- __init__.py 
    -- app.py 
    -- models.py 
- spiders 
    -- __init__.py 
    -- scrape.py 
Procfile 
requirements.txt 

Das Problem, das ich habe, ist, wenn ich versuche, meine Modelle in die Datei scrape.py zu importieren.

Wenn ich versuche, absolut zu importieren mit: from app.models import Rate, Hotel, Location Ich bekomme den Fehler 'no module named app'. Wenn ich versuche, relativ zu importieren: from ..app.models import Rate, Hotel, Location bekomme ich den Fehler SystemError: Parent module '' not loaded, cannot perform relative import. Was kann ich tun, um das Problem zu beheben?

+0

Haben Sie noch einen '__init __. Py' im Ordner' App'? – Anthon

+0

Ja, es gibt eine '' '__init __. Py''' in dem Ordner mit dem Namen app – Casey

+0

versuchen' von App' statt 'von App' (Groß-/Kleinschreibung) –

Antwort

0

sollte diese Arbeit:

import sys 
from os.path import dirname, abspath, sep 
sys.path.append(abspath(dirname(__file__) + sep + "..")) 

import app.models as models 

Hinweis: Dies ist wirklich eine hässliche Lösung, wie es Ihren Import-Block in der Datei vermasselt. Ich schlage vor, eine Hauptcodedatei im Stammordner wie main.py hinzuzufügen und dort Spider und App-Module zu importieren. Sie sollten Ihre Flusssteuerungen nicht auf Dateien in Unterordnern verteilen.

+0

Danke! Können Sie ein wenig auf die richtige Lösung erweitern? Angenommen, ich erstelle eine main.py im Stammordner. Wie importiere ich die Modelle dort und importiere diese Modelle dann aus der Datei scrape.py? – Casey

Verwandte Themen