2015-04-19 5 views
5

Während der Entwicklung in Flask, würde ich gerne alle meine Modelle, Controller, ... in ihrer eigenen, separaten Datei. Auf diese Weise muss ich keinen Controller, Modell in einer großen Datei suchen; es hält alles sauber. Es könnte wie folgt aussehen:Split große Python-Datei in Modul mit gemeinsamen Abhängigkeiten

/controllers 
    __init__.py 
    login.py 
    logout.py 
    profile.py 

Alle diese Dateien haben (fast) die gleichen Abhängigkeiten. Ich möchte nicht alle Abhängigkeiten in jeder Datei wieder und wieder einfügen. Eine Lösung, die ich mir ausgedacht habe, ist die Verwendung einer depencies.py Datei, die alle Abhängigkeiten importiert, die ich dann in jede separate Datei einfüge.

/controllers 
    __init__.py 
    dependencies.py (all the imports) 
    login.py (import dependencies.py) 
    logout.py (import dependencies.py) 
    profile.py (import dependencies.py) 

Dies ist jedoch keine sehr elegante Lösung. Ich frage mich, ob es möglich ist, etwas wie ein __init__.py zu tun, das die Abhängigkeiten oben hat und dann die separaten Dateien "einbindet" und dass alles auf diese Weise ausgeführt wird, so dass Sie die gemeinsamen Abhängigkeiten nicht wirklich in jedes einfügen müssen Datei.

Beispiel von dem, was Ich mag (nicht funktioniert) zu tun wäre:

#common dependencies 
from app import mail 
from flask import session 
... 
#actual models (which depend on these dependencies) 
from user import User 
from code import Code 
from role import Role 
+0

ich nur alle Abhängigkeiten der Module setzen würde. Wenn jedes Modul A B C alle die gleichen Abhängigkeiten X Y Z hat, dann gibt es wahrscheinlich ein gemeinsames Verhalten, das Sie aus A B C und in D extrahieren können. Dann kann A B C von D anstelle von X Y Z abhängen. –

Antwort

1

Datei-spezifische Importe

Import nur die notwendigen Abhängigkeiten in jedem oder Ihre Dateien. Wenn profile nur flask benötigt, importieren Sie nur das in die Datei. Wenn login.pyflask und app benötigt, importieren Sie beide Dateien in diese Datei. Es sei denn, ein Party-Modul 3 rd wird tatsächlich in __init__.py Code verwendet, müssen Sie es dort nicht importieren. Je nachdem, wie Sie Ihr Paket schließlich verwenden, können Sie die __all__-Liste mit Ihren Modulen in __init__.py festlegen.

Referenzen: einmal

  1. importieren lädt immer nur ein Modul. Alle nachfolgenden Importe fügen sie einfach zum aktuellen Namespace hinzu.
    - another answer

  2. Aus Effizienzgründen wird jedes Modul einmal pro Dolmetscher Sitzung nur importiert.
    - im Modul python docs

  3. __all__ explanation

Verwandte Themen