Skip to content

[BUG] build command copies extension sources (.c, .cpp files) to build/lib directory #5133

@rajputa-deshaw

Description

@rajputa-deshaw

setuptools version

80.9.0

Python version

Python 3.11.13

OS

RHEL 8

Additional environment information

Only happens when both pyproject.toml and setup.py are present.

Description

python setup.py build copies the extension sources i.e. the .cpp files to the lib directory along with the generated .so files.

Expected behavior

python setup.py build should only copy the .so files for extensions, not the extension sources.

How to Reproduce

Run python setup.py build in a project containing an extension, the extension sources will be copied to the lib directory.

pyproject.toml contains:

[project]
name="foo"
version="1.0"

setup.py contains:

from setuptools import setup, Extension

setup(
    ext_modules=[
        Extension("foo.extension", ["src/foo/extension/bar.cpp"]),
    ],
)

project structure:

 .
├── pyproject.toml
├── setup.py
└── src
    └── foo
        └── extension
            └── bar.cpp

3 directories, 3 files

After running build command:

.
├── build
│   ├── lib.linux-x86_64-cpython-311
│   │   └── foo
│   │       ├── extension
│   │       │   └── bar.cpp
│   │       └── extension.cpython-311-x86_64-linux-gnu.so
│   └── temp.linux-x86_64-cpython-311
│       └── src
│           └── foo
│               └── extension
│                   └── bar.o
├── pyproject.toml
├── setup.py
└── src
    ├── foo
    │   └── extension
    │       └── bar.cpp
    └── foo.egg-info
        ├── PKG-INFO
        ├── SOURCES.txt
        ├── dependency_links.txt
        └── top_level.txt

12 directories, 10 files

Output

Output of python setup.py build

Could not find an up-to-date installation of `packaging`. License expressions might not be validated. To enforce validation, please install `packaging>=24.2`.
Note: NumExpr detected 10 cores but "NUMEXPR_MAX_THREADS" not set, so enforcing safe limit of 8.
NumExpr defaulting to 8 threads.
running build
running build_py
running egg_info
creating src/foo.egg-info
writing src/foo.egg-info/PKG-INFO
writing dependency_links to src/foo.egg-info/dependency_links.txt
writing top-level names to src/foo.egg-info/top_level.txt
/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pbr/git.py:28: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
writing manifest file 'src/foo.egg-info/SOURCES.txt'
reading manifest file 'src/foo.egg-info/SOURCES.txt'
writing manifest file 'src/foo.egg-info/SOURCES.txt'
creating build/lib.linux-x86_64-cpython-311/foo/extension
copying src/foo/extension/bar.cpp -> build/lib.linux-x86_64-cpython-311/foo/extension
running build_ext
INFO: Disabling color, you really want to install colorlog.
Disabling color, you really want to install colorlog.
building 'foo.extension' extension
creating build/temp.linux-x86_64-cpython-311/src/foo/extension
/opt/rh/gcc-toolset-10/root/usr/bin/g++ -pthread -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/codemill/rajputa/dessetuptools/venv/include -I/opt/python/python-3.11/include/python3.11 -c src/foo/extension/bar.cpp -o build/temp.linux-x86_64-cpython-311/src/foo/extension/bar.o
/opt/rh/gcc-toolset-10/root/usr/bin/g++ -pthread -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -shared build/temp.linux-x86_64-cpython-311/src/foo/extension/bar.o -L/opt/python/python-3.11/lib64 -o build/lib.linux-x86_64-cpython-311/foo/extension.cpython-311-x86_64-linux-gnu.so

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs TriageIssues that need to be evaluated for severity and status.bug

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions