[BUG] `options.packages.find.exclude` not taking effect when `include_package_data = True`
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.9k
- Forks
- 1.4k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 1
Description
setuptools version
62.1.0
Python version
Python 3.10.4 (main, Mar 30 2022, 23:50:39) [GCC 10.2.1 20210110]
OS
Tested in Alpine Linux 3.14, Debian bullseye and Ubuntu 20.04.4 LTS
Additional environment information
Python 3.10.4 (main, Mar 30 2022, 23:50:39) [GCC 10.2.1 20210110]
Package Version
---------- -------
build 0.7.0
packaging 21.3
pep517 0.12.0
pip 22.0.4
pyparsing 3.0.8
setuptools 62.1.0
tomli 2.0.1
wheel 0.37.1
Description
For some reason, when include_package_data = True, subpackages excluded via options.packages.find.exclude are still added to the wheel.
Expected behavior
When listed via options.packages.find.exclude a subpackage should not be added to the wheel.
How to Reproduce
> docker run --rm -it python:3.10-bullseye /bin/bash
mkdir /tmp/mypkg
cd /tmp/mypkg
mkdir -p mypkg/tests
touch mypkg/__init__.py
touch mypkg/resource.txt
touch mypkg/tests/test_mypkg.py
touch mypkg/tests/test_file.txt
cat <<EOS > pyproject.toml
[build-system]
requires = ['setuptools']
build-backend = 'setuptools.build_meta'
EOS
cat <<EOS > setup.cfg
[metadata]
name = mypkg
version = 42
[options]
include_package_data = True
packages = find:
[options.packages.find]
exclude = *.tests*
EOS
cat <<EOS > MANIFEST.in
global-include *.py *.txt
global-exclude *.py[cod]
prune dist
prune build
EOS
python -m pip install -U pip build setuptools wheel
python -VV
python -m pip list
rm -rf dist build mypkg.egg-info
python -m build --no-isolation
# `--no-isolation` is used to guarantee we have control over the
# versions of the build dependencies
unzip -l dist/*.whl
Output
Length Date Time Name
--------- ---------- ----- ----
0 2022-04-11 17:49 mypkg/__init__.py
0 2022-04-11 17:49 mypkg/resource.txt
0 2022-04-11 17:49 mypkg/tests/__init__.py
0 2022-04-11 17:49 mypkg/tests/test_file.txt
0 2022-04-11 17:49 mypkg/tests/test_mypkg.py
108 2022-04-11 17:49 mypkg-42.dist-info/METADATA
92 2022-04-11 17:49 mypkg-42.dist-info/WHEEL
6 2022-04-11 17:49 mypkg-42.dist-info/top_level.txt
654 2022-04-11 17:49 mypkg-42.dist-info/RECORD
--------- -------
860 9 files
The expected output should not include:
- mypkg/tests/__init__.py
- mypkg/tests/test_file.txt
- mypkg/tests/test_mypkg.py
[Related: https://github.com/pypa/setuptools/issues/3340]
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the wheel contents using the shown pyproject.toml, setup.cfg, and MANIFEST.in configuration, starting with python -m build --no-isolation. Trace how options.packages.find.exclude and include_package_data = True interact during the build. Done means the generated wheel omits mypkg/tests/__init__.py, test_file.txt, and test_mypkg.py while retaining the intended package files.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100