Skip to main content

heroku.env

https://img.shields.io/pypi/v/heroku_env.svg Downloads

CLI tool to manipulate environment variables on Heroku with local .env files, through the Heroku API.

Mentioned in the popular PyCoder’s Weekly: https://pycoders.com/issues/357

This library was a quick personal project because we used to use Heroku a lot at work and I find it really annoying when you have to add env vars manually from your local environment every time.

Installation

pip install -U heroku.env

Requirements

  1. Python 3.7+

  2. Your Heroku API key (found here or by running this), for the Heroku API to run and authenticate you.

  3. A valid Heroku app name is required to run against.

  4. The absolute/relative path to the .env file is also needed, but if not provided, .env will be used as the default file name, which expects a file named .env to be present in the current working directory.

Features

  • Auto-setting of all env vars from a .env file.

    Examples:

    $ heroku.env --app swimming-briskly-123 --env-file dot.env
  • Lines starting with # are considered comments in the env file and ignored.

    Examples:

    # Django settings module
    DJANGO_SETTINGS_MODULE=portfolio.settings
  • Allow setting of alternate values or removal/skipping of an env var by specifying alt_value in the comments of the env file AND with the option --set-alt.

    For example, if you want to load the env vars from the .env file into a Heroku app running in production, you might want to use different values for some variables, than the ones in the .env file.

    Examples of allowed usages:

    I use a portfolio.env for my portfolio app running in Docker for local development. If I want the Heroku app to use a different value for DJANGO_SETTINGS_MODULE, I would do something like this:

    # Django settings module alt_value=portfolio.prod_settings
    DJANGO_SETTINGS_MODULE=portfolio.settings

    OR

    # Django settings module
    # alt_value=portfolio.prod_settings
    DJANGO_SETTINGS_MODULE=portfolio.settings

    OR

    # alt_value=portfolio.prod_settings
    # Django settings module
    DJANGO_SETTINGS_MODULE=portfolio.settings

    NOTE: The alt_value needs to be on the line right before the actual env var you want to change. Also note that anything (except for trailing whitespace) specified after alt_value= is used as the alternate value, so be careful.

    If you want to skip an environment variable, simply don’t set alt_value to anything (use alt_value=) and it won’t be set on the app. Note that this will not remove if its added already, but only skips it.

    For example, this variable will be skipped:

    # Django settings module
    # alt_value=
    DJANGO_SETTINGS_MODULE=portfolio.settings

    If you want to remove an existing environment variable, set alt_value to - (use alt_value=-) and it will be removed from the Heroku app.

    In this example, this variable will be removed:

    # Django settings module
    # alt_value=-
    DJANGO_SETTINGS_MODULE=portfolio.settings

    Any of these methods above will force the tool to replace/skip/remove DJANGO_SETTINGS_MODULE but only if you run with the option --set-alt like this:

    $ heroku.env --app swimming-briskly-123 --env-file portfolio.env --set-alt
  • Secure, does not store your API key anywhere.

    There are 3 ways of passing your API key:
    • setting it as an environment variable (recommended: set as HEROKU_API_KEY before running the tool)

    • entering it in a password prompt.

    • passing with --api-key or -k

    If the API key is set as an environment variable, it will be automatically read first. All other ways of setting it will be ignored.

    If it is not set in any way, you will be given a password-type prompt to enter it.

    It is recommended for security purposes that you set it as an environment variable before running the tool, like this:

    $ export HEROKU_API_KEY=a1b12c24-ab1d-123f-5678-1234b12a0a1b

    OR you can wait for the prompt.

    This is not recommended, but is still available as an option.

    $ heroku.env --app swimming-briskly-123 --env-file dot.env --api-key a1b12c24-ab1d-123f-5678-1234b12a0a1b
  • Dumping of all env vars from upstream Heroku for a specified app into a specified .env file.

    Warning: Existing .env files in the same path with the same name will be replaced. As usual, absolute/relative path to the .env file is needed, but if not provided, .env will be used as the default file name.

    Examples:

    $ heroku.env --dump --app swimming-briskly-123 --env-file dot.env

See all options with:

$ heroku.env --help

Credits

  • This is inspired by a script by sdkcodes.

  • martyzz1, for the heroku3 API wrapper.

  • Click, for making writing CLI tools a complete pleasure.

History

0.6.1 (2023-01-11)

  • Throw error if env file is empty

0.6.0 (2023-01-11)

  • drop Python2 support, support 3.7+

  • remove API key confirmation prompt

  • update dependencies

0.5.5 (2019-02-13)

  • bug fixes/improvements

0.5.4 (2019-02-12)

  • fix –dump for absent files

0.5.3 (2019-02-12)

  • allow dumping of env vars

  • fixes for py2.x

0.5.2 (2019-01-27)

  • allow skipping of env vars

  • allow removal of env vars

  • check for rate limit

0.5.1 (2019-01-08)

  • fixes

0.5.0 (2019-01-06)

  • Major revamp: Does not require Heroku CLI anymore. Uses Heroku API instead.

  • Added –version/-v to check version

  • Minor improvements

0.4.0 (2018-12-30)

  • Detect Heroku installation and issues and launch appropriate URLs in browser to guide user

  • Minor improvements

0.3.0 (2018-12-29)

  • add feature to set alternate values during run

  • cleanup and minor improvements

0.2.0 (2018-12-24)

  • First release on PyPI.

Metadata

Release files for heroku.env 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for heroku.env 0.6.1
File Interpreter ABI Platform
heroku.env-0.6.1-py3-none-any.whl Python 3 none any Details

Release files / heroku.env-0.6.1-py3-none-any.whl

Download URL heroku.env-0.6.1-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a6d1313dccb83d477e9538d4ab9312bdfd3eccace55dcce379e63b53c278bad5
BLAKE2b-256 checksum
How to use checksums
b690247e751bca5b39b119418a8a6a16d7a3231ebd58bd9501c922212fcb0fa8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release history Release notifications | RSS feed

This release

0.6.1 This release

1 release file

0.6.0

1 release file

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page