3 способа локального хранения и чтения учетных данных в Python

Хранение учетных данных в качестве глобальных переменных среды

Если учетные данные хранятся в виде глобальных переменных среды, к ним можно получить доступ с помощью любого сценария, запущенного в любой среде на вашем компьютере.

Чтобы создать глобальную переменную среды, запустите в терминале эту команду:

export varName=varValue
JavaMentor
JavaMentor

Убедитесь, что знак равенства ‘=’ не отделен пробелами. Появление ошибки “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 для присвоения переменной нового значения.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Rahul Banerjee: 3 Ways to Store and Read Credentials Locally in Python

Предыдущая статья6 актуальных советов по созданию чистого кода React
Следующая статьяКак получить все неуникальные значения в массиве JavaScript?