Heim >Backend-Entwicklung >Python-Tutorial >Probleme beim Import in das Verzeichnismodul der oberen Ebene und beim zirkulären Import in Python

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

高洛峰
高洛峰Original
2017-03-03 15:20:442008Durchsuche

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)

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

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

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!

Stellungnahme:
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