Ortam değişkeni değerlerine nasıl erişilir?


Yanıtlar:


3167

Çevre değişkenlerine os.environ aracılığıyla erişilir

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

Veya aşağıdakileri kullanarak tüm ortam değişkenlerinin bir listesini görebilirsiniz:

os.environ

Bazen tam bir liste görmeniz gerekebilir!

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

Windows'da Python varsayılan yüklemesiC:\Python . Python çalıştırırken öğrenmek istiyorsanız şunları yapabilirsiniz:

import sys
print(sys.prefix)

1
merhaba çubuk, 'varsayılan kurulum' ile ilgili etkili cevabınız için teşekkürler; bakış açısından etkili bağlantıları anlamak yerine hızlı anlamak için. Bu gerçekten takdir ediyorum :) ama (1) sorum hakkında aşağıdaki komut ve çıkış snippet'ine bakın: >>> import os >>> print os.environ ['PYTHONPATH'] Geri izleme (en son çağrı son): Dosya " <konsol> ", satır 1, <modül> Dosya" C: \ Python25 \ lib \ os.py ", satır 435, getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Yok >>> // PLZ devam edecek ... //
Amit Yadav

1. şekilde senaryo İstisna atarken, 2. ile Yok verir. Yani, anlamlı bir değer elde etmek için herhangi bir yolu var mı ya da yanlış bir şekilde yapıyorum ??? Amit.
Amit Yadav

7
os.environ bir sözlüktür. Sözlükte bulunmayan bir anahtara erişmeye çalışmak bir KeyError atar. Anahtar olmadığında get yöntemi yalnızca None değerini döndürür. PYTHONPATH setiniz var mı? Var olduğu garanti edilen PATH gibi bir değişkeni deneyebilir misiniz? Anlamlı bir değer veriyor mu?
Rod

2
PYTHONPATH, Python'un dışından Python'a (sys.path) yeni arama yolu eklemek için kullanılır. Göz at docs.python.org/using/cmdline.html#environment-variables
Çubuk

11
.get()varsayılan olarak da verilebilir.
Gringo Suave

243

Anahtarın var olup olmadığını kontrol etmek ( Trueveya döndürür False)

'HOME' in os.environ

get()Anahtarı yazdırırken de kullanabilirsiniz ; bir varsayılan kullanmak istiyorsanız kullanışlıdır.

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

/home/username/varsayılan nerede


3
Hangisi daha iyi, "HOME" in os.environya da os.environ.get('HOME')?
endolith

11
@endolith Farklı şeyler yaparlar. Birincisi True veya False, ikincisi bir değer, muhtemelen None değerini döndürür.
Trenton

1
@endolith, doğru soru "HOME" in os.environvs woud olabilir os.environ.get('HOME') is None. İlk gördüğünüz gibi çok daha okunaklı ve çalışmak rahat.
Konstantin Sekeresh

59

Orijinal soru (ilk bölüm) "Python'daki ortam değişkenlerinin nasıl kontrol edileceği" idi.

$ FOO'nun ayarlanıp ayarlanmadığını şu şekilde kontrol edebilirsiniz:

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

66
Os.environ'ta "FOO"
ealfonso

4
Deneyin daha hızlı olabilir. Env vars örneği muhtemelen 'denemek' için en iyisidir: stackoverflow.com/a/1835844/187769
RandomInsano

13
@RandomInsano daha hızlı = / = daha iyi. Bu kod bir "if 'FOO' not in os.environ: ..."bloktan daha az okunabilir görünüyor
Dangercrow

44

Ortam değişkenlerine aşağıdakileri kullanarak erişebilirsiniz:

import os
print os.environ

PYTHONPATH veya PYTHONHOME ortam değişkenlerinin içeriğini görmeye çalışın, belki bu ikinci sorunuz için yardımcı olacaktır. Ancak açıklığa kavuşturmalısınız.


29

Ortam değişkenlerine gelince:

import os
print os.environ["HOME"]

Korkarım, iyi bir cevap mümkün olmadan önce ikinci noktanızı biraz daha fazla dışarı çıkarmak zorunda kalacaksınız.


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

Bu, tüm ortam değişkenlerini değerleriyle birlikte basacaktır.


27

Aslında şu şekilde yapılabilir:

import os

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

Ya da sadece:

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

Parametredeki değeri görüntülemek için:

print(os.environ['HOME'])

Veya:

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

Değeri ayarlamak için:

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

4
Hayır, bu cevap gerçekten mevcut cevapların üstüne hiçbir şey
Bart

1
Bu kaldırılmalıdır, diğer cevapların bir kopyasıdır. str.formatsadece süslü bir ektir.
connectyourcharger

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

18

Kodu bir üretim web uygulaması kodunda kullanmayı planlıyorsanız,
Django / Flask gibi herhangi bir web çerçevesini kullanarak, envparse gibi projeleri kullanın , bunu kullanarak değeri tanımladığınız tür olarak okuyabilirsiniz.

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)

NOT: kennethreitz en autoenv kullanarak olanlar olduğunu lütfen not proje belirli ortam değişkenleri yapmak için önerilen bir araçtır autoenvtutmak lütfen .envözel (halka erişilemez) dosyası


11

Bir çok harika kütüphane de var. Örneğin Envs , nesneleri ortam değişkenlerinizden (rad. Örneğin:

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

3

Django için bkz. ( 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

Bunu da deneyebilirsin

İlk olarak, yükleyin python-decouple

pip install python-decouple

onu dosyanıza içe aktar

from decouple import config

Sonra env değişkenini alın

SECRET_KEY=config('SECRET_KEY')

Python kütüphanesi hakkında daha fazla bilgiyi buradan edinebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.