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.13a1.tar.gz (221.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.13a1-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: appenv-2026.5.13a1.tar.gz
  • Upload date:
  • Size: 221.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.13a1.tar.gz
Algorithm Hash digest
SHA256 ed881721503d1b133ec35f20d5c188cd4ed9ecb1687fefe9768099d2d9ae79a6
MD5 bcc68017e916619c050cd095ce17fe5a
BLAKE2b-256 b72f37c448805f4010ca80bacd246ce24af9dc2e1df075c0df027dd192056a7a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: appenv-2026.5.13a1-py3-none-any.whl
  • Upload date:
  • Size: 19.0 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.13a1-py3-none-any.whl
Algorithm Hash digest
SHA256 497f6cb13b6e0306959fce8684473498f8a4780c0c54410ea65eaadc5fd33bde
MD5 17367ac36f292efcff4b37d9056cb5ff
BLAKE2b-256 c4a0a70948769d2986413f5a31ee94d30f3dc7da892202e5a5d9fbd5743ad398

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