Metadata-Version: 2.1
Name: python-dotenv
Version: 0.14.0
Summary: Add .env support to your django/flask apps in development and deployments
Home-page: https://github.com/theskumar/python-dotenv
Author: Saurabh Kumar
Author-email: me+github@saurabh-kumar.com
License: UNKNOWN
Description: ```
                _______ .__   __. ____    ____
               |   ____||  \ |  | \   \  /   /
               |  |__   |   \|  |  \   \/   /
               |   __|  |  . `  |   \      /
            __ |  |____ |  |\   |    \    /
           (__)|_______||__| \__|     \__/
        ```
        python-dotenv | [![Build Status](https://travis-ci.org/theskumar/python-dotenv.svg?branch=master)](https://travis-ci.org/theskumar/python-dotenv) [![Coverage Status](https://coveralls.io/repos/theskumar/python-dotenv/badge.svg?branch=master)](https://coveralls.io/r/theskumar/python-dotenv?branch=master) [![PyPI version](https://badge.fury.io/py/python-dotenv.svg)](http://badge.fury.io/py/python-dotenv) [![Say Thanks!](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/theskumar)
        ===============================================================================
        
        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](http://12factor.net/) 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:
        
        ```shell
        # a comment that will be ignored.
        REDIS_ADDRESS=localhost:6379
        MEANING_OF_LIFE=42
        MULTILINE_VAR="hello\nworld"
        ```
        
        You can optionally prefix each line with the word `export`, which is totally ignored by this library, but might allow you to [`source`](https://bash.cyberciti.biz/guide/Source_command) the file in bash.
        
        ```
        export S3_BUCKET=YOURS3BUCKET
        export SECRET_KEY=YOURSECRETKEYGOESHERE
        ```
        
        Python-dotenv can interpolate variables using POSIX variable expansion.
        
        The value of a variable is the first of the values defined in the following list:
        
        - Value of that variable in the environment.
        - Value of that variable in the `.env` file.
        - Default value, if provided.
        - Empty string.
        
        Ensure that variables are surrounded with `{}` like `${HOME}` as bare 
        variables such as `$HOME` are not expanded.
        
        ```shell
        CONFIG_PATH=${HOME}/.config/foo
        DOMAIN=example.org
        EMAIL=admin@${DOMAIN}
        DEBUG=${DEBUG:-false}
        ```
        
        ## Getting started
        
        Install the latest version with:
        
        ```shell
        pip install -U python-dotenv
        ```
        
        Assuming you have created the `.env` file along-side your settings
        module.
        
            .
            ├── .env
            └── settings.py
        
        Add the following code to your `settings.py`:
        
        ```python
        # settings.py
        from dotenv import load_dotenv
        load_dotenv()
        
        # OR, the same with increased verbosity
        load_dotenv(verbose=True)
        
        # OR, explicitly providing path to '.env'
        from pathlib import Path  # Python 3.6+ only
        env_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()`:
        
        ```python
        # settings.py
        import os
        SECRET_KEY = os.getenv("EMAIL")
        DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")
        ```
        
        `load_dotenv` does not override existing System environment variables. To
        override, pass `override=True` to `load_dotenv()`.
        
        `load_dotenv` also accepts `encoding` parameter to open the `.env` file. The default encoding is platform dependent (whatever `locale.getpreferredencoding()` returns), but any encoding supported by Python can be used. See the [codecs](https://docs.python.org/3/library/codecs.html#standard-encodings) module for the list of supported encodings.
        
        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.
        
        ```python
        from dotenv import load_dotenv, find_dotenv
        load_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.
        
        ```python
        >>> from io import StringIO     # Python2: from StringIO import StringIO
        >>> from dotenv import dotenv_values
        >>> filelike = StringIO('SPAM=EGGS\n')
        >>> filelike.seek(0)
        >>> parsed = dotenv_values(stream=filelike)
        >>> parsed['SPAM']
        'EGGS'
        ```
        
        The returned value is dictionary with key-value pairs.
        
        `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`.
        
        
        ## IPython Support
        
        You can use dotenv with IPython. You can either let the dotenv search
        for `.env` with `%dotenv` or provide the path to the `.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 command-line support, use the CLI option during installation:
        
        ```shell
        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 a 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.
          run    Run command with environment variables from .env file present
          set    Store the given key/value.
          unset  Removes the given key.
        ```
        
        
        ### Setting config on Remote Servers
        
        We make use of excellent [Fabric](http://www.fabfile.org/) to accomplish
        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.
        
        ```python
        # fabfile.py
        
        import dotenv
        from fabric.api import task, run, env
        
        # absolute path to the location of .env on remote server.
        env.dotenv_path = '/opt/myapp/.env'
        
        @task
        def config(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
        
        -   [Honcho](https://github.com/nickstenning/honcho) - For managing
            Procfile-based applications.
        -   [django-dotenv](https://github.com/jpadilla/django-dotenv)
        -   [django-environ](https://github.com/joke2k/django-environ)
        -   [django-configuration](https://github.com/jezdez/django-configurations)
        -   [dump-env](https://github.com/sobolevn/dump-env)
        -   [environs](https://github.com/sloria/environs)
        -   [dynaconf](https://github.com/rochacbruno/dynaconf)
        
        
        ## Acknowledgements
        
        This project is currently maintained by [Saurabh Kumar](https://saurabh-kumar.com) and [Bertrand Bonnefoy-Claudet](https://github.com/bbc2) and would not
        have been possible without the support of these [awesome
        people](https://github.com/theskumar/python-dotenv/graphs/contributors).
        
        # Changelog
        
        All notable changes to this project will be documented in this file.
        
        The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
        project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
        
        ## [Unreleased]
        
        *No unreleased change at this time.*
        
        ## [0.14.0] - 2020-07-03
        
        ### Changed
        
        - Privilege definition in file over the environment in variable expansion (#256 by
          [@elbehery95]).
        
        ### Fixed
        
        - Improve error message for when file isn't found (#245 by [@snobu]).
        - Use HTTPS URL in package meta data (#251 by [@ekohl]).
        
        ## [0.13.0] - 2020-04-16
        
        ### Added
        
        - Add support for a Bash-like default value in variable expansion (#248 by [@bbc2]).
        
        ## [0.12.0] - 2020-02-28
        
        ### Changed
        
        - Use current working directory to find `.env` when bundled by PyInstaller (#213 by
          [@gergelyk]).
        
        ### Fixed
        
        - Fix escaping of quoted values written by `set_key` (#236 by [@bbc2]).
        - Fix `dotenv run` crashing on environment variables without values (#237 by [@yannham]).
        - Remove warning when last line is empty (#238 by [@bbc2]).
        
        ## [0.11.0] - 2020-02-07
        
        ### Added
        
        - Add `interpolate` argument to `load_dotenv` and `dotenv_values` to disable interpolation
          (#232 by [@ulyssessouza]).
        
        ### Changed
        
        - Use logging instead of warnings (#231 by [@bbc2]).
        
        ### Fixed
        
        - Fix installation in non-UTF-8 environments (#225 by [@altendky]).
        - Fix PyPI classifiers (#228 by [@bbc2]).
        
        ## [0.10.5] - 2020-01-19
        
        ### Fixed
        
        - Fix handling of malformed lines and lines without a value (#222 by [@bbc2]):
          - Don't print warning when key has no value.
          - Reject more malformed lines (e.g. "A: B", "a='b',c").
        - Fix handling of lines with just a comment (#224 by [@bbc2]).
        
        ## [0.10.4] - 2020-01-17
        
        ### Added
        
        - Make typing optional (#179 by [@techalchemy]).
        - Print a warning on malformed line (#211 by [@bbc2]).
        - Support keys without a value (#220 by [@ulyssessouza]).
        
        ## 0.10.3
        
        - Improve interactive mode detection ([@andrewsmith])([#183]).
        - Refactor parser to fix parsing inconsistencies ([@bbc2])([#170]).
          - Interpret escapes as control characters only in double-quoted strings.
          - Interpret `#` as start of comment only if preceded by whitespace.
        
        ## 0.10.2
        
        - Add type hints and expose them to users ([@qnighy])([#172])
        - `load_dotenv` and `dotenv_values` now accept an `encoding` parameter, defaults to `None`
          ([@theskumar])([@earlbread])([#161])
        - Fix `str`/`unicode` inconsistency in Python 2: values are always `str` now. ([@bbc2])([#121])
        - Fix Unicode error in Python 2, introduced in 0.10.0. ([@bbc2])([#176])
        
        ## 0.10.1
        - Fix parsing of variable without a value ([@asyncee])([@bbc2])([#158])
        
        ## 0.10.0
        
        - Add support for UTF-8 in unquoted values ([@bbc2])([#148])
        - Add support for trailing comments ([@bbc2])([#148])
        - Add backslashes support in values ([@bbc2])([#148])
        - Add support for newlines in values ([@bbc2])([#148])
        - Force environment variables to str with Python2 on Windows ([@greyli])
        - Drop Python 3.3 support ([@greyli])
        - Fix stderr/-out/-in redirection ([@venthur])
        
        
        ## 0.9.0
        
        - Add `--version` parameter to cli ([@venthur])
        - Enable loading from current directory ([@cjauvin])
        - Add 'dotenv run' command for calling arbitrary shell script with .env ([@venthur])
        
        ## 0.8.1
        
        -   Add tests for docs ([@Flimm])
        -   Make 'cli' support optional. Use `pip install python-dotenv[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
        
        -   Add support to override system environment variable via .env.
            ([@milonimrod](https://github.com/milonimrod))
            ([\#63](https://github.com/theskumar/python-dotenv/issues/63))
        -   Disable ".env not found" warning by default
            ([@maxkoryukov](https://github.com/maxkoryukov))
            ([\#57](https://github.com/theskumar/python-dotenv/issues/57))
        
        ## 0.6.5
        
        -   Add support for special characters `\`.
            ([@pjona](https://github.com/pjona))
            ([\#60](https://github.com/theskumar/python-dotenv/issues/60))
        
        ## 0.6.4
        
        -   Fix issue with single quotes ([@Flimm])
            ([\#52](https://github.com/theskumar/python-dotenv/issues/52))
        
        ## 0.6.3
        
        -   Handle unicode exception in setup.py
            ([\#46](https://github.com/theskumar/python-dotenv/issues/46))
        
        ## 0.6.2
        
        -   Fix dotenv list command ([@ticosax](https://github.com/ticosax))
        -   Add iPython Suport
            ([@tillahoffmann](https://github.com/tillahoffmann))
        
        ## 0.6.0
        
        -   Drop support for Python 2.6
        -   Handle escaped charaters and newlines in quoted values. (Thanks
            [@iameugenejo](https://github.com/iameugenejo))
        -   Remove any spaces around unquoted key/value. (Thanks
            [@paulochf](https://github.com/paulochf))
        -   Added POSIX variable expansion. (Thanks
            [@hugochinchilla](https://github.com/hugochinchilla))
        
        ## 0.5.1
        
        -   Fix find\_dotenv - it now start search from the file where this
            function is called from.
        
        ## 0.5.0
        
        -   Add `find_dotenv` method that will try to find a `.env` file.
            (Thanks [@isms](https://github.com/isms))
        
        ## 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.
        
        [#78]: https://github.com/theskumar/python-dotenv/issues/78
        [#121]: https://github.com/theskumar/python-dotenv/issues/121
        [#148]: https://github.com/theskumar/python-dotenv/issues/148
        [#158]: https://github.com/theskumar/python-dotenv/issues/158
        [#170]: https://github.com/theskumar/python-dotenv/issues/170
        [#172]: https://github.com/theskumar/python-dotenv/issues/172
        [#176]: https://github.com/theskumar/python-dotenv/issues/176
        [#183]: https://github.com/theskumar/python-dotenv/issues/183
        
        [@Flimm]: https://github.com/Flimm
        [@alanjds]: https://github.com/alanjds
        [@altendky]: https://github.com/altendky
        [@andrewsmith]: https://github.com/andrewsmith
        [@asyncee]: https://github.com/asyncee
        [@bbc2]: https://github.com/bbc2
        [@cjauvin]: https://github.com/cjauvin
        [@earlbread]: https://github.com/earlbread
        [@ekohl]: https://github.com/ekohl
        [@elbehery95]: https://github.com/elbehery95
        [@gergelyk]: https://github.com/gergelyk
        [@greyli]: https://github.com/greyli
        [@qnighy]: https://github.com/qnighy
        [@snobu]: https://github.com/snobu
        [@techalchemy]: https://github.com/techalchemy
        [@theskumar]: https://github.com/theskumar
        [@ulyssessouza]: https://github.com/ulyssessouza
        [@venthur]: https://github.com/venthur
        [@yannham]: https://github.com/yannham
        
        [Unreleased]: https://github.com/theskumar/python-dotenv/compare/v0.14.0...HEAD
        [0.14.0]: https://github.com/theskumar/python-dotenv/compare/v0.13.0...v0.14.0
        [0.13.0]: https://github.com/theskumar/python-dotenv/compare/v0.12.0...v0.13.0
        [0.12.0]: https://github.com/theskumar/python-dotenv/compare/v0.11.0...v0.12.0
        [0.11.0]: https://github.com/theskumar/python-dotenv/compare/v0.10.5...v0.11.0
        [0.10.5]: https://github.com/theskumar/python-dotenv/compare/v0.10.4...v0.10.5
        [0.10.4]: https://github.com/theskumar/python-dotenv/compare/v0.10.3...v0.10.4
        
Keywords: environment variables,deployments,settings,env,dotenv,configurations,python
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: Utilities
Classifier: Environment :: Web Environment
Description-Content-Type: text/markdown
Provides-Extra: cli
