grayskull icon indicating copy to clipboard operation
grayskull copied to clipboard

[BUG] ModuleNotFoundError: No module named 'setuptools'

Open timhoffm opened this issue 1 year ago • 5 comments

Describe the bug grayskull creates by-default non-working recipe for packages that still use setuptools.

For python 3.13 setuptools is no longer a dependency of pip https://conda-forge.org/news/2024/08/21/sunsetting-pip-deps/ and needs explicit installation.

To Reproduce Noted when trying to create a conda package for types-pika-ts (grayskull pypi types-pika-ts) . The created meta.yaml contains

requirements:
  host:
    - python >=3.8
    - pip

conda build then creates a host envionment with python 3.13 and pip but without setuptools.

Expected behavior The recipe work without additional modification. I haven't looked into the internals of grayskull and therefore don't know whether it can detect if setuptools is required. If so, it should put it into the host requirements explicitly. That is necessary for python 3.13 and doesn't hurt for python versions < 3.13.

Workaround In case somebody stumbles across this as well, you can manually add setuptools to your host dependencies.

timhoffm avatar Nov 27 '24 16:11 timhoffm

In a way grayskull is doing the right thing, unless setuptools is specified in the package metadata and grayskull is missing it. While you can add it manually, ideally you should report that upstream and ask the package author to declare setutptools as its backend.

ocefpaf avatar Nov 27 '24 17:11 ocefpaf

Thanks for the answer. Upstream is https://github.com/python/typeshed. They build packages via https://github.com/typeshed-internal/stub_uploader, which currently still creates packages with setup.py only. I‘m not a build expert, but thought build backend configuration is a PEP 517 thing and only possible via pyproject.toml. Is that correct? AFAICS, the requirement to specify the build backend explicitly then means that grayskull does not support legacy setup.py-based projects anymore.

timhoffm avatar Nov 27 '24 18:11 timhoffm

It does support and I believe it checks the import. However, this project does have a pyproject.toml, and that is probably the cause of the confusion as grayskull cannot find setuptools in it.

ocefpaf avatar Nov 27 '24 19:11 ocefpaf

Thanks. Nevertheless a setuptools fallback would be reasonable if no build system is specified. This would be in line with the specification. From https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-build-system-dependencies-the-build-system-table

Tools should not require the existence of the [build-system] table. A pyproject.toml file may be used to store configuration details other than build-related data and thus lack a [build-system] table legitimately. If the file exists but is lacking the [build-system] table then the default values as specified above [i.e. setuptools] should be used.

I suspect that the setuptools assumption may have been made implicitly by the inclusion of pip so far, but now needs to be made explicitly since pip does not depend on setuptools anymore.

timhoffm avatar Nov 28 '24 05:11 timhoffm

I too have been having this problem as a new grayskull user. Might be worth making some adjustments to how this is handled.

amgcc avatar Dec 10 '24 21:12 amgcc