Resumen

Objetivo

Necesitamos encontrar una forma de evitar que nuestro proyecto se rompa cuando movamos de lugar un archivo dentro del proyecto, para esto usaremos Referencias Relativas.

Implementación

Usando PyProjRoot:

import pyprojroot

pyprojroot.here()  # Esto es un Posix Path (pathlib)
pyprojroot.here().joinpath("data", "raw") 
  • El path en pyprojroot se construye desde la raíz, no desde el path del archivo que lo ejecuta.
  • Puedes mover el archivo a cualquier parte de la carpeta del proyecto, pero los paths no se romperán.

Usando PyHere:

import pyhere

pyhere.here()  # También regresa un Posix Path
  • El directorio que regresa es el directorio padre del directorio actual.

Comparación

Estas dos líneas de código regresan el mismo resultado:

pyprojroot.here("data").joinpath("raw")
pyhere.here().resolve() / "data" / "raw"
  • Estas dos librerías sirven para crear shortcuts. Para esto, se puede usar la siguiente función:
def make_dir_function(dir_name):
    def dir_function(*args):
        return pyprojroot.here()joinpath(dir_name, *args)
    return dir_function


data_dir = make_dir_function("data")
data_dir("raw", "pathlib")  # Devuelve el path personalizado
  • Puedes crear la cantidad de shortcuts que tu proyecto necesite.

Contribución creada por: Néstor Arellano.