Skip to main content

Package a subfolder as a python distribution

Project description

Package a subfolder as a python distribution

  • Free software: Apache Software License 2.0

https://img.shields.io/badge/code%20style-black-000000.svg

Installation

pip install setuptools-build-subpackage

You can also install the in-development version with:

pip install https://github.com/ashb/setuptools-build-subpackage/archive/master.zip

Usage

This distribution contains a subclass of setuptools’s Distribution, designed to build a “sub-module” as a stand alone distribution.

It is designed to be used with setuptools’s declrative config – i.e. where everything is defined in setup.cfg, not in setup.py

For example, take the following layout:

├── example
│   ├── __init__.py
│   ├── sub_module_a
│   │   ├── __init__.py
│   │   ├── setup.cfg
│   │   └── where.py
│   └── sub_module_b
│       ├── __init__.py
│       ├── setup.cfg
│       └── where.py
└── setup.cfg

This assumes we want example.sub_module_a and example.sub_module_b not included in the main distribution, but instead released as separate dists to PyPI.

This set of classes ensures the following:

  • That the top level setup.cfg is not loaded, instead only the one specified from the sub-package

  • That the build/ folder for each sub-package is kept clean, so files from one build don’t leak in to another

  • That the setup.cfg from the sub-folder is present in the built sdist at the top level, meaning it can be installed normally.

  • That a stub setup.py file is included for compatibility with older installers

Configure your main dist

First you should exclude the sub-packages from being included in your main dist:

setup(
    ...
    packages=find_packages(exclude=['example.sub_module_*'])
)

or

[options.packages.find]
exclude =
  example.sub_module_*

Create a setup.cfg for your sub-dist

The requirements and information for the subdist are all driven off a setup.cfg – right now a sub-setup.py is not supported. (The setup.py included in the sdist will always be generated. PRs welcome if you need something else here.)

See example/sub_module_a/setup.cfg in the source code for a minimal example.

All file paths and module names are absolute, not relative to the location of the setup.cfg file

Build the sdist/bdist

Run the following command:

python -m setuptools_build_subpackage \
  --subpackage-folder example/sub_module_b \
  sdist \
  bdist_wheel

This will create a .tar.ga and .whl file in dist

Including a license comment

If you need a license comment in the generated setup.py, pass the --license-template option to sdist

python -m setuptools_build_subpackage \
  --subpackage-folder example/sub_module_b \
  sdist --license-template ./LICENSE \
  bdist_wheel

This argument should be a path to a plain-text license file, that will be included at the top of the generated file, each line prefixed with a python comment.

Development

To run all the tests run:

pip install -e '.[devel]' && pytest

It is also recommended that you install pre-commit to check style rules

Changelog

1.0.0 (2021-04-23)

  • First release on PyPI.

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

setuptools-build-subpackage-1.0.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file setuptools-build-subpackage-1.0.0.tar.gz.

File metadata

  • Download URL: setuptools-build-subpackage-1.0.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.3

File hashes

Hashes for setuptools-build-subpackage-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2f09fd5b5b543d5c063151439d845cd3fb4f67b3426204625301d6f28ca8f26a
MD5 d050ddd9200405d0da942782da01ada9
BLAKE2b-256 2f26c454a7b72563ce362a9ff5d29aa8b809154ec19cf45f792cc261acec0012

See more details on using hashes here.

File details

Details for the file setuptools_build_subpackage-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: setuptools_build_subpackage-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.3

File hashes

Hashes for setuptools_build_subpackage-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5bc5b58769bc91b785ae9bd9e660859843736633703f771bbdc064f660232770
MD5 f3581222896c885f2a02b18ccb69771d
BLAKE2b-256 02b38d13066de3e54ea9282bc8c8c6abf10ed49d3632a9c537966037a2d543f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page