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.pyarchivo es un módulo. Entoncesimport amoduletendrá 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.pathmó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