quickenv
: An unintrusive environment managerdirenv
is a manager for loading/unloading environment
variables per-project. It achieves this by hooking into your shell and
executing a shellscript called .envrc
upon cd
, loading environment
variables generated by that shellscript into your current shell. It is useful
for automatically activating
virtualenvs, for example.
Unfortunately direnv
can be a little bit "intrusive" to use. For a start, it
runs its own code in your shell. This alone is not noticeable in terms of
terminal responsiveness, but the various .envrc
s that people end up writing
sometimes are. direnv
does not have a reliable, out-of-the-box way to cache
the execution of .envrc
s, as it is arbitrary code, and so it runs everytime
you cd
in and out of a project.
quickenv
is a replacement for direnv
. It works with existing .envrc
s, and
as such is a drop-in replacement, but how you interact with quickenv
and how
it loads environment variables is fundamentally different.
quickenv
does not hook into your shell. It only requires an addition to
your PATH
.quickenv
does not load .envrc
when changing directories. Instead you need
to initialize quickenv
per-project using quickenv reload
, and rerun that
command everytime the .envrc
changes.quickenv
does not even load environment variables into your shell. Instead
you tell quickenv
which binaries should run with those environment
variables present (for example quickenv shim python pytest poetry
), and
quickenv will wrap those commands in a custom binary, and put that "shim" on
your PATH
.quickenv
is heavily inspired by volta which achieves
version management for nodejs by also providing "shim" binaries for the most
common commands (yarn
, npm
, node
).
quickenv is work in progress and most likely contains bugs. that said, I use it daily at work
quickenv
currently assumes direnv
is in your path, in order to load
its "standard library".
quickenv
also currently does not have pre-built binaries. You need to
install Rust and install it using Rust's package
manager, Cargo.
quickenv
assumes a POSIX environment.
```bash cargo install quickenv
export PATH=$HOME/.quickenv/bin/:$PATH ```
We're going to check out sentry, because
that's one of the .envrc
s I use. Note that Sentry's .envrc
only works on
MacOS.
```bash git clone https://github.com/getsentry/sentry cd sentry
quickenv reload
quickenv shim
quickenv shim sentry pytest
sentry devserver --workers pytest tests/sentry/ ```
```bash
quickenv shim git
quickenv vars
set -o allexport eval "$(quickenv vars)" set +o allexport
quickenv shim bash
quickenv shim make ```
Licensed under MIT
, see LICENSE
.