Skip to main content

A tool to use a `pyproject.toml` instead of a `blender_manifest.toml` to build Blender add-ons

Project description

Peeler

Use a pyproject.toml file instead (or alongside) of the blender_manifest.toml required for building blender add-ons since Blender 4.2 .

Easily package a blender add-on without having to manually download dependencies wheels (and dependencies of dependencies !) and manually write theirs paths to blender_manifest.toml .

Installation

uv is needed to use the Wheels feature

If you don't have uv installed

Either install uv and run:

pip install peeler

Or install uv and peeler at once:

pip install peeler[uv]

If you're already a uv user

Peeler doesn't need to be added in your project dependencies, meaning you can use directly peeler as a tool:

uvx peeler [OPTIONS] COMMAND [ARGS]

Or install peeler without uv:

pip install peeler

Features

Manifest

Create a blender_manifest.toml from fields in a pyproject.toml

  • Make sure to have a pyproject.toml with basic field values:
# pyproject.toml

[project]
name = "My Awesome Addon"
version = "1.0.0"
  • Some meta-data are specific to Blender, such as blender_version_min, you can specify theses in your pyproject.toml file under the [tool.peeler.manifest] table, here's a minimal pyproject.toml working version:
# pyproject.toml

[project]
name = "My Awesome Addon"
version = "1.0.0"

[tool.peeler.manifest]
blender_version_min = "4.2.0"
id = "my_awesome_addon"
license = ["SPDX:0BSD"]
maintainer = "John Smith"
tagline = "My Add-on is awesome"
  • Run peeler to create (or update) blender_manifest.toml:
peeler manifest /path/to/your/pyproject.toml /path/to/blender_manifest.toml
# created blender_manifest.toml

version = "1.0.0"
name = "My Awesome Addon"
schema_version = "1.0.0"
type = "add-on"
blender_version_min = "4.2.0"
id = "my_awesome_addon"
license = ["SPDX:0BSD"]
maintainer = "John Smith"
tagline = "My Add-on is awesome"

The manifest is filled with values from the pyproject [project], [tool.peeler.manifest] tables and default values.

To get a full list of values required or optional in a blender_manifest.toml visit https://docs.blender.org/manual/en/latest/advanced/extensions/getting_started.html#manifest

Wheels

Download the wheels needed to package your add-on using dependencies specified in your pyproject.toml, and write their paths to blender_manifest.toml

  • In your pyproject.toml specify your dependencies:
# pyproject.toml

[project]
name = "My Awesome Addon"
version = "1.0.0"
requires-python = "==3.11"

# For instance rich and Pillow (the popular image manipulation module)

dependencies = [
    "Pillow==11.1.0",
    "rich>=13.9.4",
]
  • Run peeler to downloads the wheels for all platforms:
peeler wheels ./pyproject.toml ./blender_manifest.toml

Your blender_manifest.toml will be updated with the downloaded wheels paths

# updated blender_manifest.toml

version = "1.0.0"
name = "My Awesome Addon"
schema_version = "1.0.0"
type = "add-on"
blender_version_min = "4.2.0"

# the wheels as a list of paths
wheels = [
    # pillow wheels for all platforms
    "./wheels/pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win32.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win_amd64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win_arm64.whl",

    # wheels for rich and its dependencies
    "./wheels/rich-13.9.4-py3-none-any.whl",
    "./wheels/markdown_it_py-3.0.0-py3-none-any.whl",
    "./wheels/mdurl-0.1.2-py3-none-any.whl",
    "./wheels/pygments-2.18.0-py3-none-any.whl"
]

Note that the dependencies of the dependencies of the specified in pyproject.toml are also downloaded, neat !

# pillow and rich dependency tree resolved from
# dependencies = [
#    "Pillow==11.1.0",
#    "rich>=13.9.4",
# ]

My Awesome Addon v1.0.0
├── pillow v11.1.0
├── rich v13.9.4
│   ├── markdown-it-py v3.0.0
│      └── mdurl v0.1.2
│   └── pygments v2.18.0

Authors

  • Maxime Letellier - Initial work

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

peeler-0.2.0.tar.gz (50.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

peeler-0.2.0-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

Details for the file peeler-0.2.0.tar.gz.

File metadata

  • Download URL: peeler-0.2.0.tar.gz
  • Upload date:
  • Size: 50.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for peeler-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6838be9003066ed96145339eca878d148a1f1f41c3bc7c1274b2ae162c36703d
MD5 948acae98daeb80b7c47884138d76843
BLAKE2b-256 f10edfd2d9d2cca08dc4bcb55fd528c00d6c1362c4ed76a6621a2de77eb88071

See more details on using hashes here.

Provenance

The following attestation bundles were made for peeler-0.2.0.tar.gz:

Publisher: release.yaml on Maxioum/Peeler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peeler-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: peeler-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for peeler-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2cfa56a5645b0c569a779b3418b0cce5cc499abee408fcd0a24cb12f628d6616
MD5 41c267474bd67697a776affc49e7268b
BLAKE2b-256 a0a294bb7718a51a446d78bc5b8931ddf39d53f7fd9b70e5668373b53403d344

See more details on using hashes here.

Provenance

The following attestation bundles were made for peeler-0.2.0-py3-none-any.whl:

Publisher: release.yaml on Maxioum/Peeler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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