Bagaimana cara mengakses nilai variabel lingkungan?

2122

Saya menetapkan variabel lingkungan yang ingin saya akses di aplikasi Python saya. Bagaimana saya mendapatkan nilainya?

Amit Yadav
sumber

Jawaban:

3173

Variabel lingkungan diakses melalui os.environment

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

Atau Anda dapat melihat daftar semua variabel lingkungan menggunakan:

os.environ

Karena terkadang Anda mungkin perlu melihat daftar lengkap!

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

Instalasi default python pada Windows adalah C:\Python. Jika Anda ingin mencari tahu saat menjalankan python, Anda dapat melakukannya:

import sys
print(sys.prefix)
tongkat
sumber
1
Halo, terima kasih atas balasan efektif Anda tentang 'instalasi default'; efektif dalam sudut pandang untuk memahaminya dengan cepat daripada melalui tautan. Itu benar-benar saya hargai :) tetapi tentang (1) pertanyaan saya, silakan lihat perintah dan output snippet di bawah ini: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (panggilan terakhir terakhir): File " <console> ", baris 1, dalam <module> File" C: \ Python25 \ lib \ os.py ", baris 435, dalam getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> cetak os.environ.get ('PYTHONPATH') Tidak ada >>> // PLZ akan dilanjutkan ... //
Amit Yadav
Dalam 1 cara script melemparkan Exception sedangkan yang ke 2 memberi None. Jadi, apakah ada cara untuk mendapatkan nilai yang berarti atau apakah saya melakukan dengan cara yang salah ??? Amit
Amit Yadav
7
os.environ adalah kamus. Mencoba mengakses kunci yang tidak ada dalam kamus akan melemparkan KeyError. Metode get hanya mengembalikan Tidak ada ketika kunci tidak ada. Apakah Anda memiliki set PYTHONPATH? Bisakah Anda mencoba dengan variabel seperti PATH, yang dijamin ada? Apakah itu mengembalikan nilai yang berarti?
Rod
2
PYTHONPATH digunakan untuk menambahkan jalur pencarian baru ke Python (sys.path) dari luar Python. Lihatlah docs.python.org/using/cmdline.html#environment-variables
Rod
11
.get()bisa juga diberikan default.
Gringo Suave
243

Untuk memeriksa apakah kunci ada (mengembalikan Trueatau False)

'HOME' in os.environ

Anda juga dapat menggunakan get()saat mencetak kunci; berguna jika Anda ingin menggunakan default.

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

dimana /home/username/defaultnya

lgriffiths
sumber
3
Mana yang lebih baik, "HOME" in os.environatau os.environ.get('HOME')?
endolit
11
@endolith Mereka melakukan hal yang berbeda. Yang pertama mengembalikan Benar atau Salah, sedangkan yang kedua mengembalikan nilai, mungkin Tidak ada.
Trenton
1
@endolith, pertanyaan yang benar woud "HOME" in os.environvs os.environ.get('HOME') is None. Seperti yang Anda lihat pertama jauh lebih mudah dibaca & nyaman untuk digunakan.
Konstantin Sekeresh
59

Pertanyaan asli (bagian pertama) adalah "bagaimana memeriksa variabel lingkungan dengan Python."

Berikut cara memeriksa apakah $ FOO diatur:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C Wilson
sumber
66
"FOO" di os.environ
ealfonso
4
Usahakan bisa lebih cepat. Kasus env vars kemungkinan terbaik untuk 'coba': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano lebih cepat = / = lebih baik. Kode ini terlihat kurang dapat dibaca daripada sebuah "if 'FOO' not in os.environ: ..."blok
Dangercrow
44

Anda dapat mengakses variabel lingkungan menggunakan

import os
print os.environ

Cobalah melihat konten variabel lingkungan PYTHONPATH atau PYTHONHOME, mungkin ini akan membantu untuk pertanyaan kedua Anda. Namun Anda harus menjelaskannya.

andrei1089
sumber
29

Adapun variabel lingkungan:

import os
print os.environ["HOME"]

Saya khawatir Anda harus menyempurnakan poin kedua Anda sedikit lagi sebelum jawaban yang layak mungkin.

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

Itu akan mencetak semua variabel lingkungan beserta nilainya.

Azorian
sumber
27

Sebenarnya itu bisa dilakukan sejauh ini:

import os

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

Atau sederhananya:

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

Untuk melihat nilai dalam parameter:

print(os.environ['HOME'])

Atau:

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

Untuk mengatur nilai:

os.environ['HOME'] = '/new/value'
britodfbr
sumber
4
Tidak, jawaban ini benar-benar tidak menambahkan apa pun di atas jawaban yang ada
Bart
1
Ini harus dihapus, itu adalah duplikat dari jawaban lain. str.formathanyalah tambahan mewah.
Hubungkan chargerAnda
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja
18

Jika Anda berencana untuk menggunakan kode dalam kode aplikasi web produksi,
menggunakan kerangka kerja web seperti Django / Flask, gunakan proyek seperti envparse , dengan menggunakannya Anda dapat membaca nilai sebagai tipe yang Anda tentukan.

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)

CATATAN: autoenv kennethreitz adalah alat yang direkomendasikan untuk membuat variabel lingkungan spesifik proyek, harap dicatat bahwa mereka yang menggunakan autoenvharap menjaga .envfile pribadi (tidak dapat diakses oleh publik)

Renjith Thankachan
sumber
11

Ada juga sejumlah perpustakaan hebat. Envs misalnya akan memungkinkan Anda untuk mem-parsing objek dari variabel lingkungan Anda, yaitu rad. Sebagai contoh:

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

Untuk django lihat ( 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
sumber
0

Anda juga dapat mencoba ini

Pertama, instal python-decouple

pip install python-decouple

impor di file Anda

from decouple import config

Kemudian dapatkan variabel env

SECRET_KEY=config('SECRET_KEY')

Baca lebih lanjut tentang perpustakaan python di sini

Steve Mitto
sumber