Configuration Reference ======================= All configuration for rind goes in the ``[tool.rind]`` table of your ``pyproject.toml``. Core Package Options -------------------- These options are used when wrapping a core package. For standalone metapackages (dependency bundles without a core package), see :ref:`standalone-mode` below. core-path ~~~~~~~~~ **Type:** string (path) Path to the directory containing your core package's ``pyproject.toml``. This tells rind where to find the core package. .. code-block:: toml [tool.rind] core-path = ".." The core package's ``pyproject.toml`` is used to: - Determine the version (using whatever versioning system the core uses) - Get the core package name (from ``[project] name``) - Inherit metadata fields like authors, license, URLs (if ``inherit-metadata`` is true) .. note:: If ``core-path`` is not specified, rind operates in **standalone mode** where all metadata must be provided directly in ``[project]``. name ~~~~ **Type:** string The name of the metapackage. Required when using ``core-path``. Must be different from the core package name. .. code-block:: toml [tool.rind] name = "mypackage" In standalone mode, specify the name in ``[project]`` instead. Inheritance Options ------------------- inherit-metadata ~~~~~~~~~~~~~~~~ **Type:** boolean (default: ``true``) Whether to inherit metadata fields from the core package. When true, the following fields are inherited (unless overridden): - ``description`` - ``requires-python`` - ``license`` - ``authors`` - ``urls`` - ``classifiers`` - ``keywords`` .. code-block:: toml [tool.rind] # Inherit metadata (default) inherit-metadata = true # Or disable inheritance inherit-metadata = false .. note:: The inherited metadata is resolved and stored in the sdist's ``pyproject.toml``, so wheels can be built from the sdist without access to the core package. Dependency Options ------------------ include-extras ~~~~~~~~~~~~~~ **Type:** list of strings Extras from the core package to include as required dependencies in the metapackage. These become part of the main ``Requires-Dist``. .. code-block:: toml [tool.rind] # Users of the metapackage automatically get these extras include-extras = ["recommended", "performance"] The resulting wheel will have: .. code-block:: text Requires-Dist: mypackage-core[recommended,performance]==1.2.3 passthrough-extras ~~~~~~~~~~~~~~~~~~ **Type:** list of strings Extras from the core package to re-expose in the metapackage. These remain optional but are pinned to the same version. .. code-block:: toml [tool.rind] passthrough-extras = ["test", "docs", "dev"] The resulting wheel will have: .. code-block:: text Provides-Extra: test Requires-Dist: mypackage-core[test]==1.2.3; extra == 'test' Provides-Extra: docs Requires-Dist: mypackage-core[docs]==1.2.3; extra == 'docs' Note that you can use ``["*"]`` to pass through all extras from the core package: .. code-block:: toml [tool.rind] passthrough-extras = ["*"] This is particularly useful for existing packages transitioning to use rind. By passing through all extras, the metapackage preserves full backward compatibility - any code that previously depended on ``mypackage[someextra]`` will continue to work unchanged with the new metapackage structure. .. note:: It's fine if an extra appears in both ``include-extras`` and ``passthrough-extras`` (either explicitly or via ``["*"]``). When a user installs the passthrough extra, it will be a no-op since that extra's dependencies are already installed as part of the main package. This means you don't need to carefully exclude ``include-extras`` from your passthrough list. Metadata Overrides ------------------ Any field that can be inherited can also be overridden by specifying it directly in ``[tool.rind]``: description ~~~~~~~~~~~ **Type:** string Override the inherited description. .. code-block:: toml [tool.rind] description = "My package with all recommended dependencies" You can also override these in a ``[project]`` table, though ``[tool.rind]`` takes precedence: .. code-block:: toml [project] # These are checked after [tool.rind] but before inherited values requires-python = ">=3.10" [tool.rind] # This takes highest precedence description = "Override description" Complete Example ---------------- Here's a complete ``pyproject.toml`` for a metapackage: .. code-block:: toml [build-system] requires = ["rind"] build-backend = "rind" [tool.rind] # Path to core package directory (required) core-path = ".." # Meta-package identity name = "mypackage" description = "My package with batteries included" # Make these extras required include-extras = ["recommended", "performance"] # Pass through all extras for backward compatibility passthrough-extras = ["*"] .. _standalone-mode: Standalone Mode --------------- rind can also create metapackages without a core package. This is useful for creating curated dependency bundles (e.g., "my-data-science-stack"). In standalone mode, omit ``core-path`` and specify all metadata directly in ``[project]``: .. code-block:: toml [build-system] requires = ["rind"] build-backend = "rind" [project] name = "my-data-science-stack" version = "1.0.0" description = "A curated collection of data science packages" requires-python = ">=3.9" dependencies = [ "pandas>=2.0", "numpy>=1.24", "matplotlib>=3.7", ] [project.optional-dependencies] ml = ["scikit-learn>=1.3", "tensorflow>=2.13"] Key differences from core-package mode: - Version must be static (specified directly in ``[project]``) - No metadata inheritance (everything in ``[project]``) - No ``include-extras`` or ``passthrough-extras`` (define extras directly) - No automatic version pinning