Skip to main content

Self-contained bootstrapping/updating of Python applications deployed through shared repositories.

Project description

appenv

E2E Tests Tox Tests

appenv pins Python packages to exact versions and exposes their binaries via symlinks — one file, no installation step. Drop it into a repository, commit it, and every checkout (local or remote) gets the same tools at the same versions by running ./http, ./pytest, ./batou, or whatever you need.

appenv never modifies your system — all state lives in .appenv/ inside the project directory. Remove that folder and nothing is left behind.

Using an existing appenv project

Someone gave you a project that already uses appenv? Just run the command:

git clone <project> && cd <project>
./http  # First run sets up everything automatically

Running the command will get an appenv-managed uv if it's not globally available on your system.

No uv.lock (should be committed) or dependencies changed?

./appenv update-lockfile

(Only needed again after manually editing pyproject.toml)

Use ./appenv uv add/remove to manage your dependencies or just use uv as you are used to it.

Upgrading from requirements.txt

Already an appenv user and still using requirements.txt instead of pyproject.toml?

uvx appenv migrate

New Project

Requires Python 3.9+ (managed environments need 3.10+). uv 0.5.0+ is auto-installed if not found. Get appenv via uvx or download the single-file script.

appenv init will ask you some questions and set up the project (interactive by default — pass --binary and --dep for non-interactive use). The example assumes that you want to run a binary called http from the httpie package.

uvx (uv)

uvx is part of uv — the easiest way to start:

# appenv init is interactive
# Answer:
# httpie as dependency
# http as binary
uvx appenv init
./http

Manual Download

No uv installed? Download appenv directly:

curl -sL https://raw.githubusercontent.com/flyingcircusio/appenv/master/src/appenv.py -o appenv
chmod +x appenv
# appenv init is interactive
# Answer:
# httpie as dependency
# http as binary
./appenv init
./http

What just happened?

  • appenv installed itself inplace by adding the ./appenv script.
  • init created pyproject.toml and a symlink http → appenv.
  • ./http set up the venv with pinned versions from uv.lock, then ran the http binary (from the httpie package)

The repository now contains:

myproject/
├── appenv          # The appenv script
├── http -> appenv  # Runs the `http` binary from installed deps
├── pyproject.toml  # Project config and dependency list
└── uv.lock         # Exact versions of all dependencies

All of these files should be VCS-tracked to ensure a consistent environment across all machines.

Non-Interactive / CI

For scripts and CI pipelines — no TTY needed:

appenv init --binary http --dep httpie --name myproject

Development

For dev tooling, uv run and other uv commands work transparently. appenv automatically creates a .venv symlink to make this work:

# includes dev dependencies automatically
uv run pytest -xvs

Documentation

Full documentation at Readthedocs:

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

appenv-2026.6.16b1.tar.gz (246.9 kB view details)

Uploaded Source

Built Distribution

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

appenv-2026.6.16b1-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file appenv-2026.6.16b1.tar.gz.

File metadata

  • Download URL: appenv-2026.6.16b1.tar.gz
  • Upload date:
  • Size: 246.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appenv-2026.6.16b1.tar.gz
Algorithm Hash digest
SHA256 c28feba7f6d7598c390a3f3c440ddd37e53fced61257f77862355fec0e2b37a4
MD5 6cf58dba833419b579c357cfc98d48a5
BLAKE2b-256 c19dfce43a0aa6f2fb2489081ff0ddd647c8c74c66aef3b53f5bbb62f3a88b28

See more details on using hashes here.

File details

Details for the file appenv-2026.6.16b1-py3-none-any.whl.

File metadata

  • Download URL: appenv-2026.6.16b1-py3-none-any.whl
  • Upload date:
  • Size: 22.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appenv-2026.6.16b1-py3-none-any.whl
Algorithm Hash digest
SHA256 e016782e0bd6a01f61ecabf457fd5097af191f04c56eeea165b1e4cff6b64f8d
MD5 7c37be902a6b6df420cf20b8aeb108af
BLAKE2b-256 84e8f8f94d85ec48828d90754fbd4b2a0c2fd2b4ade28c1b615be79b9cd9f132

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