2009-11-05 14 views

Respuesta

110

Debería poder modificar os.environ.

Desde os.pathsep es el carácter para separar los diferentes caminos, usted debe usar esto para añadir cada nuevo camino:

os.environ["PATH"] += os.pathsep + path 

o, si hay varios caminos para añadir en una lista:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist) 

Como mencionaste, os.path.join también se puede usar para cada ruta individual que debes adjuntar en caso de que tengas que construirlas desde partes separadas.

+0

Lo que con separadores de ambiente PATH ? ? linux -/usr/bin:/lib: ":" windows - C: \ asdf \; C: \ Prog ...; ";" – bua

+2

@bua: ¿te refieres al 'os.pathsep' que mencioné (específico de PATH)? – RedGlyph

+0

Gracias, eso es lo que estaba buscando. – resi

6

La advertencia a tener en cuenta al modificar las variables de entorno en Python, es que no hay un equivalente del comando de shell "exportar". No hay forma de inyectar cambios en el proceso actual, solo procesos secundarios.

+0

+1: Es sensato señalarlo, los comandos como 'os.system',' os.popen' o 'subprocess.Popen' se deben usar desde la aplicación Python para iniciar otros procesos. De lo contrario, no tiene sentido. – RedGlyph

+8

Esto no es verdad. – Glyph

+3

Aclaración de la declaración de Glyph: esto no es cierto porque los cambios * se * inyectan en el proceso actual (que es el proceso de python). OP probablemente significó que no hay forma de inyectar cambios en el proceso padre (que normalmente es un shell del que se ejecutó el script python). – PonyEars

14

Tenga en cuenta que os.environ no es en realidad un diccionario. Es un diccionario especial - como el objeto que en realidad 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) se ser visible para ejecutar código C en el mismo proceso.

(Dado que los comentarios no pueden contener un formato, tengo que poner esto en una respuesta, pero me siento como que es un punto importante para hacer. Esto es realmente un comentario sobre the comment about there being no equivalent to 'export'.)

Cuestiones relacionadas