python-projector: A collection of simple scripts to manage Python projects
🛠️ Installation
# install with pip
pip install python-projector
# install with uv tool
uv tool install python-projector
🚀 Usage
Usage: projector [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version -v Show version │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help -h Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ find-pyproject-toml Find the pyproject.toml file in the current directory or any parent directory. │
│ get-min-python-version Get the minimum python version from the pyproject.toml file. │
│ get-src-dir Print the `src/` directory based on the pyproject.toml file. │
│ gen-init-py Generate __init__.py files for all subdirectories of src/. │
│ pip-compile Generate requirements.txt and requirements-dev.txt files. │
│ run-doctest Run doctest for all modules in `src/` directory. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Find nearest pyproject.toml file with projector find-pyproject-toml
It will find the nearest pyproject.toml file in the current directory or its parent directories.
Get src/ directory with projector get-src-dir
It will read the pyproject.toml's tool.setuptools.packages.find.where setting.
If the configuration is not found, it will assume src/ as the default value.
[tool.setuptools.packages.find]
where = ["src"]
Apply uv pip compile with projector pip-compile
Background:
uv pip compileis a command that generates arequirements.txtfile from arequirements.infile.requirements.infile should contain the direct dependencies of the project, with dynamic versions.requirements.txtfile contains all dependencies with pinned versions.- This is a thin wrapper around the command to generate
requirements.txtfiles per architecture. - There exists
--universalflag to generate a universalrequirements.txtfile, but we don't use it. Instead, we just separate the files per architecture.- This is because it makes the requirements overly complicated to read and parse.
- There exists a better format called
uv.lockbut this is also more complicated to read and parse. - For now, we stick to the
requirements.txtformat for the sake of simplicity.
Usage:
First, configure in the pyproject.toml file:
[tool.projector.pip-compile]
requirements-in-dir = "deps"
requirements-out-dir = "deps/lock"
python-platforms = ["x86_64-manylinux_2_28", "aarch64-apple-darwin", "x86_64-apple-darwin"]
Then, run the command:
projector pip-compile
It will make deps/lock/{platform}/requirements*.txt files based on the deps/requirements*.in files.
Get minimum Python version with projector get-min-python-version
Given the pyproject.toml file:
[tool.project]
requires-python = ">=3.10,<4"
It will output the minimum Python version:
$ projector get-min-python-version
3.10
This is useful in CI where you want to run unit test etc. with the minimum Python version.
For example, in GitHub Actions:
jobs:
job-name:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Get minimum Python version
run: |
uv tool install python-projector
echo "min_python_version=$(projector get-min-python-version)" >> "$GITHUB_OUTPUT"
id: parse-python-version
- uses: actions/setup-python@v5
with:
python-version: ${{ steps.parse-python-version.outputs.min_python_version }}
# ...
Generate __init__.py files with projector gen-init-py
Generate __init__.py files recursively in the src/ directory found like projector get-src-dir.
This is useful for mkdocs because it requires __init__.py in all modules.
Run doctest with projector run-doctest
Run doctest with all modules in the src/ directory found like projector get-src-dir.
Metadata
Release files for python-projector 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| python_projector-0.1.9.tar.gz | 23.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_projector-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.9 kB
Release files / python_projector-0.1.9.tar.gz
| Download URL | python_projector-0.1.9.tar.gz |
|---|---|
| Size | 23.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fdf396c082ca4b81fe6921dac1816ec0a85828a3fb33b7d9ff86aae5da945c2c
|
|
BLAKE2b-256 checksum How to use checksums |
ab7f01bdbb09fd8c8c5089a744f34a1d34b00d54e16508f8249fa75cd8f05101
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.13
|
Release files / python_projector-0.1.9-py3-none-any.whl
| Download URL | python_projector-0.1.9-py3-none-any.whl |
|---|---|
| Size | 25.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
804abf200f4dfe2b5a6f6c49fb4368d672ed58ae486aa2dabe1c2e4740ff4afb
|
|
BLAKE2b-256 checksum How to use checksums |
1b8716160aac6ee0d9bf9a37faf0164d3421d5e1ea6f8f019b9f9ea000a0b738
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.7.13
|
Security for python-projector 0.1.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.