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 True
of 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 autoenv
gebruiken: houd er rekening mee dat het bestand .env
privé 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 environ
is 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_dict
na de opdracht.
Antwoord 13
Importeer de os
module:
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.