- Управление переменной средой окружения системы в Python.
- Содержание:
- os.environ :
- os.supports_bytes_environ :
- os.environb :
- os.getenv(key, default=None) :
- os.getenvb(key, default=None) :
- os.putenv(key, value) :
- os.unsetenv(key) :
- Python | объект os.environ
- python-environ 0.4.54
- Navigation
- Project links
- Statistics
- Maintainers
- Classifiers
- Project description
- Django-environ
- Feature Support
- Installation
- Documentation
- Supported types
- Using unsafe characters in URLs
- Smart Casting
- Multiple redis cache locations
- Email settings
- SQLite urls
- Nested lists
- Multiline value
- Proxy value
- Multiple env files
- Tests
- How to Contribute
- License
Управление переменной средой окружения системы в Python.
Переменные среды обычно используются для значений конфигурации, таких как пути поиска, расположение файлов и т. д.
Содержание:
- Переменная os.environ ,
- Функция os.supports_bytes_environ ,
- Переменная os.environb ,
- Функция os.getenv() ,
- Функция os.getenvb() ,
- Функция os.putenv() ,
- Функция os.unsetenv() ,
- Функция os.get_exec_path() .
os.environ :
Переменная os.environ это объект сопоставления, подобный словарю, который представляет переменные среды окружения системы. Например, os.environ[‘HOME’] это путь к домашнему каталогу на некоторых платформах и эквивалентен getenv(«HOME») в языке C .
Переменная os.environ фиксируется при первом импорте модуля os , во время запуска Python. Изменения в среде OS, сделанные после этого времени, не отражаются os.environ , за исключением изменений, внесенных путем непосредственного изменения os.environ .
Если платформа поддерживает функцию os.putenv() , то сопоставление os.environ может использовать ее для изменения среды. Функция os.putenv() будет вызываться автоматически при изменении os.environ .
Если платформа не поддерживает функцию os.putenv() , то измененная копия сопоставления os.environ может быть передана соответствующим функциям создания процессов, чтобы заставить дочерние процессы использовать измененную среду.
В Unix ключи и значения используют sys.getfilesystemencoding() и обработчик ошибок ‘surrogateescape’ . Если вы хотите использовать другую кодировку, то используйте os.environb .
Заметка:
- Вызов os.putenv() , напрямую не изменят os.environ , поэтому лучше менять значения ключей os.environ .
- На некоторых платформах, включая FreeBSD и Mac OS X, настройка os.environ может вызвать утечки памяти.
Если платформа поддерживает функцию os.unsetenv() , то с ее помощью можно удалить элементы в этом отображении os.environ для сброса указанной переменной среды. Функция os.unsetenv() будет вызываться автоматически при удалении элемента из os.environ и при вызове одного из методов .pop() или .clear().
os.supports_bytes_environ :
os.supports_bytes_environ производит проверку доступности функций модуля os.environb и os.getenvb() . Эти функции доступны только в том случае, если os.support_bytes_environ равно True . os.support_bytes_environ истинно, если родной тип среды ОС — байты, например False в Windows.
os.environb :
Байт-версия переменных сред окружения: представляет собой объект отображения, подобный словарю который представляет переменные среды окружения в виде байтовых строк. Environment и environmentb синхронизируются, изменяются обновления среды, и наоборот.
Окружение доступно только в том случае, если os.support_bytes_environ равно True .
os.getenv(key, default=None) :
Функция os.getenv() возвращает значение ключа key переменной среды, если оно существует или значение по умолчанию default , если его нет. Значения key , default и возвращаемый результат — строки str .
В Unix ключи и значения декодируются с помощью sys.getfilesystemencoding() и обработчик ошибок ‘surrogateescape’ . Используйте функцию os.getenvb() , если хотите использовать другую кодировку.
Доступность: большинство систем Unix, Windows.
os.getenvb(key, default=None) :
Функция os.getenvb() возвращает значение ключа key переменной среды, если оно существует или значение по умолчанию default , если его нет. Значения key , default и возвращаемый результат — байтовые строки bytes .
Функция os.getenvb() доступна только в том случае, если os.support_bytes_environ равно True.
Доступность: большинство Unix.
os.putenv(key, value) :
Функция os.putenv() устанавливает переменную среды с именем key в строковое значение value . Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen() или os.fork() и os.execv() .
Примечание. На некоторых платформах, включая FreeBSD и Mac OS X , настройка среды может привести к утечке памяти.
Важно. Если функция os.putenv() поддерживается системой, то изменения для элементов в os.environ автоматически переводятся в соответствующие вызовы os.putenv() , однако самостоятельные вызовы os.putenv() не обновляют значения в словаре os.environ , поэтому предпочтительнее присваивать значения переменных сред элементам os.environ .
Функция os.putenv() вызывает событие аудита os.putenv с аргументами key , value .
Изменено в Python 3.9: Функция теперь всегда доступна.
os.unsetenv(key) :
Функция os.unsetenv() вызывает сброс (удаление) переменной среды окружения с именем key . Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen() или os.fork() и os.execv() .
Важно. Если функция os.unsetenv() поддерживается системой, удаление элементов в os.environ автоматически переводится в соответствующий вызов os.unsetenv() , однако самостоятельные вызовы os.unsetenv() не обновляют словарь os.environ , поэтому удалять элементы в самом словаре os.environ .
Функция os.unsetenv() вызывает событие аудита os.unsetenv с аргументом key .
Изменено в Python 3.9: теперь эта функция доступна всегда, а также доступна в Windows.
Python | объект os.environ
Модуль ОС в Python предоставляет функции для взаимодействия с операционной системой. ОС поставляется под стандартные служебные модули Python. Этот модуль предоставляет портативный способ использования функциональных возможностей, зависящих от операционной системы.
os.environ в Python — это объект отображения, который представляет переменные среды пользователя. Он возвращает словарь, имеющий переменную окружения пользователя в качестве ключа и их значения в качестве значения.
os.environ ведет себя как словарь python, поэтому можно выполнять все обычные словарные операции, такие как get и set. Мы также можем изменить os.environ но любые изменения будут эффективны только для текущего процесса, в котором он был назначен, и не будут изменять значение навсегда.
Parameter: It is a non-callable object. Hence, no parameter is required
Return Type: This returns a dictionary representing the user’s environmental variables
Код № 1: Использование os.environ для получения доступа к переменным среды
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Получить список пользователей
# переменные окружения
# Распечатать список пользователей
# переменные окружения
print ( «User’s Environment variable:» )
pprint.pprint( dict (env_var), width = 1 )
Выход:
Код № 2: Доступ к определенной переменной среды
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Получить значение
# ‘HOME’ переменная окружения
home = os.environ[ ‘HOME’ ]
# Распечатать значение
# ‘HOME’ переменная окружения
print ( «HOME:» , home)
# Получить значение
# ‘JAVA_HOME’ переменная окружения
# используя операцию get из словаря
java_home = os.environ.get( ‘JAVA_HOME’ )
# Распечатать значение
# ‘JAVA_HOME’ переменная окружения
print ( «JAVA_HOME:» , java_home)
Выход:
Код № 3: Изменение переменной среды
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Распечатать значение
# ‘JAVA_HOME’ переменная окружения
print ( «JAVA_HOME:» , os.environ[ ‘JAVA_HOME’ )
# Изменить значение
# ‘JAVA_HOME’ переменная окружения
os.environ[ ‘JAVA_HOME’ ] = ‘/home / ihritik / jdk-10.0.1’
# Распечатать измененное значение
# ‘JAVA_HOME’ переменная окружения
print ( «Modified JAVA_HOME:» , os.environ[ ‘JAVA_HOME’ ])
Выход:
Код № 4: Добавление новой переменной среды
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Добавить новую переменную среды
os.environ[ ‘GeeksForGeeks’ ] = ‘www.geeksforgeeks.org’
# Получить значение
# Добавлена переменная окружения
print ( «GeeksForGeeks:» , os.environ[ ‘GeeksForGeeks’ ])
Выход:
Код № 5: Доступ к переменной среды, которая не существует
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Распечатать значение
# ‘MY_HOME’ переменная окружения
print ( «MY_HOME:» , os.environ[ ‘MY_HOME’ ]
# Если ключ не существует
# выдаст ошибку
Выход:
Код № 6: Обработка ошибки при доступе к переменной среды, которая не существует
# Python программа для объяснения объекта os.environ
# импорт модуля os
# Способ 1
# Распечатать значение
# ‘MY_HOME’ переменная окружения
print ( «MY_HOME:» , os.environ.get( ‘MY_HOME’ , «Environment variable does not exist» ))
print ( «MY_HOME:» , os.environ[ ‘MY_HOME’ ])
print ( «Environment variable does not exist» )
python-environ 0.4.54
pip install python-environ Copy PIP instructions
Released: Apr 13, 2020
Django-environ allows you to utilize 12factor inspired environment variables to configure your Django application.
Navigation
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: MIT License (MIT)
Author: joke2k
Tags django, environment, variables, 12factor
Maintainers
Classifiers
- Development Status
- 3 — Alpha
- Framework
- Django
- Django :: 1.10
- Django :: 1.11
- Django :: 1.8
- Django :: 1.9
- Django :: 2.0
- Django :: 2.1
- Intended Audience
- Information Technology
- License
- OSI Approved :: MIT License
- Programming Language
- Python
- Python :: 2
- Python :: 2.7
- Python :: 3
- Python :: 3.4
- Python :: 3.5
- Python :: 3.6
- Python :: Implementation :: CPython
- Python :: Implementation :: PyPy
- Topic
- Software Development :: Libraries :: Python Modules
- Utilities
Project description
Django-environ
django-environ allows you to use Twelve-factor methodology to configure your Django application with environment variables.
The idea of this package is to unify a lot of packages that make the same stuff: Take a string from os.environ, parse and cast it to some of useful python typed variables. To do that and to use the 12factor approach, some connection strings are expressed as url, so this package can parse it and return a urllib.parse.ParseResult. These strings from os.environ are loaded from a .env file and filled in os.environ with setdefault method, to avoid to overwrite the real environ. A similar approach is used in Two Scoops of Django book and explained in 12factor-django article.
Using django-environ you can stop to make a lot of unversioned settings_*.py to configure your app. See cookiecutter-django for a concrete example on using with a django project.
Feature Support
- Fast and easy multi environment for deploy
- Fill os.environ with .env file variables
- Variables casting (see supported_types below)
- Url variables exploded to django specific package settings
Django-environ officially supports Django 1.8
Installation
NOTE: No need to add it to INSTALLED_APPS.
Then create a .env file:
And use it with settings.py above. Don’t forget to add .env in your .gitignore (tip: add .env.example with a template of your variables).
Documentation
Documentation is available at RTFD.
Supported types
- str
- bool
- int
- float
- json
- list (FOO=a,b,c)
- tuple (FOO=(a,b,c))
- dict (BAR=key=val,foo=bar) #environ.Env(BAR=(dict, <>))
- dict (BAR=key=val;foo=1.1;baz=True) #environ.Env(BAR=(dict(value=unicode, cast=dict(foo=float,baz=bool)), <>))
- url
- path (environ.Path)
- db_url
- PostgreSQL: postgres://, pgsql://, psql:// or postgresql://
- PostGIS: postgis://
- MySQL: mysql:// or mysql2://
- MySQL for GeoDjango: mysqlgis://
- Mysql Connector Python from Oracle: mysql-connector://
- SQLITE: sqlite://
- SQLITE with SPATIALITE for GeoDjango: spatialite://
- Oracle: oracle://
- MSSQL: mssql://
- PyODBC: pyodbc://
- Redshift: redshift://
- LDAP: ldap://
- cache_url
- Database: dbcache://
- Dummy: dummycache://
- File: filecache://
- Memory: locmemcache://
- Memcached: memcache://
- Python memory: pymemcache://
- Redis: rediscache://, redis://, or rediss://
- search_url
- ElasticSearch: elasticsearch://
- Solr: solr://
- Whoosh: whoosh://
- Xapian: xapian://
- Simple cache: simple://
- email_url
- SMTP: smtp://
- SMTP+SSL: smtp+ssl://
- SMTP+TLS: smtp+tls://
- Console mail: consolemail://
- File mail: filemail://
- LocMem mail: memorymail://
- Dummy mail: dummymail://
Using unsafe characters in URLs
In order to use unsafe characters you have to encode with urllib.parse.encode before you set into .env file.
Smart Casting
django-environ has a “Smart-casting” enabled by default, if you don’t provide a cast type, it will be detected from default type. This could raise side effects (see #192). To disable it use env.smart_caset = False. New major release will disable it as default.
Multiple redis cache locations
For redis cache, multiple master/slave or shard locations can be configured as follows:
Email settings
In order to set email configuration for django you can use this code:
SQLite urls
SQLite connects to file based databases. The same URL format is used, omitting the hostname, and using the “file” portion as the filename of the database. This has the effect of four slashes being present for an absolute
file path: sqlite:////full/path/to/your/database/file.sqlite .
Nested lists
Some settings such as Django’s ADMINS make use of nested lists. You can use something like this to handle similar cases.
Multiline value
You can set a multiline variable value:
Proxy value
You can set a value prefixed by $ to use as a proxy to another variable value:
Multiple env files
It is possible to have multiple env files and select one using environment variables.
Now ENV_PATH=other-env ./manage.py runserver uses other-env while ./manage.py runserver uses .env.
Tests
How to Contribute
- Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a Contributor Friendly tag for issues that should be ideal for people who are not very familiar with the codebase yet.
- Fork the repository on GitHub to start making your changes to the develop branch (or branch off of it).
- Write a test which shows that the bug was fixed or that the feature works as expected.
- Send a pull request and bug the maintainer until it gets merged and published. 🙂 Make sure to add yourself to Authors file.
License
This project is licensed under the MIT License — see the License file file for details