containerbuildsystem / cachi2

Cachi2 is a CLI tool that pre-fetches your project's dependencies to aid in making your build process network-isolated.
GNU General Public License v3.0
7 stars 25 forks source link

default pip-compile environment (3.9) fails to process our pyproject.toml #539

Open eskultety opened 5 months ago

eskultety commented 5 months ago

Under some circumstances running the pip-compile make target (Python 3.9) pip-compile fails to process the requirements because setuptools-scm mysteriously chokes on figuring out the project version in git based on commit timestamps in ISO format which old (Python < 3.11) [1] wasn't able to process. The word "mysteriously" was used as this issue isn't 100% reproducible, so it actually passes at times and sometimes fails.

There isn't much help here other than running pip-compile on >Python 3.9 or moving off of setuptools.

$ pip-compile -v --allow-unsafe --generate-hashes --output-file=requirements.txt pyproject.toml
Using pip-tools configuration defaults found in 'pyproject.toml'.
Creating isolated environment: venv+pip...
Installing packages in isolated environment:
- setuptools
- setuptools-scm
Getting build dependencies for wheel...
Traceback (most recent call last):
  File "cachi2.git/venv39/lib64/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in <module>
    main()
  File "cachi2.git/venv39/lib64/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 357, in main
    json_out["return_val"] = hook(**hook_input["kwargs"])
  File "cachi2.git/venv39/lib64/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 134, in get_requires_for_build_wheel
    return hook(config_settings)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/build_meta.py", line 325, in get_requires_for_build_wheel
    return self._get_build_requires(config_settings, requirements=['wheel'])
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires
    self.run_setup()
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/build_meta.py", line 311, in run_setup
    exec(code, locals())
  File "<string>", line 1, in <module>
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/__init__.py", line 104, in setup
    return distutils.core.setup(**attrs)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/_distutils/core.py", line 146, in setup
    _setup_distribution = dist = klass(attrs)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/dist.py", line 307, in __init__
    _Distribution.__init__(self, dist_attrs)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/_distutils/dist.py", line 284, in __init__
    self.finalize_options()
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools/dist.py", line 658, in finalize_options
    ep(self)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_integration/setuptools.py", line 121, in infer_version
    _assign_version(dist, config)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_integration/setuptools.py", line 53, in _assign_version
    maybe_version = _get_version(config, force_write_version_files=True)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_get_version_impl.py", line 93, in _get_version
    parsed_version = parse_version(config)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_get_version_impl.py", line 56, in parse_version
    or parse_scm_version(config)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_get_version_impl.py", line 35, in parse_scm_version
    return _entrypoints.version_from_entrypoint(
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_entrypoints.py", line 55, in version_from_entrypoint
    maybe_version: version.ScmVersion | None = fn(root, config=config)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/git.py", line 211, in parse
    return _git_parse_inner(
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/git.py", line 272, in _git_parse_inner
    node_date = wd.get_head_date() or datetime.now(timezone.utc).date()
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/git.py", line 131, in get_head_date
    return res.parse_success(
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/_run_cmd.py", line 77, in parse_success
    return parse(self.stdout)
  File "/tmp/build-env-lf7col77/lib64/python3.9/site-packages/setuptools_scm/git.py", line 121, in parse_timestamp
    return datetime.fromisoformat(timestamp_text).date()
ValueError: Invalid isoformat string: '2024-05-06T12:31:54Z'
Backend subprocess exited when trying to invoke get_requires_for_build_wheel
Failed to parse cachi2.git/pyproject.toml

[1] https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat

Changed in version 3.11: Previously, this method only supported formats that could be emitted by date.isoformat() or datetime.isoformat().