Turn python repositories to uv environments and oneliners, without diving into the code.
- Generates oneliners for quick python environment setup
- Helps with migration to
uvfor faster builds in CI/CD - It works on existing projects based on:
requirements.txt,pyproject.tomlorsetup.py, recursively.- Supports local directories.
- Supports GitHub links using Git Ingest.
- It's fast!
| uv
https://huggingface.co/spaces/avilum/uvify
uv is by far the fastest python and package manager.
Source: https://github.com/astral-sh/uv
You can run uvify with uv.
Let's generate oneliners for a virtual environment that has requests installed, using PyPi or from source:
# Run on a local directory
uvx uvify . | jq
# Run on requests
uvx uvify https://github.com/psf/requests | jq
# or:
# uvx uvify psf/requests | jq
[
...
{
"file": "setup.py",
"fileType": "setup.py",
"oneLiner": "uv run --python '>=3.8.10' --with 'certifi>=2017.4.17,charset_normalizer>=2,<4,idna>=2.5,<4,urllib3>=1.21.1,<3,requests' python -c 'import requests; print(requests)'",
"uvInstallFromSource": "uv run --with 'git+https://github.com/psf/requests' --python '>=3.8.10' python",
"dependencies": [
"certifi>=2017.4.17",
"charset_normalizer>=2,<4",
"idna>=2.5,<4",
"urllib3>=1.21.1,<3"
],
"packageName": "requests",
"pythonVersion": ">=3.8",
"isLocal": false
}
]uvify psf/requests
uvify https://github.com/psf/requests
uvify psf/black | jq '.[] | {file: .file, pythonVersion: .pythonVersion, dependencies: .dependencies, packageName: .packageName}'
uvify psf/requests | jq '.[0].oneLiner'
"uv run --with 'git+https://github.com/psf/requests' --python '3.11' python"
uvify psf/requests | jq '.[0].dependencies'
uvify psf/requests | jq '.[].dependencies'
[
"certifi>=2017.4.17",
"charset_normalizer>=2,<4",
"idna>=2.5,<4",
"urllib3>=1.21.1,<3"
]
Uvify supports filtering which files to analyze using include and exclude patterns with glob syntax.
Skip test directories and any paths matching the pattern:
uvify --exclude "tests/*" --exclude "test_*" my-project/Analyze only files in the src/ directory:
uvify --include "src/*" my-project/Analyze only a specific subdirectory:
uvify --include "src/my_app/*" my-project/Include everything in src/ but exclude test files:
uvify --include "src/*" --exclude "*/test_*" --exclude "*/tests/*" my-project/The filtering also works with GitHub repositories:
# Exclude test directories from a GitHub repo
uvify --exclude "tests/*" psf/requests
# Only analyze specific subdirectories
uvify --include "src/*" --include "lib/*" myorg/myrepotests/*- Excludes any directory named "tests" and all its contentstest_*- Excludes any file or directory starting with "test_"*/tests/*- Excludes "tests" directories at any depthsrc/my_app/*- Includes only files within the "src/my_app/" directory*.py- Includes only Python files
Note: By default, uvify scans all directories for requirements.txt, pyproject.toml, and setup.py files. The include/exclude patterns filter which of these files to analyze based on their path.
First, install uvify with the optional API dependencies:
uv add uvify[api]
# or with pip:
# pip install uvify[api]Then run the server:
# Run the server using the built-in serve command
uvify serve --host 0.0.0.0 --port 8000
# Or using uvicorn directly
uv run uvicorn src.uvify:api --host 0.0.0.0 --port 8000
# Using curl
curl http://0.0.0.0:8000/psf/requests | jq
# Using wget
wget -O- http://0.0.0.0:8000/psf/requests | jq# Install dependencies (including optional API dependencies)
uv venv
uv sync --dev --extra api
uv run pytest
# Run linter before PR
./lint.sh
# Install editable version locally
uv run pip install --editable .
uv run python -m src.uvify --help
uv run python -m src.uvify psf/requests
# Run the HTTP API with reload
uv run uvicorn src.uvify:api --host 0.0.0.0 --port 8000 --reload
# Or use the built-in serve command:
# uv run python -m src.uvify serve --host 0.0.0.0 --port 8000
curl http://0.0.0.0:8000/psf/requests | jqThanks to the UV team and Astral for this amazing tool.
