Хранение учетных данных в качестве глобальных переменных среды
Если учетные данные хранятся в виде глобальных переменных среды, к ним можно получить доступ с помощью любого сценария, запущенного в любой среде на вашем компьютере.
Чтобы создать глобальную переменную среды, запустите в терминале эту команду:
export varName=varValue
Убедитесь, что знак равенства ‘=
’ не отделен пробелами. Появление ошибки “zsh: Bad Assignment
” часто связано с пробельным отступом до или после “=
”.
Давайте создадим пару глобальных переменных среды:
export globalSecretUser=global_rahul1999
export globalSecretKey = global_xy76hUihk
В Windows нужно использовать “set
” вместо “export
”.
Приведенный выше сценарий необходимо запустить в терминале. Теперь давайте попробуем получить доступ к переменным, которые мы создали ранее:
import os
print(os.environ)
# Выведет словарь со всеми глобальные переменными среды
Мы можем использовать способы доступа к словарю для чтения переменных среды, например, сделать это с помощью .get()
или [ ]
:
print(os.environ.get('globalSecretUser'))
print(os.environ.get('globalSecretKey'))
'''
global_rahul1999
global_xy76hUihk
'''
Чтобы обновить переменные среды, просто снова запустите оператор export
:
export globalSecretUser=Updated_rahul1999
Давайте попробуем снова получить доступ к переменной в Python:
import os
print(os.environ.get('globalSecretUser'))
'''
Updated_rahul1999
'''
Чтобы удалить переменную среды, используем ключевое слово unset
:
unset globalSecretUser
При попытке получить доступ к переменной в Python, у вас либо выйдет ошибка KeyError
, либо None
, в зависимости от метода, используемого для доступа к значениям в словаре.
Хранение учетных данных в качестве переменных в вашей виртуальной среде
Эти переменные среды будут доступны только сценариям, выполняемым в виртуальной среде, в которой создаются переменные. Будем считать их “локальными” переменными среды.
Прежде всего нам придется создать виртуальную среду.
На Mac:
python3 -m venv venv
На Windows:
python -m venv venv
Это создаст виртуальную среду в вашем текущем каталоге. В папке bin должен быть файл с именем activate. Если вы работаете в Windows, он должен находиться в папке Scripts. Этот сценарий запускается каждый раз, когда мы активируем виртуальную среду.
Мы будем добавлять переменные в этот сценарий. Поэтому каждый раз, когда мы активируем виртуальную среду, будут создаваться переменные. Откройте файл.
Прежде чем мы создадим переменные, нужно будет добавить определенный код, чтобы убедиться, что переменные не остаются после деактивации виртуальной среды.
Мы будем использовать ключевое слово unset
, перейдем к функции deactivate()
внутри выбранного сценария и сбросим переменные в начале функции:
deactivate () {
unset localSecretUser
unset localSecretKey
# код
}
Теперь мы будем использовать ключевое слово export
для определения переменных. Этот код должен выходить за рамки функции деактивации в конце выбранного сценария
deactivate(){
# код
}
# еще код
export localSecretUser=local_secret_rahul199
export localSecretKey=local_secret_xyudJIk12AA
В Windows вам, возможно, придется использовать set
вместо export
.
Теперь нам нужно будет активировать виртуальную среду. Если вы уже активировали виртуальную среду, можете использовать ключевое слово deactivate
для ее деактивации:
Теперь давайте активируем виртуальную среду.
На Mac:
source venv/bin/activate
На Windows:
venv/Scripts/activate
Вы можете перечислить переменные текущей среды, используя команду printenv
.
Теперь давайте попробуем получить доступ к переменным, которые мы только что создали. Это будет похоже на то, как мы получили доступ к глобальным переменным среды:
import os
print(os.environ.get('localSecretUser'))
print(os.environ.get('localSecretKey'))
'''
local_secret_rahul199
local_secret_xyudJIk12AA
'''
Теперь отключим виртуальную среду и попробуем снова запустить сценарий Python:
deactivate
python3 main.py
Должен быть возврат значения None
.
Хранение учетных данных в файле .env
Внутри вашей корневой папки, папки с вашей виртуальной средой, создайте файл с именем .env. Добавьте переменные внутри файла:
#в файле .env
secretUser = "secret_user_rahul1999"
secretKey = "secret_key_adfdsaUj12"
Нам нужно будет установить библиотеку Python для чтения переменных:
pip3 install python-dotenv
Давайте прочитаем переменные в Python:
from dotenv import load_dotenv
import os
load_dotenv()
print(os.environ.get('secretUser'))
print(os.environ.get('secretKey'))
'''
secret_user_rahul1999
secret_key_adfdsaUj12
'''
Не забудьте добавить файл .env в файл .gitignore. Это не позволит вашим учетным данным отправиться в репозиторий git.
# В .gitignore
.env
Самый удобный способ
На мой взгляд, самый удобный способ — хранить учетные данные в файле .env по следующим причинам:
- они являются локальными для вашего проекта;
- вам не нужно беспокоиться о том, чтобы “сбрасывать” их;
- если вы добавите их в файл .gitignore, он будет защищен от внешнего мира;
- если вы осуществляете сценарий как внесерверную функцию, вам нужно будет использовать
load_dotenve()
для чтения переменных среды, хранящихся в файле конфигурации вашей среды Azure/AWS.
Хотя у этого способа есть много плюсов, минус выявился бы в том случае, если бы у нас была переменная внутри файла .env с тем же именем, что и глобальная переменная среды. Доступ к переменной в Python вернет глобальное значение, так как мы не используем unset
для сброса значения переменной или export
для присвоения переменной нового значения.
Читайте также:
- Python и веб-разработка: краткое руководство
- Как отслеживать события файловой системы в Python
- Функциональное программирование на Python
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Rahul Banerjee: 3 Ways to Store and Read Credentials Locally in Python