Skip to main content

python-projector: A collection of simple scripts to manage Python projects

Ruff Actions status
Ruff Actions status
pytest doctest Actions status
uv Actions status

🛠️ 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 compile is a command that generates a requirements.txt file from a requirements.in file.
  • requirements.in file should contain the direct dependencies of the project, with dynamic versions.
  • requirements.txt file contains all dependencies with pinned versions.
  • This is a thin wrapper around the command to generate requirements.txt files per architecture.
  • There exists --universal flag to generate a universal requirements.txt file, 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.lock but this is also more complicated to read and parse.
  • For now, we stick to the requirements.txt format 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)

Source distribution for python-projector 0.1.9
File Size Uploaded Provenance
python_projector-0.1.9.tar.gz 23.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for python-projector 0.1.9
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page