pip: With `--use-pep517`, file:/// and tar.gz sdists support `setup.cfg` only source trees, but implicit file paths do not
Description
Interestingly, while testing this I noticed that, assuming ./pkgdir contains setup.cfg but no setup.py:
pip install file://$PWD/pkgdir works, but pip install ./pkgdir complains that Neither 'setup.py' nor 'pyproject.toml' found..
The “fix” for that would be easy (in is_installable_dir()), but I’m not sure how far these ripples will go…
_Originally posted by @sbidoul in https://github.com/pypa/pip/issues/9945#issuecomment-835770102_
Expected behavior
$ echo '[metadata]\nname=foo' > setup.cfg && pip install --use-pep517 file:///$(pwd)
ERROR: Directory '.' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.
pip version
pip 21.2.4 from /home/graingert/.virtualenvs/testing39/lib/python3.9/site-packages/pip (python 3.9)
Python version
Python 3.9.7
OS
Ubuntu 20.04.3 LTS
How to Reproduce
$ echo '[metadata]\nname=foo' > setup.cfg && pip install --use-pep517 file:///$(pwd)
Processing //home/graingert/projects/foo
  DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.
   pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: foo
  Building wheel for foo (PEP 517) ... done
  Created wheel for foo: filename=foo-0.0.0-py3-none-any.whl size=933 sha256=b0ec4bd32d639456067a52c0297824efbc46d9a1f7b3894c63106ed25c9168fa
  Stored in directory: /tmp/pip-ephem-wheel-cache-qxna4rsa/wheels/4c/98/64/53a57a6326621aeffd6d95082ac196bdb3e2a8459e121fa09a
Successfully built foo
Installing collected packages: foo
  Attempting uninstall: foo
    Found existing installation: foo 0.0.0
    Uninstalling foo-0.0.0:
      Successfully uninstalled foo-0.0.0
Successfully installed foo-0.0.0
Output
No response
Code of Conduct
- I agree to follow the PSF Code of Conduct.
 
About this issue
- Original URL
 - State: closed
 - Created 3 years ago
 - Comments: 42 (42 by maintainers)
 
Commits related to this issue
- Bump pip from 21.3 to 21.3.1 (PR #3370) Bumps [pip](https://github.com/pypa/pip) from 21.3 to 21.3.1. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/pip/b... — committed to inmanta/inmanta-core by dependabot[bot] 3 years ago
 - Bump pip from 21.3 to 21.3.1 in /.github/workflows (#67) Bumps [pip](https://github.com/pypa/pip) from 21.3 to 21.3.1. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://gith... — committed to andrewbolster/bolster by dependabot[bot] 3 years ago
 - Bump pip from 21.0.1 to 21.3.1 (PR #3429) Bumps [pip](https://github.com/pypa/pip) from 21.0.1 to 21.3.1. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/p... — committed to inmanta/inmanta-core by dependabot[bot] 3 years ago
 
Does it? [^1]
[^1]: Ooh, yes it does[^2]! [^2]: I’m quite attached to my autohotkey macro for “superscript 1”, but having proper support is good[^3] [^3]: Unfortunately, it looks like Discourse doesn’t support footnotes, so I may stick with doing them manually for consistency.
OK, enough silliness for today 🙂
This is not generic to all backends having “decent error handling” - it’s specific to setuptools, because only setuptools is invoked implicitly. I think we’re struggling to stay on top of when or not to invoke the legacy setuptools backend. There’s at least six different variables to consider and all of their combinations: has
setup.py, haspyproject.toml, hasbuild-table, hasrequires, hasbuild-backend, and--[no-]use-pep517. Something has to give - either we invoke setuptools implicitly in fewer situations, or if we can remove the first variable, by delegating thesetup.pyexistence check to thesetuptoolslegacy backend, then we should probably do that.I just tested with the pip
mainbranch. It might have been fixed as part of https://github.com/pypa/pip/pull/8212