A = os.path.join(os.path.dirname(__file__), '..')
B = os.path.dirname(os.path.realpath(__file__))
C = os.path.abspath(os.path.dirname(__file__))
Por lo general, solo los conecto con el camino real. Pero hay una razón para estas declaraciones que determinan la ruta en tiempo de ejecución, y realmente me gustaría entender el módulo os.path para que pueda comenzar a usarlo.
__file__
NO está definido en todos los casos, por ejemplo, módulos C estáticamente vinculados. No podemos contar con__file__
estar siempre disponibles.name '__file__' is not defined
.__file__
es la ruta del archivo desde el que se cargó el módulo, si se cargó desde un archivo. Esto significa__file__
que solo funcionará cuando lo ejecute como un script que no esté en el intérprete (a menos que lo importe en el intérprete ...)Solo quiero abordar algo de confusión primero.
__file__
no es un comodín, es un atributo. Los atributos y métodos de subrayado doble se consideran "especiales" por convención y tienen un propósito especial.http://docs.python.org/reference/datamodel.html muestra muchos de los métodos y atributos especiales, si no todos.
En este caso
__file__
es un atributo de un módulo (un objeto de módulo). En Python un.py
archivo es un módulo. Entoncesimport amodule
tendrá un atributo de lo__file__
que significa cosas diferentes en circunstancias diferentes.Tomado de los documentos:
En su caso, el módulo está accediendo a su propio
__file__
atributo en el espacio de nombres global.Para ver esto en acción, intente:
Y correr:
fuente
Por la documentación :
y también :
fuente
El uso
__file__
combinado con variosos.path
módulos permite que todas las rutas sean relativas a la ubicación del directorio del módulo actual. Esto permite que sus módulos / proyectos sean portátiles a otras máquinas.En tu proyecto haces:
e intente implementarlo en su servidor con un directorio de implementaciones como
/home/web/mydevproject/
su código no podrá encontrar las rutas correctamente.fuente