¿Hay alguna manera de modificar la PATH
variable de entorno de una manera independiente de la plataforma usando Python?
¿Algo parecido a os.path.join()
?
¿Hay alguna manera de modificar la PATH
variable de entorno de una manera independiente de la plataforma usando Python?
¿Algo parecido a os.path.join()
?
Debería poder modificar os.environ
.
Dado que os.pathsep
es el carácter para separar diferentes rutas, debe usar esto para agregar cada nueva ruta:
os.environ["PATH"] += os.pathsep + path
o, si hay varias rutas para agregar en una lista:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Como mencionó, os.path.join
también se puede usar para cada ruta individual que tenga que agregar en el caso de que tenga que construirlas a partir de partes separadas.
os.pathsep
que mencioné (específico de PATH)?os.path.sep != os.pathsep
.Tenga en cuenta que en
os.environ
realidad no es un diccionario. Es un objeto especial similar a un diccionario que realmente establece variables de entorno en el proceso actual usando setenv .>>> os.environ.__class__ <class os._Environ at 0x100472050> >>> import os >>> os.environ["HELLO"] = "WORLD" >>> os.getenv("HELLO") 'WORLD'
Esto significa que
PATH
(y otras variables de entorno) serán visibles para el código C ejecutado en el mismo proceso.(Dado que los comentarios no pueden contener formato, tengo que poner esto en una respuesta, pero siento que es un punto importante que hacer. Este es realmente un comentario sobre el comentario sobre que no hay equivalente a 'exportar' ).
fuente
La advertencia a tener en cuenta al modificar las variables de entorno en Python es que no existe un equivalente del comando de shell "exportar". No hay forma de inyectar cambios en el proceso actual, solo procesos secundarios.
fuente
os.system
,os.popen
osubprocess.Popen
deberían usarse desde la aplicación Python para iniciar otros procesos. De lo contrario, es bastante inútil.export
hace que una variable se copie en el entorno de todos los procesos secundarios , pero no tiene ningún efecto en el proceso principal.