[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: the path containing the pyproject.toml, or a subdirectory? For this we make use of *.dist-info/top_level.txt to first determine the list of top-level packages, and then importlib to extract info from the PEP-660-style install. If top_level.txt does not exist or is empty, fallback to the path of the folder that contains the pyproject.toml as the .egg-link target. If it lists multiple packages that resolve to different import paths, arbitrarily use the first one and emit a warning. 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.
Showing
Please register or sign in to comment