A = os.path.join(os.path.dirname(__file__), '..')
B = os.path.dirname(os.path.realpath(__file__))
C = os.path.abspath(os.path.dirname(__file__))
Je les connecte généralement simplement avec le chemin réel. Mais il y a une raison pour ces déclarations qui déterminent le chemin au moment de l'exécution, et j'aimerais vraiment comprendre le module os.path afin que je puisse commencer à l'utiliser.
__file__
n'est PAS défini dans tous les cas, par exemple les modules C liés statiquement. Nous ne pouvons pas compter sur__file__
une disponibilité permanente.name '__file__' is not defined
.__file__
est le chemin du fichier à partir duquel le module a été chargé, s'il a été chargé à partir d'un fichier. Cela signifie__file__
ne fonctionnera que lorsque vous l'exécuterez en tant que script pas dans l'interpréteur. (Sauf si vous l'importez dans l'interpréteur ...)Je veux juste aborder une certaine confusion en premier.
__file__
n'est pas un joker, c'est un attribut. Les attributs et méthodes de double soulignement sont considérés comme "spéciaux" par convention et ont un objectif particulier.http://docs.python.org/reference/datamodel.html montre la plupart des méthodes et attributs spéciaux, sinon tous.
Dans ce cas, il
__file__
s'agit d'un attribut d'un module (un objet module). En Python, un.py
fichier est un module. Ainsiimport amodule
aura un attribut__file__
qui signifie différentes choses dans des circonstances différentes.Tiré de la documentation:
Dans votre cas, le module accède à son propre
__file__
attribut dans l'espace de noms global.Pour voir cela en action, essayez:
Et courir:
la source
Selon la documentation :
et aussi :
la source
L'utilisation
__file__
combinée avec diversos.path
modules permet à tous les chemins d'être relatifs à l'emplacement du répertoire actuel du module. Cela permet à vos modules / projets d'être portables vers d'autres machines.Dans votre projet, vous faites:
puis essayez de le déployer sur votre serveur avec un répertoire de déploiements comme
/home/web/mydevproject/
alors votre code ne pourra pas trouver les chemins correctement.la source