1. 01 Oct, 2024 14 commits
    • Xavier Thompson's avatar
      923b2748
    • Xavier Thompson's avatar
      478dc6b0
    • Xavier Thompson's avatar
      [fix] zc.recipe.egg: Fix tests for Python >= 3.10 · 5806a711
      Xavier Thompson authored
      Fix output renormalisation when the Python version string contains more
      than one digit in the minor version number, i.e for Python >= 3.10.
      5806a711
    • Xavier Thompson's avatar
      [fix] zc.recipe.egg: Reinstall missing develop egg metadata · 12135bb5
      Xavier Thompson authored
      Let zc.recipe.egg:develop reinstall if .egg-info or .dist-info is
      missing from the folder referenced by .egg-link.
      12135bb5
    • Xavier Thompson's avatar
      [feat] Let recipe.update access installed paths · c478db33
      Xavier Thompson authored
      Store a part's installed paths in `self[part].installed_files` before
      calling `recipe.update()`, to allow the part's recipe to read them if
      needed by looking up `options.installed_files`.
      
      Delete this attribute just after the call to ensure this data remains
      private to the part.
      
      This will allow zc.recipe.egg:develop to remember in `update()` which
      .egg-link it installed in `install()`; inferring this would otherwise
      require essentially reinstalling the egg from the setup path, as that
      is all the recipe gets as input.
      
      Storing this under `__buildout_installed__` in the part's options was
      considered, but some recipes take all the recorded key/value pairs as
      input, so it would be a breaking change.
      c478db33
    • Xavier Thompson's avatar
      [feat] Enable build of pyproject.toml projects · 50f33af2
      Xavier Thompson authored
      Enable zc.buildout.easy_install.build, which builds a project manually
      from an unpacked sdist archive and is used by zc.recipe.egg:custom, to
      build a project which only has a pyproject.toml but no setup.py.
      50f33af2
    • Xavier Thompson's avatar
      [fix] Sign develop eggs with directory hash · 5b3a22be
      Xavier Thompson authored
      Mark .dist-info eggs installed by buildout as develop to distinguish
      them from .dist-info eggs from the system and decide how to sign the
      egg accordingly (with directory hash or with version).
      5b3a22be
    • Xavier Thompson's avatar
      [test] Fix tests after PEP 625 · 644c29e9
      Xavier Thompson authored
      Adapt tests to ignore warning generated by setuptools not finding
      zc.recipe.egg on first index lookup, because it's indexed as
      zc-recipe-egg, because since PEP 625 the sdist filename is
      zc_recipe_egg-xyz.tar.gz.
      644c29e9
    • Xavier Thompson's avatar
      [wkrd] Workaround package index after PEP 625 · 55db8537
      Xavier Thompson authored
      Since PEP 625, sdist filenames replace . and - in the project name by
      _, such as e.g. zc.buildout==3.0.1 yielding zc_buildout-3.0.1.tar.gz.
      
      However, when looking up available dists in a package index, when an
      sdist with such a normalized filename is found, setuptools interprets
      the filename by replacing _ with - and uses that as the dist's name;
      e.g. zc_buildout-3.0.1.tar.gz yields zc-buildout. This causes lookups
      for the name with . (e.g.: zc.buildout) to fail.
      
      Workaround by also looking up the name with . replaced by _, and then
      fixing the names of found dists back to expected name.
      55db8537
    • Xavier Thompson's avatar
      d64737e5
    • Xavier Thompson's avatar
      60a61ee6
    • Xavier Thompson's avatar
      [wkrd] Use pip install --editable --user · 4e97a2bc
      Xavier Thompson authored
      Prior to pip 21.1, pip install --editable --target fails because it
      results in wrong parameters being passed to setup.py develop by pip.
      
      Prior to setuptools 45.2.0, both pip install --editable --target and
      pip install --editable --prefix fail because the temporary install
      directory used internally by pip is not added to PYTHONPATH prior
      to pip calling setup.py develop. In later version setuptools emits a
      warning instead of an error.
      
      Temporarily override PYTHONUSERBASE to point to the target directory,
      so as to emulate --prefix=<dir> with PYTHONUSERBASE=<dir> and --user.
      
      Since pip's build isolation breaks python setup.py develop --user, as
      called by pip install --editable --user when the build backend of the
      project is setuptools, force --no-build-isolation in this case, even
      when allow-picked-versions is true.
      
      This is needed for Python2 because pip 21.1 and setuptools 45.2.0 are
      both Python3 only.
      4e97a2bc
    • 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
    • Xavier Thompson's avatar
      [tool] Gitignore *.dist-info · 7e9b8c93
      Xavier Thompson authored
      7e9b8c93
  2. 31 Jul, 2024 22 commits
  3. 03 Jun, 2024 2 commits
  4. 24 May, 2024 2 commits
    • Xavier Thompson's avatar
      [feat] Prevent pip installing build dependencies · 085baf94
      Xavier Thompson authored
      By default pip installs build dependencies (e.g. setuptools, poetry)
      in a temporary folder and temporarily adds it to sys.path in order
      to proceed to build the distribution. But we want all distributions
      to be installed with buildout and respect pinned versions, so we aim
      to prevent pip from installing build dependencies.
      
      Instead, we will install the build dependencies first and pass them
      explicitly to zc.recipe.egg via the setup-eggs option.
      
      This commit prevents pip from installing the build dependencies listed
      by the `build-system.requires` key in the pyproject.toml file.
      
      It may prevent pip from installing PEP 517 dynamic build dependencies
      or setuptools' setup_requires dependencies.
      See https://peps.python.org/pep-0517/#get-requires-for-build-wheel
      085baf94
    • Rafael Monnerat's avatar
      [feat] Propagate sys.path as PYTHONPATH while develop · df5da4d7
      Rafael Monnerat authored
      While invoke setup.py certain eggs (like scikit-learn) launch
      cetain custom builds (for cython) using subprocess and sys.executable.
      
      This commit aims to preserve the sys.path over the runs, even if an
      egg is using subprocess with the same python to build a component of
      the egg.
      df5da4d7