Todavía no veo una respuesta viable para 2.7 que no requiere la instalación de dependencias adicionales y también comienza desde el directorio del archivo. No es agradable como solución de una sola línea, pero no hay nada de malo en usar las utilidades estándar.
import os
grandparent_dir = os.path.abspath(
os.path.join(
os.path.join(
os.path.dirname(
os.path.abspath(__file__)
),
os.pardir
),
os.pardir
)
)
print grandparent_dir
Y para demostrar que funciona, aquí empiezo ~/Documents/notessolo para mostrar que el directorio actual no influye en el resultado. Puse el archivo grandpa.pycon ese script en una carpeta llamada "scripts". Se arrastra hasta el directorio de Documentos y luego al directorio de usuario en una Mac.
(testing)AlanSE-OSX:notes AlanSE$ echo ~/Documents/scripts/grandpa.py
/Users/alancoding/Documents/scripts/grandpa.py
(testing)AlanSE-OSX:notes AlanSE$ python2.7 ~/Documents/scripts/grandpa.py
/Users/alancoding
Esta es la extrapolación obvia de la respuesta para el directorio principal . Es mejor usar una solución general que una solución menos buena en menos líneas.
pathlibsolución es un poco más agradable y legible, pero no se incluye con Python 2.7. Yo diría que se quede con lo que tiene, tal vez agregue un comentario.