It started reproducing when I added dynamic version retrieval using setuptools-scm.
pyproject.toml
:
# pyproject.toml file that tests exclusion of files using MANIFEST.in
[build-system]
requires = [
"setuptools>=70.0.0",
"setuptools-scm>=8.1.0",
"wheel>=0.38.1",
]
build-backend = "setuptools.build_meta"
[tool.setuptools]
platforms = ["any"]
zip-safe = true
script-files = ["build.sh"]
[tool.setuptools.packages.find]
include = ["test_manifest", "test_manifest.*"]
[project]
name = "test-manifest"
description = "Test exclusion of files using MANIFEST.in"
requires-python = ">=3.8"
dynamic = ["version", "dependencies"]
[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}
[tool.setuptools_scm]
version_file = "test_manifest/_version_scm.py"
MANIFEST.in
file:
include pyproject.toml
include dev-requirements.txt
include MANIFEST.in
recursive-include test_manifest *
Repo tree:
├── MANIFEST.in
├── build.sh
├── dev-requirements.txt
├── dist
│ └── test_manifest-1.0.1.dev0+ge4fd9be.d20250302.tar.gz
├── excluded
│ └── file1.py
├── excluded_file1.txt
├── pyproject.toml
├── requirements.txt
├── test_manifest
│ ├── __init__.py
│ ├── _version_scm.py
│ └── main.py
└── test_manifest.egg-info
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── requires.txt
├── top_level.txt
└── zip-safe
Build commands (in build.sh
):
rm -rf test_manifest.egg-info
rm -rf build
rm dist/*
python -m build --sdist --outdir dist .
Content of created source archive:
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/MANIFEST.in
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/PKG-INFO
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/build.sh
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/dev-requirements.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/excluded/file1.py
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/excluded_file1.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/pyproject.toml
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/requirements.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/setup.cfg
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest/__init__.py
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest/_version_scm.py
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest/main.py
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/PKG-INFO
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/SOURCES.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/dependency_links.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/requires.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/top_level.txt
test_manifest-1.0.1.dev0+ge4fd9be.d20250302/test_manifest.egg-info/zip-safe
The unexpected files in the source archive are:
excluded/file1.py
excluded_file1.txt
The setup.cfg
file has been auto-created, but that is not an issue, I guess.
When removing the dynamic versioning from the pyproject.toml
file, these two files are not in the source archive.
I guess this sounds like a bug in setuptools or setuptools-scm?