build: Isolated build fails with generic `StopIteration` when pip is not provisioned in venv
Thank you for providing feedback on Python packaging!
To help us help you, please fill out as much of the following as you can. If a question is not relevant, feel free to skip it.
- What is your operating system and version?
CentOS 7.6.1810
- What is your Python version?
Python 3.6.5
- What version of pip do you have?
pip-21.0.1
- If following an online tutorial or guide, please provide a link to the page or section giving you trouble:
https://packaging.python.org/tutorials/packaging-projects/
- Could you describe your issue in as much detail as possible?
Created a sample-project according to the tutorial.
Set up a virtual environment, upgraded pip to the latest and installed build-0.3.1.post1
Ran python -m build --sdist --wheel to create both a wheel and an sdist, and then encountered this:
Traceback (most recent call last):
File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/__main__.py", line 214, in <module>
main(sys.argv[1:], 'python -m build')
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/__main__.py", line 206, in main
build_package(args.srcdir, outdir, distributions, config_settings, not args.no_isolation, args.skip_dependencies)
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/__main__.py", line 94, in build_package
_build_in_isolated_env(builder, outdir, distributions, config_settings)
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/__main__.py", line 52, in _build_in_isolated_env
with IsolatedEnvBuilder() as env:
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/env.py", line 91, in __enter__
executable, scripts_dir = _create_isolated_env_venv(self._path)
File "/home/dominikglenz/.virtualenvs/tmp-5bea59413b8ffc04/lib/python3.6/site-packages/build/env.py", line 203, in _create_isolated_env_venv
pip_distribution = next(iter(metadata.distributions(name='pip', path=[purelib])))
StopIteration
It looks like build did not add pip to the /tmp/build-env-*/ site-packages.
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 2
- Comments: 34 (18 by maintainers)
Commits related to this issue
- Add 'virtualenv' extra to build. Ref pypa/build#266. — committed to jaraco/jaraco.packaging by jaraco 2 years ago
- Update python-jaraco.packaging to version 9.1.1 / rev 7 via SR 1032671 https://build.opensuse.org/request/show/1032671 by user mcalabkova + dimstar_suse - Update to v9.1.1 * Change requirement to b... — committed to bmwiedemann/openSUSE by deleted user 2 years ago
I just hit this issue as well. I’m a developer for the Spack package manager. Spack installs each package into a separate installation prefix, so we rely on things like
PYTHONPATHfor packages to find their dependencies. Even if I installbuild[virtualenv], that doesn’t seem to solve the problem.P.S. If
pipis a run-time dependency, shouldn’t it be listed insetup.cfgunderinstall_requires?P.P.S. This wouldn’t be an issue if build vendored its dependencies like pip/setuptools/flit/poetry/etc.
Thanks for the detailed diagnosis @layday. I think you’re right, this is not an issue of how Python was built, but whether or not pip is present in
PYTHONPATH. I tried building 3 combinations of--with-ensurepip={no,install,update}and all 3 caused the above issue when pip was inPYTHONPATH, but all 3 worked when pip was not inPYTHONPATH.I’ll see if I can extract a minimal patch from https://github.com/pypa/build/commit/38099ad07636311d5ca8e810baf12b952b8f2568 and add it to our
buildrecipe.I don’t have Spack, but here’s a simple repro using Nix, which manipulates the Python path in the same way:
Looks like CentOS patches the
venvmodule then 😕You can install
buildwith thevirtualenvextra,build[virtualenv], which should fix this. We should makevirrtualenva hard requirement on CentOS though.