Estoy tratando de hacer que cuando esto se ejecute, ejecute la versión más nueva de la lista.
Aquí está el directorio que quiero:
ClockOS: bootLoader.py (the file I am starting at) Versions: Version 0.1.1: main.py (Ignore because tis an older version) Version 0.1.2: main.py (The one I want to run/import) Intenté cargar a través de os.dir y usar sys.path y agregar un __init__.py vacío. ¿Alguien sabe cómo hacer que esto funcione? Mi código:
import os import re import sys versionList = [] for filename in os.listdir('Versions'): if filename.startswith('Version'): versionList.append(filename) print(f"Loaded {filename}") def major_minor_micro(version): major, minor, micro = re.search('(\d+)\.(\d+)\.(\d+)', version).groups() return int(major), int(minor), int(micro) latest = str(max(versionList, key=major_minor_micro)) print("Newest Version: ", latest) os.path.dirname('Versions/'+str(latest)) sys.path.insert(1, latest) print(sys.path) import mainPor último, necesito que esto funcione tanto en Windows como en Linux, si es posible.
Necesitas usar importlib para hacer lo que quieras. Aquí hay un ejemplo de cómo importar my_function desde un archivo:
import importlib spec = importlib.util.spec_from_file_location('some_module_name', filename) mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(mod) mod.my_function(1)Probablemente la pregunta sea un duplicado de Importar archivo fuente de python arbitrario. (Python 3.3+)