VOOZH about

URL: https://pypi.org/project/python-dotenv/0.8.2/

⇱ python-dotenv Β· PyPI


Skip to main content

python-dotenv 0.8.2

pip install python-dotenv==0.8.2

Newer version available (1.2.2)

Released:

Add .env support to your django/flask apps in development and deployments

Navigation

Project description

 _______ .__ __. ____ ____
 | ____|| \ | | \ \ / /
 | |__ | \| | \ \/ /
 | __| | . ` | \ /
 __ | |____ | |\ | \ /
(__)|_______||__| \__| \__/

python-dotenv | πŸ‘ Build Status
πŸ‘ Coverage Status
πŸ‘ PyPI version
πŸ‘ PyPI

Reads the key,value pair from .env file and adds them to environment variable. It is great for managing app settings during development and in production using 12-factor principles.

Do one thing, do it well!

Usages

The easiest and most common usage consists on calling load_dotenv when the application starts, which will load environment variables from a file named .env in the current directory or any of its parents or from the path specificied; after that, you can just call the environment-related method you need as provided by os.getenv.

.env looks like this:

# a comment and that will be ignored.
REDIS_ADDRESS=localhost:6379MEANING_OF_LIFE=42MULTILINE_VAR="hello\nworld"

You can optionally prefix each line with the word export, which will conveniently allow you to source the whole file on your shell.

.env can interpolate variables using POSIX variable expansion, variables are replaced from the environment first or from other values in the .env file if the variable is not present in the environment. (Note: Default Value Expansion is not supported as of yet, see #30.)

CONFIG_PATH=${HOME}/.config/fooDOMAIN=example.orgEMAIL=admin@${DOMAIN}

Getting started

Assuming you have created the .env file along-side your settings module.

.
β”œβ”€β”€ .env
└── settings.py

Add the following code to your settings.py

# settings.pyfromdotenvimport load_dotenvload_dotenv()# OR, the same with increased verbosity:load_dotenv(verbose=True)# OR, explicitly providing path to '.env'frompathlibimport Path # python3 onlyenv_path = Path('.') / '.env'load_dotenv(dotenv_path=env_path)

At this point, parsed key/value from the .env file is now present as system environment variable and they can be conveniently accessed via os.getenv()

# settings.pyimportosSECRET_KEY = os.getenv("EMAIL")DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")

load_dotenv do not override existing System environment variables. To override, pass override=True to load_dotenv().

You can use find_dotenv() method that will try to find a .env file by (a) guessing where to start using __file__ or the working directory – allowing this to work in non-file contexts such as IPython notebooks and the REPL, and then (b) walking up the directory tree looking for the specified file – called .env by default.

fromdotenvimport load_dotenv, find_dotenvload_dotenv(find_dotenv())

In-memory filelikes

It is possible to not rely on the filesystem to parse filelikes from other sources (e.g. from a network storage). load_dotenv and dotenv_values accepts a filelike stream. Just be sure to rewind it before passing.

>>> fromioimport StringIO # Python2: from StringIO import StringIO>>> fromdotenvimport dotenv_values>>> filelike = StringIO('SPAM=EGSS\n')>>> filelike.seek(0)>>> parsed = dotenv_values(stream=filelike)>>> parsed['SPAM']'EGSS'

The returned value is dictionary with key value pair.

dotenv_values could be useful if you need to consume the envfile but not apply it directly into the system environment.

Django

If you are using django you should add the above loader script at the top of wsgi.py and manage.py.

Installation

pip install -U python-dotenv

iPython Support

You can use dotenv with iPython. You can either let the dotenv search for .env with %dotenv or provide the path to .env file explicitly, see below for usages.

%load_ext dotenv

# Use find_dotenv to locate the file
%dotenv

# Specify a particular file
%dotenv relative/or/absolute/path/to/.env

# Use '-o' to indicate override of existing variables
%dotenv -o

# Use '-v' to turn verbose mode on
%dotenv -v

Command-line interface

For commandline support, use the cli option during installation:

pip install -U "python-dotenv[cli]"

A cli interface dotenv is also included, which helps you manipulate the .env file without manually opening it. The same cli installed on remote machine combined with fabric (discussed later) will enable you to update your settings on remote server, handy isn’t it!

Usage: dotenv [OPTIONS] COMMAND [ARGS]...

 This script is used to set, get or unset values from a .env file.

Options:
 -f, --file PATH Location of the .env file, defaults to .env
 file in current working directory.
 -q, --quote [always|never|auto]
 Whether to quote or not the variable values.
 Default mode is always. This does not affect
 parsing.
 --help Show this message and exit.

Commands:
 get Retrive the value for the given key.
 list Display all the stored key/value.
 set Store the given key/value.
 unset Removes the given key.

Setting config on remote servers

We make use of excellent Fabric to acomplish this. Add a config task to your local fabfile, dotenv_path is the location of the absolute path of .env file on the remote server.

# fabfile.pyimportdotenvfromfabric.apiimport task, run, env# absolute path to the location of .env on remote server.env.dotenv_path = '/opt/myapp/.env'@taskdefconfig(action=None, key=None, value=None):'''Manage project configuration via .env

 e.g: fab config:set,<key>,<value>
 fab config:get,<key>
 fab config:unset,<key>
 fab config:list
 ''' run('touch %(dotenv_path)s' % env) command = dotenv.get_cli_string(env.dotenv_path, action, key, value) run(command)

Usage is designed to mirror the heroku config api very closely.

Get all your remote config info with fab config

$ fab config
foo="bar"

Set remote config variables with fab config:set,<key>,<value>

$ fab config:set,hello,world

Get a single remote config variables with fab config:get,<key>

$ fab config:get,hello

Delete a remote config variables with fab config:unset,<key>

$ fab config:unset,hello

Thanks entirely to fabric and not one bit to this project, you can chain commands like so fab config:set,<key1>,<value1> config:set,<key2>,<value2>

$ fab config:set,hello,world config:set,foo,bar config:set,fizz=buzz

Related Projects

Contributing

All the contributions are welcome! Please open an issue or send us a pull request.

This project is currently maintained by Saurabh Kumar_ and would not have been possible without the support of these awesome people.

Executing the tests:

$ flake8
$ pytest

Changelog

0.8.1

  • Add tests for docs ([@Flimm])

  • Make β€˜cli’ support optional. Use pip install python-dotnev[cli]. ([@theskumar])

0.8.0

  • set_key and unset_key only modified the affected file instead of parsing and re-writing file, this causes comments and other file entact as it is.

  • Add support for export prefix in the line.

  • Internal refractoring ([@theskumar])

  • Allow load_dotenv and dotenv_values to work with StringIO()) ([@alanjds])([@theskumar])(#78)

0.7.1

  • Remove hard dependency on iPython ([@theskumar])

0.7.0

0.6.5

0.6.4

  • Fix issue with single quotes ([@Flimm]) (#52)

0.6.3

  • Handle unicode exception in setup.py (#46)

0.6.2

0.6.0

0.5.1

  • Fix find_dotenv - it now start search from the file where this function is called from.

0.5.0

0.4.0

  • cli: Added -q/--quote option to control the behaviour of quotes around values in .env. (Thanks [@hugochinchilla](https://github.com/hugochinchilla)).

  • Improved test coverage.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-dotenv-0.8.2.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

Filter files by name, interpreter, ABI, and platform.

If you're not sure about the file name format, learn more about wheel file names.

Copy a direct link to the current filters

python_dotenv-0.8.2-py2.py3-none-any.whl (16.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file python-dotenv-0.8.2.tar.gz.

File metadata

  • Download URL: python-dotenv-0.8.2.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for python-dotenv-0.8.2.tar.gz
Algorithm Hash digest
SHA256 509736185257111613009974e666568a1b031b028b61b500ef1ab4ee780089d5
MD5 5a241a0750e0c76667d6ed5d9cdbeb64
BLAKE2b-256 236c1b6558c7d666736ad52a12ec707e18e2d409baa61a6425ed9b154c829485

See more details on using hashes here.

File details

Details for the file python_dotenv-0.8.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for python_dotenv-0.8.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4965ed170bf51c347a89820e8050655e9c25db3837db6602e906b6d850fad85c
MD5 098bbd464aa660935989376054bc6f16
BLAKE2b-256 859fb76a51bb851fa25f7a162a16297f4473c67ec42dd55e4f7fc5b43913a606

See more details on using hashes here.

Supported by

πŸ‘ Image
AWS Cloud computing and Security Sponsor πŸ‘ Image
Datadog Monitoring πŸ‘ Image
Depot Continuous Integration πŸ‘ Image
Fastly CDN πŸ‘ Image
Google Download Analytics πŸ‘ Image
Pingdom Monitoring πŸ‘ Image
Sentry Error logging πŸ‘ Image
StatusPage Status page