[feat] Use pip install --editable in easy_install.develop
Instead of running python setup.py develop directly. This will allow using zc.buildout.easy_install.develop on recent projects that have only a pyproject.toml. It also fixes develop leaving build artifacts in the source directory that caused later runs to do nothing, e.g. preventing develop-eggs to be rebuilt when a build dependency passed in setup-eggs option of zc.recipe.egg:develop changed. A verbosity parameter to tune verbosity of pip is added, with adjusted values for the case of buildout:develop and of zc.recipe.egg:develop, so as to remain close to the previous behavior with regards to logs. Technical details: For packages using PEP-660-style editable installs, supported by more recent versions of pip, pip will not delegate to `setup.py develop` - enabling editable installs for pure pyproject.toml projects - and will instead generate a .dist-info metadata folder but not a .egg-link. Since buildout currently requires a .egg-link, as it does not support PEP 660's mechanism that relies on having a sites-packages directory, we need to create this .egg-link after the fact. The tricky part is finding out where the .egg-link should point. For this we make use of importlib to extract info from the PEP-660-style install. Support namespace packages where `spec.submodule_search_locations` is a `_NamespacePath` object instead of a simple `list` and also support cases where the layout of the source project does not follow the same structure as the package tree - meaning some custom magic might be involved in making editable imports work as intended. Allow for entries in top_level.txt that are not actually packages, i.e. where importlib.util.find_spec().submodule_search_locations is None. A test is added for this case.
Showing
This diff is collapsed.
Please register or sign in to comment