I am using setuptools with pyproject.toml and setuptools_scm. I think setuptools is not working correctly, but functionality has changed so much and the documentation doesn't seem to explain the problem I'm having, so I'm kind of lost here. I want to be able to run pip install <path to my package root>
and have the my bash script copied into the installed path, here .local/lib/pythonversion/site-packages/duck/
. The duck
package structure is:
duck/
pyproject.toml
README.md
setup.cfg
setup.py
duck/
__init__.py
duck (shell script)
quack/
...
flap/
...
From the duck
root directory, I run pip install .
and I see from the duck.egg-info that setuptools_scm
is listing my "duck" bash script.
After the install completes, the duck
script is not in .local/lib/python3.8/duck/
.
I've tried explicitly listing the file using MANIFEST.in
but that has no effect, apparently.
My pyproject.toml
is very simple:
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>6.2"]
build-backend = "setuptools.build_meta"
[tools.setuptools_scm]
My setup.cfg
is also simple:
[metadata]
name = duck
description = A very quacky package
[options]
install_requires=
pandas>=1.4
...
Finally, I do have setup.py
so that I can specify setuptools:
from setuptools import setup
setup(use_scm_version=True)
What I have tried
- Created a MANIFEST.in and explicitly included
duck
the bash script - Using [package_data] directive to specify the files
- Using [data_files] directive
- I also thought that using [project.scripts] would be a good idea, but that is specifically designed for Python entrypoints.
According to the documentation it suffices to specify [tool.setuptools]
in your pyproject.toml
when you're using a VCS, and (I quote) [...] will be automatically installed with your package. I know the context is a little bit vague, but what I infer from reading the documentation is that my .toml file is sufficient to install all these git tracked files.
I can start from scratch and put all this functionality into my setup.py
, but this seems (to me) like a very simple use case that setuptools not getting right.
I am hoping there is something small and/or obvious that I am either doing wrong or can change to fix this. Failing that, I will write the full setup.py
.