วิธีการเข้าถึงค่าตัวแปรสภาพแวดล้อม?


2116

ฉันตั้งค่าตัวแปรสภาพแวดล้อมที่ฉันต้องการเข้าถึงในแอปพลิเคชัน Python ของฉัน ฉันจะรับค่าได้อย่างไร

คำตอบ:


3165

ตัวแปรสภาพแวดล้อมสามารถเข้าถึงได้ผ่านทางos.environ

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

หรือคุณสามารถดูรายการตัวแปรสภาพแวดล้อมทั้งหมดโดยใช้:

os.environ

บางครั้งคุณอาจต้องดูรายการทั้งหมด!

# 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 C:\Pythonคือ หากคุณต้องการทราบว่าในขณะที่ใช้งาน python คุณสามารถทำได้:

import sys
print(sys.prefix)

1
สวัสดีคันขอบคุณสำหรับการตอบที่มีประสิทธิภาพของคุณเกี่ยวกับ 'เริ่มต้นการติดตั้ง'; มีประสิทธิภาพในมุมมองที่จะเข้าใจได้อย่างรวดเร็วมากกว่าผ่านการเชื่อมโยง นั่นเป็นสิ่งที่ฉันชื่นชมจริง ๆ :) แต่เกี่ยวกับคำถามของฉัน (1) โปรดดูคำสั่งและตัวอย่างข้อมูลด้านล่าง: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ " <console> ", บรรทัดที่ 1, ใน <โมดูล> ไฟล์" C: \ Python25 \ lib \ os.py ", บรรทัดที่ 435, ในgetitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> พิมพ์ os.environ.get ('PYTHONPATH') ไม่มี >>> // PLZ เพื่อดำเนินการต่อ ... //
Amit Yadav

ในวิธีที่ 1 สคริปต์จะโยนข้อยกเว้นในขณะที่กับคนที่สองให้ไม่มี ดังนั้นมีวิธีใดที่จะได้รับคุณค่าที่มีความหมายหรือฉันกำลังทำผิดวิธี ??? Amit
Amit Yadav

7
os.environ เป็นพจนานุกรม การพยายามเข้าถึงกุญแจที่ไม่มีอยู่ในพจนานุกรมจะเป็นการโยน KeyError เมธอด get รับคืนค่า None เมื่อไม่มีคีย์ คุณมี PYTHONPATH ตั้งหรือไม่? คุณลองกับตัวแปรเช่น PATH ที่รับประกันว่ามีอยู่ได้หรือไม่? มันคืนค่าที่มีความหมายหรือไม่?
ร็อด

2
PYTHONPATH ใช้เพื่อเพิ่มพา ธ การค้นหาใหม่ไปยัง Python (sys.path) จาก Python ภายนอก ดูdocs.python.org/using/cmdline.html#environment-variables
Rod

11
.get()ยังสามารถได้รับการเริ่มต้น
Gringo Suave

243

หากต้องการตรวจสอบว่ามีกุญแจอยู่Trueหรือไม่(ส่งคืนหรือFalse)

'HOME' in os.environ

คุณยังสามารถใช้get()เมื่อพิมพ์คีย์ มีประโยชน์ถ้าคุณต้องการใช้ค่าเริ่มต้น

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

ที่/home/username/เป็นค่าเริ่มต้น


3
ซึ่งจะดีกว่า"HOME" in os.environหรือos.environ.get('HOME')?
endolith

11
@endolith พวกเขาทำสิ่งต่าง ๆ ผลตอบแทนที่แรกจริงหรือเท็จในขณะที่สองคืนค่าอาจเป็นไม่มี
Trenton

1
@endolith คำถามที่ถูกต้อง woud จะเทียบ"HOME" in os.environ os.environ.get('HOME') is Noneอย่างที่คุณเห็นว่าอันดับแรกอ่านได้ง่ายขึ้นและสะดวกสบายในการทำงาน
Konstantin Sekeresh

59

คำถามเดิม (ส่วนแรก) คือ "วิธีการตรวจสอบตัวแปรสภาพแวดล้อมใน Python"

นี่คือวิธีตรวจสอบว่ามีการตั้งค่า $ FOO หรือไม่:

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

66
"FOO" ในระบบ
ปฏิบัติการ

4
ลองได้เร็วขึ้น กรณีของ env vars น่าจะดีที่สุดสำหรับ 'ลอง': stackoverflow.com/a/1835844/187769
RandomInsano

13
@RandomInsano เร็วขึ้น = / = ดีกว่า รหัสนี้ดูเหมือนว่าจะอ่านได้น้อยกว่า"if 'FOO' not in os.environ: ..."บล็อก
Dangercrow

44

คุณสามารถเข้าถึงตัวแปรสภาพแวดล้อมได้โดยใช้

import os
print os.environ

ลองดูเนื้อหาของตัวแปรสภาพแวดล้อม PYTHONPATH หรือ PYTHONHOME บางทีนี่อาจเป็นประโยชน์สำหรับคำถามที่สองของคุณ อย่างไรก็ตามคุณควรชี้แจง


29

สำหรับตัวแปรสภาพแวดล้อม:

import os
print os.environ["HOME"]

ฉันเกรงว่าคุณจะต้องแยกประเด็นที่สองของคุณออกไปอีกเล็กน้อยก่อนที่คำตอบที่เหมาะสมจะเป็นไปได้


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

ที่จะพิมพ์ตัวแปรสภาพแวดล้อมทั้งหมดพร้อมกับค่าของพวกเขา


27

จริงๆแล้วมันสามารถทำได้:

import os

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

หรือเพียงแค่:

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

สำหรับการดูค่าในพารามิเตอร์:

print(os.environ['HOME'])

หรือ:

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

วิธีตั้งค่า:

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

4
ไม่คำตอบนี้ไม่ได้เพิ่มอะไรมากไปกว่าคำตอบที่มีอยู่เดิม
Bart

1
สิ่งนี้ควรถูกลบออกมันเป็นคำตอบที่ซ้ำกัน str.formatเป็นเพียงการเพิ่มแฟนซี
connectyourcharger

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

18

หากคุณวางแผนที่จะใช้รหัสในโค้ดแอปพลิเคชันเว็บที่ใช้งานจริง
โดยใช้กรอบงานเว็บใด ๆ เช่น Django / Flask ให้ใช้โปรเจ็กต์เช่นenvparseโดยใช้มันคุณสามารถอ่านค่าตามประเภทที่คุณกำหนด

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)

หมายเหตุ: autoenv ของkennethreitzเป็นเครื่องมือที่แนะนำสำหรับการสร้างตัวแปรสภาพแวดล้อมของโครงการโดยเฉพาะโปรดทราบว่าผู้ที่ใช้งานอยู่autoenvโปรดให้.envไฟล์เป็นส่วนตัว (ไม่สามารถเข้าถึงได้)


11

นอกจากนี้ยังมีห้องสมุดที่ดีจำนวนมาก ตัวอย่างEnvsจะช่วยให้คุณสามารถแยกวิเคราะห์วัตถุจากตัวแปรสภาพแวดล้อมของคุณซึ่งเป็น rad ตัวอย่างเช่น:

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


0

คุณสามารถลองสิ่งนี้ได้

ก่อนติดตั้ง python-decouple

pip install python-decouple

นำเข้าไว้ในไฟล์ของคุณ

from decouple import config

จากนั้นรับตัวแปร env

SECRET_KEY=config('SECRET_KEY')

อ่านเพิ่มเติมเกี่ยวกับห้องสมุดหลามที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.