Come accedere ai valori delle variabili di ambiente?


2122

Ho impostato una variabile d'ambiente a cui voglio accedere nella mia applicazione Python. Come ottengo il suo valore?

Risposte:


3173

Le variabili d'ambiente sono accessibili tramite os.environ

import os
print(os.environ['HOME'])

Oppure puoi vedere un elenco di tutte le variabili d'ambiente usando:

os.environ

Come a volte potresti aver bisogno di vedere un elenco completo!

# using get will return `None` if a key is not present rather than raise a `KeyError`
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# os.getenv is equivalent, and can also give a default value instead of `None`
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

L'installazione predefinita di Python su Windows è C:\Python. Se vuoi scoprirlo mentre esegui python puoi fare:

import sys
print(sys.prefix)

1
ciao asta, grazie per la tua risposta efficace riguardo a "installazione di default"; efficace dal punto di vista per capirlo rapidamente piuttosto che passare attraverso i collegamenti. Questo è davvero molto apprezzato :) ma riguardo alla mia (1) domanda, guarda il comando e lo snippet di output qui sotto: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (ultima chiamata più recente): File " <console> ", riga 1, nel <modulo> File" C: \ Python25 \ lib \ os.py ", riga 435, in getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Nessuno >>> // PLZ da continuare ... //
Amit Yadav,

In un primo modo, lo script sta generando un'eccezione, mentre con il secondo si ottiene Nessuno. Quindi, c'è un modo per ottenere un valore significativo o sto facendo in modo sbagliato ??? Amit.
Amit Yadav,

7
os.environ è un dizionario. Tentare di accedere a una chiave non presente nel dizionario genererà un KeyError. Il metodo get semplicemente restituisce None quando la chiave non esiste. Hai impostato PYTHONPATH? Puoi provare con una variabile come PATH, che è garantita per esistere? Restituisce un valore significativo?
Rod,

2
PYTHONPATH viene utilizzato per aggiungere un nuovo percorso di ricerca a Python (sys.path) dall'esterno di Python. Dai
Rod

11
.get()può anche essere assegnato un valore predefinito.
Gringo Suave,

243

Per verificare se la chiave esiste (restituisce Trueo False)

'HOME' in os.environ

È inoltre possibile utilizzare get()quando si stampa la chiave; utile se si desidera utilizzare un valore predefinito.

print(os.environ.get('HOME', '/home/username/'))

dove /home/username/è l'impostazione predefinita


3
Quale è meglio "HOME" in os.environo os.environ.get('HOME')?
Endolith

11
@endolith Fanno cose diverse. Il primo restituisce True o False, mentre il secondo restituisce un valore, possibilmente None.
Trenton,

1
@endolith, la domanda corretta woud essere "HOME" in os.environvs os.environ.get('HOME') is None. Come puoi vedere prima è molto più leggibile e comodo con cui lavorare.
Konstantin Sekeresh,

59

La domanda originale (prima parte) era "come controllare le variabili di ambiente in Python".

Ecco come verificare se $ FOO è impostato:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)

66
"FOO" in os.environ
ealfonso,

4
Prova può essere più veloce. Il caso di ENV Vars probabilmente migliore per 'provare': stackoverflow.com/a/1835844/187769
RandomInsano

13
@RandomInsano fast = / = better. Questo codice sembra meno leggibile di un "if 'FOO' not in os.environ: ..."blocco
Dangercrow,

44

È possibile accedere alle variabili di ambiente utilizzando

import os
print os.environ

Prova a vedere il contenuto delle variabili di ambiente PYTHONPATH o PYTHONHOME, forse questo sarà utile per la tua seconda domanda. Tuttavia dovresti chiarirlo.


29

Per quanto riguarda le variabili d'ambiente:

import os
print os.environ["HOME"]

Temo che dovresti approfondire un po 'di più il tuo secondo punto prima che sia possibile una risposta decente.


27
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

Ciò stamperà tutte le variabili di ambiente insieme ai loro valori.


27

In realtà si può fare questo via:

import os

for item, value in os.environ.items():
    print('{}: {}'.format(item, value))

O semplicemente:

for i, j in os.environ.items():
    print(i, j)

Per visualizzare il valore nel parametro:

print(os.environ['HOME'])

O:

print(os.environ.get('HOME')

Per impostare il valore:

os.environ['HOME'] = '/new/value'

4
No, questa risposta in realtà non aggiunge nulla in aggiunta alle risposte esistenti
Bart,

1
Questo dovrebbe essere rimosso, è un duplicato di altre risposte. str.formatè solo un'aggiunta fantasiosa.
connectyourcharger

>>> import os, pprint; pprint.pprint(list(os.environ.items()))
Noobninja,

18

Se stai pianificando di utilizzare il codice in un codice di applicazione Web di produzione,
usando qualsiasi framework web come Django / Flask, usa progetti come envparse , usandolo puoi leggere il valore come tipo definito.

from envparse import env
# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]
white_list = env.list("WHITE_LIST", default=[]) 
# Perfect for reading boolean
DEBUG = env.bool("DEBUG", default=False)

NOTA: l'autoenv di kennethreitz è uno strumento consigliato per creare variabili di ambiente specifiche del progetto, si prega di notare che coloro che lo utilizzano autoenvmantengono il .envfile privato (inaccessibile al pubblico)


11

C'è anche un numero di grandi biblioteche. Envs, ad esempio, ti permetterà di analizzare gli oggetti dalle variabili di ambiente, che è rad. Per esempio:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']

3

Per django consultare ( https://github.com/joke2k/django-environ )

$ pip install django-environ

import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

0

Puoi anche provare questo

Innanzitutto, installa python-decouple

pip install python-decouple

importalo nel tuo file

from decouple import config

Quindi ottenere la variabile env

SECRET_KEY=config('SECRET_KEY')

Maggiori informazioni sulla libreria Python qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.