• Xavier Thompson's avatar
    [feat] Use pip install --editable in easy_install.develop · 64f61417
    Xavier Thompson authored
    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.
    64f61417
easy_install.txt 50.7 KB