Skip to main content

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

Project description

appenv

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, ./mkdocs, ./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

No uv.lock yet? Generate it:

./appenv update-lockfile

Only needed again after manually editing pyproject.tomluv add/uv remove update the lockfile automatically.

Upgrading from requirements.txt

Still using requirements.txt instead of pyproject.toml?

uvx appenv migrate

New Project

appenv is distributed as a standalone script. Just use uvx or download it yourself. appenv init will ask you some questions and set up the project. 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:

uvx appenv init

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

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 (single file, committed to git)
├── http -> appenv  # Runs the `http` binary from installed deps
├── pyproject.toml  # Project config and dependency list
└── uv.lock         # Exact versions of all dependencies (committed to git)

Development

For dev tooling, uv run works transparently (uses the .venv symlink):

uv run pytest -xvs

Documentation

Full documentation at Readthedocs:

Requirements

  • Python 3.9+ for the appenv script (environments managed by appenv require 3.10+)
  • uv 0.5.0+ (auto-installed if not found)

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.5.13a2.tar.gz (222.6 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.5.13a2-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file appenv-2026.5.13a2.tar.gz.

File metadata

  • Download URL: appenv-2026.5.13a2.tar.gz
  • Upload date:
  • Size: 222.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","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.5.13a2.tar.gz
Algorithm Hash digest
SHA256 a02b39a4c79db85900f109ea0eb08160693062d81b04bb1a6e12c12618bb75b3
MD5 0bb849336a88e649494b77ef8a587cdd
BLAKE2b-256 6dcee554089a8f26fe21c693b84e1be1ea5c072d04a5b689ec87731a38916b6c

See more details on using hashes here.

File details

Details for the file appenv-2026.5.13a2-py3-none-any.whl.

File metadata

  • Download URL: appenv-2026.5.13a2-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","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.5.13a2-py3-none-any.whl
Algorithm Hash digest
SHA256 c7ecb8ef84872d860f3ed0eb63624419ec3ac58cf4ec11e5dd4c360514de3b74
MD5 3534683f1b27fb3f790741ea2dedcefe
BLAKE2b-256 8f89a89f6b4745441d693596b10dd78c60a8459519a0559873d94b36551461b4

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