Hoe toegang te krijgen tot de waarden van omgevingsvariabelen

Ik heb een omgevingsvariabele ingesteld waartoe ik toegang wil hebben in mijn Python-toepassing. Hoe krijg ik de waarde ervan?


Antwoord 1, autoriteit 100%

Omgevingsvariabelen zijn toegankelijk via os.environ

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

Of u kunt een lijst met alle omgevingsvariabelen bekijken met:

os.environ

Omdat je soms een volledige lijst moet zien!

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

De Python standaardinstallatielocatie op Windows is C:\Python. Als je erachter wilt komen terwijl je Python gebruikt, kun je het volgende doen:

import sys
print(sys.prefix)

Antwoord 2, autoriteit 8%

Om te controleren of de sleutel bestaat (retourneert Trueof False)

'HOME' in os.environ

U kunt ook get()gebruiken bij het afdrukken van de sleutel; handig als je een standaard wilt gebruiken.

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

waar /home/username/de standaard is


Antwoord 3, autoriteit 2%

De oorspronkelijke vraag (eerste deel) was “hoe omgevingsvariabelen in Python te controleren.”

Zo controleert u of $FOO is ingesteld:

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

Antwoord 4

Je hebt toegang tot de omgevingsvariabelen met

import os
print os.environ

Probeer de inhoud van de omgevingsvariabelen PYTHONPATH of PYTHONHOME te zien. Misschien is dit nuttig voor uw tweede vraag.


Antwoord 5

Eigenlijk kan het op deze manier:

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

Of gewoon:

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

Voor het bekijken van de waarde in de parameter:

print(os.environ['HOME'])

Of:

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

De waarde instellen:

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

Antwoord 6

Wat betreft de omgevingsvariabelen:

import os
print os.environ["HOME"]

Antwoord 7

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

Dat zal alle omgevingsvariabelen samen met hun waarden afdrukken.


Antwoord 8

Als u van plan bent de code te gebruiken in een productie-webtoepassingscode, gebruik dan een webframework zoals Djangoen Flask, gebruiken projecten zoals envparse. Als u het gebruikt, kunt u de waarde lezen als uw gedefinieerde type.

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)

OPMERKING: autoenvvan kennethreitz is een aanbevolen tool voor het maken van projectspecifieke omgevingsvariabelen. Voor degenen die autoenvgebruiken: houd er rekening mee dat het bestand .envprivé moet blijven (niet toegankelijk voor het publiek).


Antwoord 9

Er zijn ook een aantal geweldige bibliotheken. Met Envskunt u bijvoorbeeld objecten ontleden uit uw omgevingsvariabelen, wat rad is. Bijvoorbeeld:

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

Antwoord 10

Je kunt ook dit proberen:

Installeer eerst python-decouple

pip install python-decouple

Importeer het in je bestand

from decouple import config

Verkrijg dan de omgevingsvariabele

SECRET_KEY=config('SECRET_KEY')

Lees hiermeer over de Python-bibliotheek.


Antwoord 11

Voor Django, zie 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')

Antwoord 12

Een prestatiegerichte aanpak – het aanroepen van environis duur, dus het is beter om het één keer aan te roepen en op te slaan in een woordenboek. Volledig voorbeeld:

from os import environ
# Slower
print(environ["USER"], environ["NAME"])
# Faster
env_dict = dict(environ)
print(env_dict["USER"], env_dict["NAME"])

P.S. Als je je zorgen maakt over het blootleggen van privé-omgevingsvariabelen, reinig dan env_dictna de opdracht.


Antwoord 13

Importeer de osmodule:

import os

Om een omgevingsvariabele te krijgen:

os.environ.get('Env_var')

Om een omgevingsvariabele in te stellen:

# Set environment variables
os.environ['Env_var'] = 'Some Value'

Antwoord 14

U moet eerst os importeren met

import os

en druk dan de waarde van de omgevingsvariabele af

print(os.environ['yourvariable'])

vervang natuurlijk uwvariabele als de variabele waartoe u toegang wilt.


Antwoord 15

.env-bestand

Hier is mijn .env-bestand (ik heb meerdere tekens in elke toets gewijzigd om te voorkomen dat mensen mijn accounts hacken).

SECRET_KEY=6g18169690e33af0cb10f3eb6b3cb36cb448b7d31f751cde
AWS_SECRET_ACCESS_KEY=18df6c6e95ab3832c5d09486779dcb1466ebbb12b141a0c4
DATABASE_URL='postgres://drjpczkqhnuvkc:f0ba6afd133c53913a4df103187b2a34c14234e7ae4b644952534c4dba74352d@ec2-54-146-4-66.compute-1.amazonaws.com:5432/ddnl5mnb76cne4'
AWS_ACCESS_KEY_ID=AKIBUGFPPLQFTFVDVIFE
DISABLE_COLLECTSTATIC=1
EMAIL_HOST_PASSWORD=COMING SOON
MAILCHIMP_API_KEY=a9782cc1adcd8160907ab76064411efe-us17
MAILCHIMP_EMAIL_LIST_ID=5a6a2c63b7
STRIPE_PUB_KEY=pk_test_51HEF86ARPAz7urwyGw9xwLkgbgfCYT48LttlwjEkb88I7Ljb5soBtuKXBaPiKfuu0Cx2BzIowR3jJFkC8ybFBAEf00DFY46tB8
STRIPE_SECRET_KEY=sk_test_19HEF55BCEAz7urwytx7tO3QCxV4R8DEFXbqj6esg7OKuybiSTI8iJD8mmJUQpg4RKENxuS04DKOCzYHpDkAjUttO00LOmsT5Eg

instellingen

mij werd verteld dat mijn gegevens waren beschadigd. Ik worstelde om te trainen wat er aan de hand was. Ik had een vermoeden van de waarden van .NV werden niet doorgegeven in mijn instellingenbestand.

print(os.environ.get('AWS_SECRET_ACCESS_KEY'))
print(os.environ.get('AWS_ACCESS_KEY_ID'))
print(os.environ.get('AWS_SECRET_ACCESS_KEY'))
print(os.environ.get('DATABASE_URL'))
print(os.environ.get('SECRET_KEY'))
print(os.environ.get('DISABLE_COLLECTSTATIC'))
print(os.environ.get('EMAIL_HOST_PASSWORD'))
print(os.environ.get('MAILCHIMP_API_KEY'))
print(os.environ.get('MAILCHIMP_EMAIL_LIST_ID'))
print(os.environ.get('STRIPE_PUB_KEY'))
print(os.environ.get('STRIPE_SECRET_KEY'))

De enige waarde die correct wordt afgedrukt, was de secret_key. Ik heb het .NV-bestand beoordeeld en voor de levensduur van mij kon de reden niet zien waarom de Secret_key werkte en niets anders.

Ik heb alles uiteindelijk gewerkt door dit boven de afdrukafschriften te plaatsen.

from dotenv import load_dotenv   #for python-dotenv method
load_dotenv()                    #for python-dotenv method

en doen

pip install -U python-dotenv

Ik ben nog steeds niet zeker waarom Secret_key werkte toen alle anderen zijn verbroken.

Other episodes