Convert uv (Astral) project files (pyproject.toml + uv.lock) into Pipenv (Pipfile + Pipfile.lock) so security tooling like Veracode can scan projects that don't yet support uv directly.
Project description
uv-burn
Convert uv (Astral's ultra-fast Python package manager) project metadata (pyproject.toml + uv.lock) into Pipenv (Pipfile + Pipfile.lock) so tools (notably Veracode) that do not yet support uv projects can successfully perform dependency / SCA & static scans.
Table of Contents
- Why does this exist?
- Features
- Installation
- Quick start
- CLI options
- Authenticated indices
- How it works
- Limitations
- Contributing
- FAQ
- Inspiration & Acknowledgements
- License
Why does this exist? (The Veracode gap)
As of 2025, Veracode's Python ecosystem detection supports projects that use Poetry or Pipenv (and classic requirements.txt flows in some pipelines). The emerging uv workflow produces a uv.lock file which Veracode currently ignores, resulting in scans that:
- Fail to identify transitive dependencies
- Report missing package manager / manifest warnings
- Potentially under-report vulnerable packages
uv-burn acts as a compatibility bridge: it synthesizes a Pipfile + fully hashed Pipfile.lock from your existing pyproject.toml & uv.lock, preserving:
- Sources / custom indices (including auth via environment variables)
- Resolved versions and hashes
- Python version requirements
- Markers (incl. per‑package python_version constraints fetched from indexes when needed)
No re-resolution is attempted: the tool faithfully projects the lock state into the Pipenv schema.
NOTE: This project is not affiliated with Astral, Pipenv, or Veracode. It's a pragmatic helper until native
uvsupport lands in security tooling.
Features
- Multi-
pyproject.tomldiscovery (monorepos) - Converts
uv.lock+ all discovered project dependency declarations into:PipfilePipfile.lock(hashes, markers, indices)
- Preserves custom package indices (adds default PyPI if missing)
- Fetches per-package
requires-pythonmarkers from indices to build accurate Pipenv markers - Deterministic hashing (matches Pipenv's lock hash approach for meta section)
- Async index fetch for performance
- Safe by default: refuses to overwrite unless
--force
Installation
Install from source (until published on PyPI):
pip install uv-burn
# From a local clone
pip install -e .
Quick start
Inside a repository that already contains at least one pyproject.toml and a uv.lock:
uv-burn .
Outputs (by default in the provided root path):
PipfilePipfile.lock
CLI options
uv-burn [ROOT_PATH] [--output PATH] [--force] [--verbose]
| Option | Description |
|---|---|
ROOT_PATH |
Root directory to scan (recursive) for pyproject.toml + uv.lock. |
-o, --output |
Directory to write Pipfile + Pipfile.lock (defaults to root). |
-f, --force |
Overwrite existing Pipfile artifacts if present. |
-v, --verbose |
Enable debug logging (rich formatted). |
Example (monorepo)
uv-burn ./services/ --output ./pipenv-export/
Authenticated indices
Environment variables are auto-detected per index name:
UV_INDEX_<INDEXNAME>_USERNAME
UV_INDEX_<INDEXNAME>_PASSWORD
Example for an index declared as name = "internal":
export UV_INDEX_INTERNAL_USERNAME=myuser
export UV_INDEX_INTERNAL_PASSWORD=secret
uv-burn .
How it works
- Recursively finds all
pyproject.tomlfiles - Loads
uv.lock - Builds a combined source list (default PyPI + declared
tool.uv.indices) - Parses project dependencies (markers, extras, direct URLs / git)
- Computes
Pipfilemeta hash - For each external package in the lock:
- Gathers wheel / sdist hashes
- Enriches with
requires-python(queried from the index JSON Simple API) - Builds Pipenv marker string
- Writes
Pipfile+ JSONPipfile.lock
Limitations
- Not meant for project conversion; keep using
uvfor development - Development dependencies currently not exported (section left empty)
- Does not re-resolve dependencies; assumes
uv.lockis authoritative - Only first discovered project's
requires-pythonused for Pipfilerequires(multi-root nuance) - Git / direct URL dependencies: basic handling; lock fidelity may vary if Pipenv's semantics differ
- Does not attempt environment marker normalization beyond Python version & those present in
uv.lock
Contributing
Pull requests welcome! Suggested flow:
- Fork & create a feature branch
- Maintain style (ruff rules configured)
- Add / adapt tests (to be added as project matures)
- Open PR explaining motivation / behaviour change
Dev environment
uv sync
Run lint:
ruff check .
Run formatting:
ruff format .
FAQ
Q: Why not have Veracode just support uv?
We're waiting. This tool fills the interim gap.
Q: Is the produced Pipfile intended for ongoing dev use?
Primarily for scanning artifacts; you should keep uv as your development workflow.
Q: Are hashes trustworthy?
Hashes are taken from uv.lock entries (wheels / sdist) without modification.
Q: What about license compliance scans?
Those should work once dependencies are discoverable via the synthesized Pipfile.lock.
Inspiration & Acknowledgements
- Astral for
uv
License
MIT – see LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uv_burn-0.1.0.tar.gz.
File metadata
- Download URL: uv_burn-0.1.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c836a0c9712f2a977b33998a91f3dd0d07d89a2cb73886dd7ae48f6680f52cf3
|
|
| MD5 |
e0eea414a34ce7ffab1488d112fa32e2
|
|
| BLAKE2b-256 |
a9e4fd202fcdd663986cc17aec8909c8e18cdf6749b8660c9cf0f40e33e887af
|
File details
Details for the file uv_burn-0.1.0-py3-none-any.whl.
File metadata
- Download URL: uv_burn-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c249a2e94f971f27ef6ad2d2b3c7c0bb8267cc379e9a4ea6ecd8dbd156c5185
|
|
| MD5 |
ea45ae603bdd7dc15cb2ce0a7818294a
|
|
| BLAKE2b-256 |
bec33fe6fad864d1a7b8b29c68114a5242594410d3c77f28ce8cd978f2846d71
|