Променљиве Питхон окружења и како радити са њима

Желите да боље управљате својом конфигурацијом? Научите како да радите са варијаблама окружења у Питхон-у.

Када сам себи учио Питхон, правио сам пројекте да применим оно што сам управо научио. Подскуп оних који су укључени у повезивање са базом података и њено испитивање помоћу Питхон-а. Што је значило да морам да сачувам конфигурацију базе података и осетљиве информације као што су корисничко име и лозинка за аутентификацију.

Чврсто кодирање тако осетљивих информација у Питхон скрипти није била добра идеја. И научио сам како да користим конфигурационе датотеке и променљиве окружења — заједно са уграђеним модулима Питхон-а за рад са њима.

Дакле, кад год треба да користим осетљиве информације као што су лозинке и АПИ кључеви у својим апликацијама, постављам их као променљиве окружења и преузимам их по потреби. У овом водичу ћу вас провести кроз променљиве окружења и како да радите са њима у Питхон-у.

Шта су варијабле окружења?

Променљиве окружења су променљиве ван ваше апликације које чувају информације о конфигурацији, системске поставке и слично. Њима обично управља оперативни систем или окружење апликације. Кључне карактеристике варијабли окружења укључују:

  • Парови име-вредност: Променљиве окружења састоје се од имена (познатог и као кључ) и одговарајуће вредности.
  • Системски опсег: Можете подесити променљиве окружења на нивоу система, чинећи их доступним свим процесима који се покрећу на систему. Ако је потребно, такође можете да их измените или дефинишете на нивоу апликације, утичући само на ту специфичну апликацију.
  • Динамички и променљиви: Можете да мењате променљиве окружења током времена рада, пружајући флексибилност.

Како су варијабле окружења корисне

Променљиве окружења нуде неколико предности за управљање конфигурацијом и осетљивим информацијама у вашим Питхон апликацијама:

  • Раздвајање брига: Чувањем конфигурације ван вашег кода, бриге око управљања конфигурацијом држите одвојено од логике ваше апликације.
  • Безбедност: Можете да складиштите осетљиве податке, као што су АПИ кључеви и акредитиви базе података, у променљиве окружења — без излагања у изворном коду — смањујући ризик од излагања.
  • Флексибилност: Са варијаблама окружења, ажурирање поставки конфигурације је једноставно, јер можете ажурирати/уносити промене ван базе кода. Променљиве окружења вам омогућавају да прилагодите подешавања конфигурације без измене кода. Ова флексибилност је посебно корисна за примену апликација у различитим окружењима или приликом ажурирања акредитива.
  32 најбоље веб апликације године 2014

У следећим одељцима овог водича ћемо истражити како да поставите, приступите и управљате варијаблама окружења у Питхон-у и како оне побољшавају управљање конфигурацијом у вашим пројектима.

Како подесити варијабле окружења

Можете подесити променљиве окружења помоћу командне линије. Опсег таквих варијабли окружења се односи само на тренутну сесију—и не трају изван тренутне сесије.

Ако сте на Мац или Линук машини, можете поставити променљиву окружења у тренутној терминалској сесији на следећи начин:

export MY_VARIABLE=my_value

Ако сте корисник Виндовс-а, можете привремено да подесите променљиву окружења као што је приказано:

set MY_VARIABLE=my_value

Приступ променљивим окружења у Питхон-у

Питхон обезбеђује ос модул за функционалност у вези са оперативним системом. А ос.енвирон је речник променљивих окружења. Имена променљивих окружења и њихове вредности су кључеви и вредности речника, респективно.

Дакле, можете приступити вредностима променљивих окружења – користећи (њихова имена као) кључеве – баш као што бисте приступили елементима речника.

Ево неколико примера:

import os
print(os.environ['HOME'])
# Output: /home/balapriya
print(os.environ['USER'])
# Output: balapriya

Засада је добро. Али шта се дешава ако покушате да приступите вредности променљиве окружења која никада није била подешена?

Хајде да покушамо да приступимо АПИ_КЕИ који још нисмо подесили:

print(os.environ['API_KEY'])

Као што се очекивало, добићете КеиЕррор:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen os>", line 679, in __getitem__
KeyError: 'API_KEY'

Руковање кључним грешкама

Можете руковати КеиЕррор као што је приказано:

import os

try:
	api_key = os.environ['API_KEY']
	print(f'API_KEY is set to: {api_key}')
except KeyError:
	print('API_KEY is not set. Please configure it.')

Овај приступ не зауставља нагло извршавање програма када се појави изузетак КеиЕррор. Међутим, пружа описну поруку о грешци:

# Output
API_KEY is not set. Please configure it.

Дакле, када се остатак програма не изврши како је очекивано, знамо да смо пропустили подешавање потребне променљиве окружења.

Приступање варијаблама окружења коришћењем методе гет().

Можете користити методу речника гет() да бисте добили вредност променљиве окружења. Уместо КеиЕррор, метода гет() враћа Ноне ако променљива није пронађена.

Приступ променљивој НОТ_СЕТ коју нисмо подесили враћа Ништа:

print(os.environ.get('NOT_SET'))
# Output: None

Више волим подизање грешке кључа када променљива окружења није подешена. Затим пустите да прође тихо или да буде укључен у Ноне који метод гет() враћа.

  Како уклонити „Често посећено“ на Сафарију (иПхоне и Мац)

Али метода гет() је од помоћи када можемо да унесемо подразумевану вредност за одређену променљиву окружења ако није подешена.

Ево примера:

print(os.environ.get('HOME','/home/user'))
# Output: /home/balapriya

Како управљати конфигурацијом са варијаблама окружења

Узмимо сада неколико практичних примера где користимо променљиве окружења у нашој апликацији.

Пример 1: Конфигурисање параметара везе са базом података

Рецимо да желите да се повежете на ПостгреСКЛ базу података из Питхон-а. Да бисте то урадили, можете да инсталирате и користите псицопг2 конектор:

pip install psycopg2

У овом примеру користимо променљиве окружења да конфигуришемо параметре везе са базом података. Ако променљиве окружења нису подешене, дајемо подразумеване вредности за коришћење.

import os
import psycopg2  

# Retrieve database configuration from environment variables
db_host = os.environ.get('DB_HOST', 'localhost')
db_port = os.environ.get('DB_PORT', '5432')
db_user = os.environ.get('DB_USER', 'myuser')
db_password = os.environ.get('DB_PASSWORD', 'mypassword')

# Establish a database connection
try:
	connection = psycopg2.connect(
    	host=db_host,
    	port=db_port,
    	user=db_user,
    	password=db_password,
    	database="mydb"
	)
	print('Connected to the database!')
except Exception as e:
	print(f'Error connecting to the database: {e}')

Пример 2: Управљање АПИ кључевима

Узмимо још један пример који укључује употребу АПИ кључева.

Поред ЦхатГПТ интерфејса, можете користити и ОпенАИ АПИ за подршку ОпенАИ ЛЛМ-а у вашим апликацијама.

Када се пријавите за ОпенАИ налог, видећете (обично) неке бесплатне, временски ограничене АПИ кредите. Узмите свој АПИ кључ тако што ћете отићи на Подешавања > Прикажи АПИ кључеве.

Можете да користите Опен АИ Питхон СДК и оквир као што је ЛангЦхаин за прављење апликација. Да бисте то урадили, потребно је да инсталирате библиотеке (у виртуелном окружењу) користећи пип:

pip install openai
pip install langchain 

Ево како можете да подесите ОПЕНАИ_АПИ_КЕИ као променљиву окружења:

import os
os.environ["OPENAI_API_KEY"]='your-api-key'

Сада можете да приступите Опен АИ ЛЛМ у својој скрипти на следећи начин:

from langchain.llms import OpenAI
model=OpenAI(model_name="gpt-3.5-turbo")

Како да измените варијабле окружења у Питхон-у

Можете да додирнете ос.енвирон речник из ос модула да бисте изменили променљиве окружења у оквиру тренутног Питхон процеса:

import os

# Modify an existing environment variable or create a new one
os.environ['MY_VARIABLE'] = 'new_value'

У Питхон-у можете користити подпроцесни модул да покрене подпроцесе из постојеће Питхон скрипте. Што је корисно када желите да покренете системске програме у Питхон-у.

У следећем примеру, мењамо ПАТХ променљиву окружења додиром на речник ос.енвирон. Затим покрећемо ецхо $ПАТХ као подпроцес:

import os
import subprocess

# Set a custom environment variable for the subprocess
os.environ['PATH'] = '/custom/path'

# Run a subprocess that accesses the PATH environment variable
result = subprocess.run("echo $PATH", shell=True, stdout=subprocess.PIPE)
output = result.stdout.decode()
print(output)
print(f'Subprocess output: {output}')

Видимо да ПАТХ узима вредност /цустом/патх:

# Output
/custom/path

Обим модификованих варијабли окружења

Важно је напоменути да су ова ажурирања променљивих окружења привремена и важе само за тренутни Питхон процес. Када се скрипта заврши, промене се одбацују:

  • Тренутни Питхон процес: Када модификујете променљиву окружења користећи ос.енвирон у оквиру ваше Питхон скрипте, промена је локална за тренутни Питхон процес. То неће утицати на друге покренуте процесе или будуће Питхон сесије.
  • Подређени процеси: Промене променљиве окружења направљене у оквиру тренутног Питхон процеса наслеђују подређени процеси које је креирала ваша скрипта. На пример, ако покренете подпроцес из ваше Питхон скрипте (родитељски процес), подређени процес ће имати приступ измењеним варијаблама окружења (као што се види у примеру).
  • Није системски: Променљиве окружења постављене унутар Питхон скрипте неће постојати ван извршавања те скрипте.
  Како пронаћи пријатеље или некога кога познајете на Снапцхату

Ако треба да унесете сталне промене у променљиве окружења на нивоу система, обично то треба да урадите користећи методе специфичне за оперативни систем.

Како учитати .енв датотеке помоћу питхон-дотенв

Тхе питхон-дотенв библиотека је популаран Питхон пакет који поједностављује процес учитавања варијабли окружења из .енв датотеке у ваш Питхон пројекат. Посебно је корисно када имате више окружења (нпр. развој, продукција) са различитим конфигурацијама и желите да ова подешавања задржите одвојено од свог изворног кода.

Инсталирање питхон-дотенв

Да бисте користили питхон-дотенв, прво морате да га инсталирате. Можете га инсталирати – унутар виртуелног окружења – користећи пип, Питхон менаџер пакета:

pip install python-dotenv

Учитавање променљивих окружења из .енв датотеке

Сада можете креирати .енв датотеку у основном директоријуму вашег пројекта и попунити је паровима кључ/вредност, баш као и обичне променљиве окружења. Хајде да направимо следећу .енв датотеку са вредностима чувара места:

API_KEY=your_api_key_here
DB_PASSWORD=your_database_password_here

Сада можете учитати променљиве окружења из .енв датотеке користећи питхон-дотенв на следећи начин:

import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Access the environment variables
api_key = os.getenv("API_KEY")
database_password = os.getenv("DB_PASSWORD")

# Print out the env variables
print(f"API Key: {api_key}")
print(f"Database Password: {database_password}")

Приметите да смо користили ос.гетенв(ВАРИАБЛЕ_НАМЕ) да бисмо добили вредности променљивих окружења. Ово је такође валидан (и ређе коришћен) начин приступа променљивим окружења.

Ево излаза:

API Key: your-api-key-here
Database Password: your-database-url-here

У овом примеру:

  • Користимо лоад_дотенв() за учитавање променљивих окружења дефинисаних у .енв датотеци у тренутно окружење.
  • Затим користимо ос.гетенв() за приступ варијаблама окружења: АПИ_КЕИ и ДБ_ПАССВОРД.

Закључак

И то је омот! Надам се да сте научили како да управљате конфигурацијом и осетљивим информацијама користећи променљиве окружења у Питхон апликацијама. Покрили смо основе подешавања и приступа варијаблама окружења, као и њихову практичну употребу у конфигурисању апликација.

Иако су променљиве окружења свакако корисне у одвајању конфигурације од изворног кода, требало би да чувате осетљиве варијабле као тајне у случајевима употребе у производњи. За управљање тајнама, препоручујем да истражите алате као што су ХасхиЦорп Ваулт или АВС Сецретс Манагер.