Skip to main content

Wrapper to run programs with different env

Project description

===============================
runenv
===============================

.. image:: https://img.shields.io/travis/onjin/runenv.svg
:target: https://travis-ci.org/onjin/runenv

.. image:: https://img.shields.io/pypi/v/runenv.svg
:target: https://pypi.python.org/pypi/runenv

.. image:: https://img.shields.io/badge/license-New%20BSD-blue.svg
:target: https://github.com/onjin/runenv/blob/master/LICENSE

.. image:: https://img.shields.io/pypi/dm/runenv.svg
:target: https://pypi.python.org/pypi/runenv


Wrapper to run programs with modified environment variables loaded from given file. You can use *runenv* to manage your
app settings using 12-factor_ principles.

You can use same environment file with **runenv** and with **docker** using `env-file`_ parameter

.. _env-file: https://docs.docker.com/reference/commandline/cli/
.. _12-factor: http://12factor.net/


* Free software: BSD license
* Documentation: https://runenv.readthedocs.org.

--------
Features
--------

CLI:

* command-line tool to load environment variables from given file

Python API:

* load variables from a file (`.env` or passed filename)
* load only variables with given `prefix`
* `prefix` can be stripped during load
* detect whether environment was loaded by `runenv` CLI
* force load even if `runenv` CLI was used
* `search_parent` option which allows to look for `env_file` in parent dirs


------------
Installation
------------

In order to install use `pip`

.. code-block:: console

$ pip install -U runenv

-----
Usage
-----

Run from shell

.. code-block:: console

$ runenv env.development ./manage.py runserver

example `env.development` file

.. code-block:: python


BASE_URL=http://127.0.0.1:8000
DATABASE_URI=postgres://postgres:password@localhost/dbname
SECRET_KEY=y7W8pbRcuPuAmgTHsJtEpKocb7XPcV0u

# email settings
EMAIL_HOST=smtp.mandrillapp.com
EMAIL_PORT=587
EMAIL_HOST_USER=someuser
EMAIL_HOST_PASSWORD=hardpassword
EMAIL_FROM=dev@local.host
EMAIL_USE_TLS=1

----------
Python API
----------

**load_env(env_file='.env', prefix=None, strip_prefix=True, force=False, search_parent=0)**

Loads environment from given ``env_file``` (default `.env`).


Options:

+--------------+---------+--------------------------------------------------------------------------------+
| option | default | description |
+==============+=========+================================================================================+
| env_file | `.env` | relative or absolute path to file with environment variables |
+--------------+---------+--------------------------------------------------------------------------------+
| prefix | `None` | prefix to match variables e.g. `APP_` |
+--------------+---------+--------------------------------------------------------------------------------+
| strip_prefix | `True` | should the prefix be stripped during loa |
+--------------+---------+--------------------------------------------------------------------------------+
| force | `False` | load env_file, even though `runenv` CLI command was used |
+--------------+---------+--------------------------------------------------------------------------------+
| search_parent| `0` | To what level traverse parents in search of file |
+--------------+---------+--------------------------------------------------------------------------------+

If ``prefix`` option is provided only variables starting with it will be loaded to environment, with their keys stripped of that prefix. To preserve prefix, you can set ``strip_prefix`` to ``False``.


Example

.. code-block:: console

$ echo 'APP_SECRET_KEY=bzemAG0xfdMgFrHBT3tJBbiYIoY6EeAj' > .env

.. code-block:: python

$ python
>>> import os
>>> from runenv import load_env
>>> load_env(prefix='APP_')
>>> 'APP_SECRET_KEY' in os.environ
False
>>> 'SECRET_KEY' in os.environ
True
>>> load_env(prefix='APP_', strip_prefix=False)
>>> 'APP_SECRET_KEY' in os.environ
True


**Notice**: Environment will not be loaded if command was fired by `runenv` wrapper, unless you set the **force** parameter to **True**

``load_env`` does not load variables when wrapper ``runenv`` is used. Also ``_RUNENV_WRAPPED`` is set to ``1``

Example

.. code-block:: console

$ echo 'APP_SECRET_KEY=bzemAG0xfdMgFrHBT3tJBbiYIoY6EeAj' > .env

.. code-block:: python

$ python
>>> import os
>>> from runenv import load_env
>>> os.environ['_RUNENV_WRAPPED'] = '1'
>>> load_env()
>>> 'APP_SECRET_KEY' in os.environ
False
>>> load_env(force=True)
>>> 'APP_SECRET_KEY' in os.environ
True


Django/Flask integration
------------------

To use ``load_env`` with `Django`_ or `Flask`_, put the followin in ``manage.py`` and ``wsgi.py``

.. code-block:: python


from runenv import load_env
load_env()


.. _django: http://djangoproject.com/
.. _flask: http://flask.pocoo.org/




Similar projects
----------------

* https://github.com/jezdez/envdir - runs another program with a modified environment according to files in a specified directory
* https://github.com/theskumar/python-dotenv - Reads the key,value pair from .env and adds them to environment variable




History
-------

1.0.0 (2017-02-03)
------------------
* changed version to `1.0.0`

0.4.0 (2016-08-08)
------------------
* add support for `search_parent` option

0.3.1 (2016-06-21)
------------------
* add support for quoted values

0.3.0 (2016-02-14)
------------------
* change `Development Status` to `5 - Production/Stable`

0.2.5 (2015-11-30)
---------------------
* do not look for executable as absolute path

0.2.4 (2015-07-06)
---------------------
* skip `load_env` if env file does not exists

0.2.3 (2015-06-26)
---------------------
* support to run programs from PATH

0.2.2 (2015-06-16)
---------------------
* fix compatibility with python3

0.2.1 (2015-06-16)
---------------------
* add `strip_prefix` option to `load_env`

0.2.0 (2015-06-16)
---------------------
* add `load_env` (python api)

0.1.4 (2015-06-15)
---------------------

* Check if file to run exists and is executable

0.1.3 (2015-06-01)
---------------------

* Support for env file comments by '#'

0.1.2 (2015-06-01)
---------------------

* Return code from runned command

0.1.1 (2015-05-31)
---------------------

* First release on PyPI.

Project details


Download files

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

Source Distribution

runenv-1.0.0.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

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

runenv-1.0.0-py2.py3-none-any.whl (7.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file runenv-1.0.0.tar.gz.

File metadata

  • Download URL: runenv-1.0.0.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for runenv-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6233a80622bc22a6f2fceb570bb8dfec18768b7a06bbac67e3e4bfaf8c2899ba
MD5 eac90fec8d70bba36b0d16e4b6f49469
BLAKE2b-256 37786d565309d547702abb570da4d0c1f03fe16f4c04e4cdee770505cd80fb19

See more details on using hashes here.

File details

Details for the file runenv-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for runenv-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6b6be2fbaa022d221a6a79cf1ed0f0cbfc8b074e90e402050b7fd8b2b63eacb0
MD5 44cadc9ae5d74c4dd981f0a0ea405e65
BLAKE2b-256 8bd564ef219902b1f01c46fc8abd38bc7f283fd2fb0ae811c5d2b36616f72ab5

See more details on using hashes here.

Supported by

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