Skip to main content

A simple wrapper for executing virtualenv commands and passing them environment variables via a config file.

Project description

A simple wrapper for executing virtualenv commands and passing them environment variables via a config file.

Use case

Let’s say you deploy a Django site named “example.com”. You follow all the best practices and deploy it as a Python package, installed in an isolated virtualenv at /usr/share/python/example-com (as dh_virtualenv would do).

Configuration is read from environment variables in the Django settings.

When you want to run a Django management command on your server, you would type:

ENV_VAR_1=value ENV_VAR_2=other … /usr/share/python/example-com/bin/django-admin <command>

You could use envdir or bash’s source command to expose your environment variables, but Env-cmd eases that further. It allows you to read a configuration file, expose values in the environment and run a command simply by adding a setuptools entry point in your setup.py. With the entry point symlinked to /usr/bin, your command becomes:

example-com django-admin <command>

Env-cmd:

  • Reads a configuration file using the default location provided, or an override.

  • Exposes configuration values as environment variables.

  • Resolves the path of your virtualenv.

  • Shells out to the virtualenv command.

Installation

pip install env-cmd

Usage

In <yourproject>/cli.py:

import env_cmd

read_environ = env_cmd.read_environ(
    'PRCONFIG',  # name of the env var that allows overriding of the
                 # config path.
    '/etc/yourproject.conf', # default config path.
    {'SOME_ENV_VARIABLE': 'DEFAULT_VALUE', # Some default environment
     'OTHER_VARIABLE', 'OTHER VALUE'},     # variables.
)
main = env_cmd.main(read_environ)

In your setup.py:

setup(
    
    entry_points={'console_scripts': ['yourproject=yourproject:main']},
)

Then symlink /path/to/virtualenv/bin/yourproject to /usr/bin/yourproject.

You can run a command from your virtualenv with:

yourproject <command>

Override the default config path with:

PRCONFIG=/path/to/config.conf yourproject <command>

Configuration syntax is the following:

KEY=value
OTHER=some other value
QUOTED="quotes are stripped."
ALSO='single quotes too'
WHITESPACE=    is stripped as well.
# comments work like this

# empty lines are skipped

If you run a web server with Gunicorn, you can use the on_reload hook to read configuration on server reload, allowing zero-downtime configuration updates:

# gunicorn.conf.py
import os

from yourproject import read_environ

def on_reload(server):
    server.log.info("Reading environ")
    os.environ = read_environ()
    server.log.info(os.environ)

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

env-cmd-1.0.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

env_cmd-1.0-py2.py3-none-any.whl (5.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file env-cmd-1.0.tar.gz.

File metadata

  • Download URL: env-cmd-1.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for env-cmd-1.0.tar.gz
Algorithm Hash digest
SHA256 1b805bb89422673d1d158d29b6762301e7c04f7088fbaef927b52ba3fff2f683
MD5 9515fae120cb0cb0b2a710abf2729c22
BLAKE2b-256 3bf1c8af64eab3a6739f507597a9a73f7982521a826c663dac09dcdc339d3192

See more details on using hashes here.

File details

Details for the file env_cmd-1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for env_cmd-1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bf758a9ac57bef72dc594dc455ab88b2c0b5e40d4a61f9911c173c359429a2c3
MD5 93a8ee5fc253c4c6a0727e9116b76eba
BLAKE2b-256 0e524ddf95643f442beed2433d847f2bd85275c7d08ca30565bc64fb63a8ecff

See more details on using hashes here.

Supported by

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