Maison  >  Article  >  développement back-end  >  Importation dans le module d'annuaire de niveau supérieur et problèmes d'importation circulaire en Python

Importation dans le module d'annuaire de niveau supérieur et problèmes d'importation circulaire en Python

高洛峰
高洛峰original
2017-03-03 15:20:441979parcourir

Importer des modules dans le répertoire de niveau supérieur

En python, le module d'importation recherchera sys.path sys.path est une liste, et nous pouvons modifier. cela de manière dynamique.
Pour importer un module dans un certain répertoire, nous utilisons sys.path.insert(0,somedir) pour ajouter le chemin de recherche puis importer.
Dans ce cas, si vous souhaitez importer le module dans le répertoire de niveau supérieur, vous pouvez utiliser sys.path.insert(0,parentdir).
Cependant, cette méthode d'écriture de chemins absolus ne fonctionnera pas si le fichier est placé ailleurs.
Utilisez donc la méthode dynamique pour obtenir le répertoire de niveau supérieur.

import os,sys 
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.insert(0,parentdir)

Pourquoi utiliser sys.path.insert(0,parentdir) au lieu de sys.path.append(parentdir)
Parce que le chemin de recherche est parcouru, s'il y a un module avec le même nom dans d'autres chemins, une erreur d'importation se produira. Utilisez sys.path.insert(0,parentdir) pour vous assurer que ce chemin est recherché en premier.

Résoudre le problème de l'importation circulaire
En python, on rencontre souvent le problème de l'importation circulaire, c'est-à-dire l'importation circulaire.
Cette situation amusante se produit souvent dans la réalité.
Lors de l'installation d'une carte réseau sans fil, vous devez vous connecter en ligne pour télécharger le pilote de la carte réseau..
Lors de l'installation du logiciel de compression, le programme d'installation du logiciel de compression est téléchargé à partir du Internet est en fait compressé. Oui..
La dépendance circulaire est similaire à cette situation.
Par exemple,
est dans models.py,

from server import db 
class User(db.Model): 
  pass

est dans 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

Cela crée le problème de l’importation circulaire.
Il existe plusieurs manières principales de résoudre le problème de l’importation circulaire.
1. Importation paresseuse
Écrivez l'instruction d'importation dans une méthode ou une fonction pour limiter sa portée à une zone locale.
L'inconvénient de cette méthode est qu'il y aura des problèmes de performances.
2. Passer de xxx import yyy à import xxx;xxx.yyy pour accéder au formulaire
3 Organiser le code
Le problème de l'importation circulaire signifie souvent qu'il y a un problème avec la disposition du code. .
Les ressources concurrentes peuvent être fusionnées ou séparées.
Pour fusionner, écrivez-les simplement dans un seul fichier.
La séparation signifie extraire les ressources qui doivent être importées dans un fichier tiers.
En bref, cela transforme la boucle dans une seule direction.

Pour plus d'articles sur l'importation dans le module d'annuaire de niveau supérieur et les problèmes d'importation circulaire en Python, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn