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.13a3.tar.gz (224.2 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.13a3-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: appenv-2026.5.13a3.tar.gz
  • Upload date:
  • Size: 224.2 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.13a3.tar.gz
Algorithm Hash digest
SHA256 70e9e33f98e70e74f12645987751989ecf39bc19bfa53da3ad235dfd438a6fce
MD5 c7e7e015ab48ae9d0e64d48d49612019
BLAKE2b-256 c8676dffd28bc00cd927f908ee0f0500bba110d56f6311512f1f4aa8c02dec2b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: appenv-2026.5.13a3-py3-none-any.whl
  • Upload date:
  • Size: 19.1 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.13a3-py3-none-any.whl
Algorithm Hash digest
SHA256 8944fbf1b5224a6c352baff5471a2d7950af8636ae5571833de85238b96a72b0
MD5 983860767c114971148bd4d5886219ac
BLAKE2b-256 efd5b7848394e59290afa89a6b21c90e7073e27c06e3e85750ee7c18a8db821b

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