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/notes
solo para mostrar que el directorio actual no influye en el resultado. Puse el archivo grandpa.py
con 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.
pathlib
solució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.