Probleme beim Import in das Verzeichnismodul der oberen Ebene und beim zirkulären Import in Python

高洛峰
Freigeben: 2017-03-03 15:20:44
Original
1984 Leute haben es durchsucht

Module im übergeordneten Verzeichnis importieren

In Python sucht das Importmodul nach sys.path. sys.path ist eine Liste, die wir ändern können es dynamisch.
Um ein Modul in ein bestimmtes Verzeichnis zu importieren, verwenden wir sys.path.insert(0,somedir), um den Suchpfad hinzuzufügen und dann zu importieren.
Wenn Sie in diesem Fall das Modul in das übergeordnete Verzeichnis importieren möchten, können Sie sys.path.insert(0,parentdir) verwenden.
Diese Methode zum Schreiben absoluter Pfade funktioniert jedoch nicht, wenn die Datei an einer anderen Stelle abgelegt wird.
Verwenden Sie also die dynamische Methode, um das Verzeichnis der oberen Ebene abzurufen.

import os,sys 
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.insert(0,parentdir)
Nach dem Login kopieren

Warum sys.path.insert(0,parentdir) anstelle von sys.path.append(parentdir) verwenden?
Weil Der Suchpfad wird durchlaufen. Wenn in anderen Pfaden ein Modul mit demselben Namen vorhanden ist, tritt ein Importfehler auf. Verwenden Sie sys.path.insert(0,parentdir), um sicherzustellen, dass dieser Pfad zuerst durchsucht wird.

Lösung des Problems des zirkulären Imports
In Python stoßen wir häufig auf das Problem des zirkulären Imports, also des zirkulären Imports.
Diese komische Situation kommt in der Realität oft vor
Bei der Installation einer drahtlosen Netzwerkkarte müssen Sie online gehen, um den Netzwerkkartentreiber herunterzuladen.
Bei der Installation der Komprimierungssoftware wird das Installationsprogramm der Komprimierungssoftware heruntergeladen Das Internet ist tatsächlich komprimiert.
Zirkuläre Abhängigkeit ähnelt dieser Situation.
Zum Beispiel ist
in models.py,

from server import db 
class User(db.Model): 
  pass
Nach dem Login kopieren

ist in server.py,

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
db = SQLAlchemy(app) 
from models import User
Nach dem Login kopieren

Dadurch entsteht das Problem des zirkulären Imports.
Es gibt mehrere Möglichkeiten, das Problem des zirkulären Imports zu lösen.
1. Lazy Import
Schreiben Sie die Importanweisung in eine Methode oder Funktion, um ihren Geltungsbereich auf einen lokalen Bereich zu beschränken.
Der Nachteil dieser Methode besteht darin, dass es zu Leistungsproblemen kommt.
2. Wechseln Sie von xxx import yyy zu import xxx;xxx.yyy, um auf das Formular zuzugreifen.
3 Organisieren Sie den Code.
Das Problem des zirkulären Imports bedeutet häufig, dass ein Problem mit dem Layout des Codes vorliegt .
Konkurrierende Ressourcen können zusammengeführt oder getrennt werden.
Zum Zusammenführen schreiben Sie sie einfach alle in eine Datei.
Trennung bedeutet das Extrahieren der Ressourcen, die importiert werden müssen, in eine Datei eines Drittanbieters.
Kurz gesagt, es dreht die Schleife in eine Richtung.

Weitere Artikel zum Import in das übergeordnete Verzeichnismodul und zu zirkulären Importproblemen in Python finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage