Saltar al contenido

¿Cómo obtengo la ruta del archivo ejecutado actual en Python?

Bienvenido a nuestra página web, en este lugar hallarás la respuesta que estabas buscando.

Solución:

No puede determinar directamente la ubicación del script principal que se está ejecutando. Después de todo, a veces la secuencia de comandos no procedía de ningún archivo. Por ejemplo, podría provenir del intérprete interactivo o del código generado dinámicamente almacenado solo en la memoria.

Sin embargo, puede determinar de forma fiable la ubicación de un módulo, ya que los módulos siempre se cargan desde un archivo. Si crea un módulo con el siguiente código y lo coloca en el mismo directorio que su script principal, entonces el script principal puede importar el módulo y usarlo para ubicarse.

some_path/module_locator.py:

def we_are_frozen():
    # All of the modules are built-in to the interpreter, e.g., by py2exe
    return hasattr(sys, "frozen")

def module_path():
    encoding = sys.getfilesystemencoding()
    if we_are_frozen():
        return os.path.dirname(unicode(sys.executable, encoding))
    return os.path.dirname(unicode(__file__, encoding))

alguna_ruta/principal.py:

import module_locator
my_path = module_locator.module_path()

Si tiene varios scripts principales en diferentes directorios, es posible que necesite más de una copia de module_locator.

Por supuesto, si su secuencia de comandos principal está cargada por alguna otra herramienta que no le permite importar módulos que se ubican junto con su secuencia de comandos, entonces no tendrá suerte. En casos como ese, la información que busca simplemente no existe en ninguna parte de su programa. Su mejor apuesta sería informar un error a los autores de la herramienta.

Primero, necesita importar desde inspect y os

from inspect import getsourcefile
from os.path import abspath

A continuación, donde quiera que desee encontrar el archivo fuente, simplemente use

abspath(getsourcefile(lambda:0))

esta solución es robusta incluso en ejecutables

import inspect, os.path

filename = inspect.getframeinfo(inspect.currentframe()).filename
path     = os.path.dirname(os.path.abspath(filename))

Tienes la opción de añadir valor a nuestro contenido colaborando tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *