Como acessar os valores das variáveis ​​de ambiente?

2119

Defino uma variável de ambiente que desejo acessar no meu aplicativo Python. Como obtenho seu valor?

Amit Yadav
fonte

Respostas:

3170

Variáveis ​​de ambiente são acessadas através do os.environ

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

Ou você pode ver uma lista de todas as variáveis ​​de ambiente usando:

os.environ

Como às vezes você pode precisar ver uma lista completa!

# 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))

A instalação padrão do Python no Windows é C:\Python. Se você quiser descobrir enquanto executa o python, você pode:

import sys
print(sys.prefix)
Cajado
fonte
1
Olá rod, obrigado pela sua resposta eficaz sobre 'instalação padrão'; eficaz, do ponto de vista, para entendê-lo rapidamente, em vez de acessar os links. É isso que eu realmente apreciei :), mas sobre a minha (1) pergunta, observe o comando e o trecho de saída abaixo: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (última chamada mais recente): Arquivo " <console> ", linha 1, no <module> Arquivo" C: \ Python25 \ lib \ os.py ", linha 435, no getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') None >>> // PLZ para continuar ... //
Amit Yadav
De um modo 1, o script lança Exception, enquanto que o segundo dá None. Então, existe alguma maneira de obter um valor significativo ou estou fazendo de maneira errada ??? Amit.
Amit Yadav
7
os.environ é um dicionário. Tentar acessar uma chave não presente no dicionário lançará um KeyError. O método get simplesmente retorna None quando a chave não existe. Você tem o conjunto PYTHONPATH? Você pode tentar com uma variável como PATH, que é garantida a existência? Retorna um valor significativo?
Rod
2
PYTHONPATH é usado para adicionar um novo caminho de pesquisa ao Python (sys.path) de fora do Python. Dê uma olhada em docs.python.org/using/cmdline.html#environment-variables
Rod
11
.get()também pode receber um padrão.
Gringo Suave
243

Para verificar se a chave existe (retorna Trueou False)

'HOME' in os.environ

Você também pode usar get()ao imprimir a chave; útil se você deseja usar um padrão.

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

onde /home/username/é o padrão

lgriffiths
fonte
3
Qual é melhor "HOME" in os.environou os.environ.get('HOME')?
endolith
11
@ endolith Eles fazem coisas diferentes. O primeiro retorna True ou False, enquanto o segundo retorna um valor, possivelmente None.
Trenton
1
@endolith, a pergunta correta caracterizaria ser "HOME" in os.environvs os.environ.get('HOME') is None. Como você pode ver primeiro, é muito mais legível e confortável de se trabalhar.
Konstantin Sekeresh
59

A pergunta original (primeira parte) era "como verificar variáveis ​​de ambiente em Python".

Veja como verificar se $ FOO está definido:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C Wilson
fonte
66
"FOO" em os.environ
ealfonso 17/10
4
A tentativa pode ser mais rápida. O caso de env vars é provavelmente o melhor para 'try': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano mais rápido = / = melhor. Este código é menos legível do que um "if 'FOO' not in os.environ: ..."bloco
Dangercrow
44

Você pode acessar as variáveis ​​de ambiente usando

import os
print os.environ

Tente ver o conteúdo das variáveis ​​de ambiente PYTHONPATH ou PYTHONHOME, talvez isso seja útil para sua segunda pergunta. No entanto, você deve esclarecer isso.

andrei1089
fonte
29

Quanto às variáveis ​​de ambiente:

import os
print os.environ["HOME"]

Receio que você precise aprofundar um pouco mais o seu segundo ponto antes que uma resposta decente seja possível.

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

Isso imprimirá todas as variáveis ​​de ambiente junto com seus valores.

Açoriano
fonte
27

Na verdade, isso pode ser feito:

import os

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

Ou simplesmente:

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

Para visualizar o valor no parâmetro:

print(os.environ['HOME'])

Ou:

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

Para definir o valor:

os.environ['HOME'] = '/new/value'
britodfbr
fonte
4
Não, esta resposta realmente não acrescenta nada em cima das respostas existentes
Bart
1
Isso deve ser removido, é uma duplicata de outras respostas. str.formaté apenas uma adição sofisticada.
connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja
18

Se você planeja usar o código em um código de aplicativo da web de produção,
usando qualquer estrutura da web como Django / Flask, use projetos como envparse , usando-o, você poderá ler o valor como seu tipo definido.

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)

OBSERVAÇÃO: o autoenv de kennethreitz é uma ferramenta recomendada para tornar variáveis ​​de ambiente específicas do projeto; observe que aqueles que estão usando autoenvmantêm o .envarquivo privado (inacessível ao público)

Renjith Thankachan
fonte
11

Há também várias ótimas bibliotecas. Envs, por exemplo, permitirá analisar objetos de suas variáveis ​​de ambiente, que é rad. Por exemplo:

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

Para django, consulte ( 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')
Leonardo
fonte
0

Você também pode tentar isso

Primeiro, instale python-decouple

pip install python-decouple

importe-o em seu arquivo

from decouple import config

Então pegue a variável env

SECRET_KEY=config('SECRET_KEY')

Leia mais sobre a biblioteca python aqui

Steve Mitto
fonte