web-dev-qa-db-fra.com

Différence entre os.path.dirname (os.path.abspath (__ file__)) et os.path.dirname (__ file__)

Je suis un débutant travaillant sur le projet Django. Settings.py d'un projet Django contient ces deux lignes:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

Je veux connaître la différence car je pense que les deux pointent vers le même répertoire. Il serait également très utile de fournir des fonctions de liens os.path.

14
Rishabh Agrahari

BASE_DIR Pointe vers le répertoire parent de PROJECT_ROOT. Vous pouvez réécrire les deux définitions comme suit:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)

car la fonction os.path.dirname() supprime simplement le dernier segment d'un chemin.

Dans ce qui précède, le nom __file__ Pointe vers le nom de fichier du module actuel, voir modèle de données Python :

__file__ Est le chemin d'accès du fichier à partir duquel le module a été chargé, s'il a été chargé à partir d'un fichier.

Cependant, il peut s'agir d'un chemin relatif, donc la fonction os.path.abspath() est utilisée pour en faire un chemin absolu avant de supprimer uniquement le nom de fichier et stocker le chemin d'accès complet au répertoire dans lequel le module réside dans PROJECT_ROOT.

23
Martijn Pieters