modulos importar clases python module path relative getcwd

modulos - importar clases en python



¿Cómo uso una ruta relativa en un módulo Python cuando el CWD ha cambiado? (1)

Tengo un módulo de Python que utiliza algunos recursos en un subdirectorio del directorio del módulo. Después de buscar en el desbordamiento de la pila y encontrar respuestas relacionadas, logré dirigir el módulo a los recursos usando algo como

import os os.path.join(os.path.dirname(__file__), ''fonts/myfont.ttf'')

Esto funciona bien cuando llamo al módulo desde otro lugar, pero se rompe cuando llamo al módulo después de cambiar el directorio de trabajo actual. El problema es que los contenidos de __file__ son una ruta relativa, que no tiene en cuenta el hecho de que cambié el directorio:

>>> mymodule.__file__ ''mymodule/__init__.pyc'' >>> os.chdir(''..'') >>> mymodule.__file__ ''mymodule/__init__.pyc''

¿Cómo puedo codificar la ruta absoluta en __file__ o, salvo eso, cómo puedo acceder a mis recursos en el módulo sin importar el directorio de trabajo actual? ¡Gracias!


Almacene la ruta absoluta al directorio del módulo al comienzo del módulo:

package_directory = os.path.dirname(os.path.abspath(__file__))

Después, cargue sus recursos basados ​​en este package_directory :

font_file = os.path.join(package_directory, ''fonts'', ''myfont.ttf'')

Y, después de todo, no modifique los recursos de todo el proceso, como el directorio de trabajo actual. Nunca hay una necesidad real de cambiar el directorio de trabajo en un programa bien escrito, por lo tanto, evite os.chdir() .