pypa / pip

The Python package installer
https://pip.pypa.io/
MIT License
9.49k stars 3.01k forks source link

pip fails in GitHub action with Invalid version (image name!) #12825

Open MAKOMO opened 3 months ago

MAKOMO commented 3 months ago

Description

Not an expert on anything, but my GitHub actions stop failing with pip 24.1 and 24.1.1

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python 3.12
      uses: actions/setup-python@v5
      with:
        python-version: '3.12'
        cache: 'pip' # caching pip dependencies
    - name: Install dependencies
      run: |
        pip install -v -r src/requirements-dev.txt
        pip install -v -r src/requirements.txt

the error is reported like this:

[cut]
Using pip 24.0 from /opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip (python 3.12)
Ignoring python-snap7: markers 'python_version < "3.10"' don't match your environment
Ignoring typing-extensions: markers 'python_version < "3.8"' don't match your environment
Ignoring numpy: markers 'python_version < "3.9"' don't match your environment
Ignoring scipy: markers 'python_version < "3.9"' don't match your environment
Ignoring matplotlib: markers 'python_version < "3.9"' don't match your environment
ERROR: Exception:
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 179, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/commands/install.py", line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py", line [171](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804461097/job/27072280543#step:4:172), in resolve
    self._add_requirement_to_set(requirement_set, req)
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py", line 213, in _add_requirement_to_set
    if not install_req.match_markers(extras_requested):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 285, in match_markers
    return any(
           ^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 286, in <genexpr>
    self.markers.evaluate({"extra": extra}) for extra in extras_requested
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line 325, in evaluate
    return _evaluate_markers(self._markers, current_environment)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line 225, in _evaluate_markers
    groups[-1].append(_eval_op(lhs_value, op, rhs_value))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line [183](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804461097/job/27072280543#step:4:184), in _eval_op
    return spec.contains(lhs, prereleases=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py", line 552, in contains
    normalized_item = _coerce_version(item)
                      ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py", line 28, in _coerce_version
    version = Version(version)
              ^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/version.py", line 202, in __init__
    raise InvalidVersion(f"Invalid version: '{version}'")
pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure'
Error: Process completed with exit code 2.

It remains unclear which version and of which package is wrong here (not sticking to the semantic versioning rules?), so I was searching for the string '6.5.0-1022-azure' and could find that one as the image name of the VirtualMachine.

pining pip version to 24.0 before the installs resolves this:

        pip install --upgrade pip==24.0

Now it states:

Run pip install --upgrade pip==24.0 # downgrade pip as pip v24.1 fails with pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure' (image name!)
  pip install --upgrade pip==[2](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804689913/job/27072913658#step:4:2)4.0 # downgrade pip as pip v24.1 fails with pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure' (image name!)
  pip install -v -r src/requirements-dev.txt
  pip install -v -r src/requirements.txt
  shell: /usr/bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/[3](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804689913/job/27072913658#step:4:3).12.4/x64
    PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.12.[4](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804689913/job/27072913658#step:4:4)/x64/lib/pkgconfig
    Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.4/x64/lib
Collecting pip==24.0
  Downloading pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.0-py3-none-any.whl (2.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 9[5](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804689913/job/27072913658#step:4:5).5 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.1.1
    Uninstalling pip-24.1.1:
      Successfully uninstalled pip-24.1.1
Successfully installed pip-24.0

Notice:  A new release of pip is available: 24.0 -> 24.1.1
Notice:  To update, run: pip install --upgrade pip
Using pip 24.0 from /opt/hostedtoolcache/Python/3.12.4/x[6](https://github.com/artisan-roaster-scope/artisan/actions/runs/9804689913/job/27072913658#step:4:6)4/lib/python3.12/site-packages/pip (python 3.12)

reporting the issue is indeed in the "(image name!)" and those pip installs work.

Does the GitHub action image needs to stick to the Python/pip semantic versioning rules as well?

Expected behavior

ignore the image version and just sucessfuly complete

pip version

24.1.0 and 24.1.1

Python version

Python 3.12 and 3.11 (maybe independent of the Python version)

OS

Ubuntu

How to Reproduce

  1. Setup a GitHub actions along the lines above
  2. Run the action

Output

No response

Code of Conduct

JamesParrott commented 3 months ago

You've set up Python 3.12, and have then tried to install deps that are pinned to earlier versions of Python, as old as Python 3.7. Please close this issue.

    - name: Set up Python 3.12
      uses: actions/setup-python@v5
      with:
        python-version: '3.12'
        cache: 'pip' # caching pip dependencies
python-snap7: markers 'python_version < "3.10"' don't match your environment
Ignoring typing-extensions: markers 'python_version < "3.8"' don't match your environment
Ignoring numpy: markers 'python_version < "3.9"' don't match your environment
Ignoring scipy: markers 'python_version < "3.9"' don't match your environment
Ignoring matplotlib: markers 'python_version < "3.9"' 
MAKOMO commented 3 months ago

Those packages are not installed and should be ignored by pip as the conditions are not fulfilled. This requirement file is also used to make builds for platforms using older Python version. All packages that are actually installed are work fine on Python 3.12. Those messages are just warnings, right?

the relevant part of requirements.txt reads like

[cut]
python-snap7==1.3; python_version < '3.10' # last Python 3.9 release
python-snap7==1.4.1; python_version >= '3.10'
[cut]
typing-extensions==4.10.0; python_version < '3.8' # required for supporting Final and TypeDict on Python <3.8
[cut]
numpy==1.24.3; python_version < '3.9' # last Python 3.8 release
numpy==1.26.4; python_version >= '3.9' #  # v2.0.0 fails to incl. numpy.f2py
scipy==1.10.1; python_version < '3.9' # last Python 3.8 release
scipy==1.13.1; python_version >= '3.9' # v1.14.0 fails to incl. numpy.f2py (see numpy v2)
[cut]
matplotlib==3.7.3; python_version < '3.9' # last Python 3.8 release
matplotlib==3.9.0; python_version >= '3.9'
[cut]

Something is broken with pip > 24.0 as up to 24.0 those GitHub actions were running just fine.

sbidoul commented 3 months ago

From the stack trace it looks like you are using the legacy resolver, which is likely enabled in one of your requirements files.

The new error reporting for invalid requirements has not been tested with it.

I'd recommend trying with the standard resolver, and if that is not possible, stick with pip 24.0.

MAKOMO commented 3 months ago

Hm. I tried with the legacy resolver, but that did not help a thing. Here is the GitHub workflow which fails once pip is not pinned to 24.0, but using the one installed by default (v24.1) or and upgraded one (v24.1.1).

The two requirements files are

Is there a thing I can do to help investigating this one? I could remove that pip pinning again produce a full log of the action if that helps.

sbidoul commented 3 months ago

The error you get with the standard resolver may give a clue. Feel free to post it, I'll have a look.

MAKOMO commented 3 months ago

Full log of the failed run not pining pip to v24.0:

Run actions/checkout@v4
  with:
    repository: artisan-roaster-scope/artisan
    token: ***
    ssh-strict: true
    ssh-user: git
    persist-credentials: true
    clean: true
    sparse-checkout-cone-mode: true
    fetch-depth: 1
    fetch-tags: false
    show-progress: true
    lfs: false
    submodules: false
    set-safe-directory: true
Syncing repository: artisan-roaster-scope/artisan
Getting Git version info
  Working directory is '/home/runner/work/artisan/artisan'
  /usr/bin/git version
  git version [2](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:2:2).45.2
Temporarily overriding HOME='/home/runner/work/_temp/efbed[3](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:2:3)c3-2952-41dc-8937-fa4127002009' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
/usr/bin/git config --global --add safe.directory /home/runner/work/artisan/artisan
Deleting the contents of '/home/runner/work/artisan/artisan'
Initializing the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
Determining the checkout info
/usr/bin/git sparse-checkout disable
/usr/bin/git config --local --unset-all extensions.worktreeConfig
Checking out the ref
/usr/bin/git log -1 --format='%H'
'd8e[4](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:2:4)9b5e7a64c47387b0efc4c[5](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:2:5)b24b264bb03792'

Run actions/setup-python@v5
  with:
    python-version: 3.1[2](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:2)
    cache: pip
    check-latest: false
    token: ***
    update-environment: true
    allow-prereleases: false
Installed versions
  Successfully set up CPython ([3](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:3).12.4)
/opt/hostedtoolcache/Python/3.12.[4](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:4)/x64/bin/pip cache dir
/home/runner/.cache/pip
Received 0 of 423893221 (0.0%), 0.0 MBs/sec
Received 92274688 of 423893221 (21.8%), 44.0 MBs/sec
Received 230686720 of 423893221 ([5](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:5)4.4%), 73.3 MBs/sec
Received 3[6](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:6)4904448 of 423893221 (86.1%), 8[7](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:7).0 MBs/sec
Cache Size: ~404 MB (423[8](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:8)93221 B)
/usr/bin/tar -xf /home/runner/work/_temp/d[9](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:10)ac69ef-4895-481a-95f9-19d397aa5c41/cache.tzst -P -C /home/runner/work/artisan/artisan --use-compress-program unzstd
Received 423893221 of 423893221 ([10](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:11)0.0%), 80.8 MBs/sec
Cache restored successfully
Cache restored from key: setup-python-Linux-22.04-Ubuntu-python-3.12.4-pip-3[11](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:3:13)e7b6c4c80496f0a103245f9873f12a0871cccef23c8ac8a5cf2bef26d0aa8

Run pip install -r src/requirements-dev.txt
  pip install -r src/requirements-dev.txt
  pip install -r src/requirements.txt
  shell: /usr/bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/3.1[2](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:2).4/x64
    PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/[3](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:3).12.4/x64/lib/pkgconfig
    Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.[4](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:4)/x64
    Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.4/x64/lib
Collecting types-openpyxl>=3.1.2.20240601 (from -r src/requirements-dev.txt (line 1))
  Using cached types_openpyxl-3.1.[5](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:5).20240[6](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:6)30-py3-none-any.whl.metadata (1.6 kB)
Collecting types-Pillow>=10.2.0.20240520 (from -r src/requirements-dev.txt (line 2))
  Using cached types_Pillow-10.2.0.20240520-py3-none-any.whl.metadata (1.[7](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:7) kB)
Collecting types-protobuf>=5.26.0.20240422 (from -r src/requirements-dev.txt (line 3))
  Using cached types_protobuf-5.27.0.20240626-py3-none-any.whl.metadata (2.0 kB)
Collecting types-psutil>=5.9.5.20240516 (from -r src/requirements-dev.txt (line 4))
  Using cached types_psutil-6.0.0.20240621-py3-none-any.whl.metadata (1.6 kB)
Collecting types-pyserial>=3.5.0.20240527 (from -r src/requirements-dev.txt (line 5))
  Using cached types_pyserial-3.5.0.20240527-py3-none-any.whl.metadata (1.6 kB)
Collecting types-python-dateutil==2.9.0.20240316 (from -r src/requirements-dev.txt (line 6))
  Using cached types_python_dateutil-2.9.0.20240316-py3-none-any.whl.metadata (1.[8](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:8) kB)
Collecting types-pytz==2024.1.0.20240417 (from -r src/requirements-dev.txt (line 7))
  Using cached types_pytz-2024.1.0.20240417-py3-none-any.whl.metadata (1.5 kB)
Collecting types-pyyaml>=6.0.12.20240311 (from -r src/requirements-dev.txt (line 8))
  Using cached types_PyYAML-6.0.12.20240311-py3-none-any.whl.metadata (1.5 kB)
Collecting types-requests>=2.32.0.20240602 (from -r src/requirements-dev.txt (line [9](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:9)))
  Using cached types_requests-2.32.0.20240622-py3-none-any.whl.metadata (1.8 kB)
Collecting types-setuptools>=70.0.0.20240524 (from -r src/requirements-dev.txt (line [10](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:10)))
  Using cached types_setuptools-70.2.0.20240704-py3-none-any.whl.metadata (1.6 kB)
Collecting types-urllib3>=1.26.25.14 (from -r src/requirements-dev.txt (line [11](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:11)))
  Using cached types_urllib3-1.26.25.14-py3-none-any.whl.metadata (1.7 kB)
Collecting lxml-stubs>=0.5.1 (from -r src/requirements-dev.txt (line [12](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:13)))
  Using cached lxml_stubs-0.5.1-py3-none-any.whl.metadata (1.6 kB)
Collecting mypy==1.10.0 (from -r src/requirements-dev.txt (line [13](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:14)))
  Using cached mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.9 kB)
Collecting pyright==1.1.370 (from -r src/requirements-dev.txt (line [14](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:15)))
  Using cached pyright-1.1.370-py3-none-any.whl.metadata (6.2 kB)
Collecting ruff>=0.5.0 (from -r src/requirements-dev.txt (line [15](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:16)))
  Downloading ruff-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (24 kB)
Collecting pylint==3.2.5 (from -r src/requirements-dev.txt (line [16](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:17)))
  Using cached pylint-3.2.5-py3-none-any.whl.metadata (12 kB)
Collecting pre-commit>=3.7.0 (from -r src/requirements-dev.txt (line [17](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:18)))
  Using cached pre_commit-3.7.1-py2.py3-none-any.whl.metadata (1.3 kB)
Collecting pytest>=8.2.2 (from -r src/requirements-dev.txt (line [18](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:19)))
  Using cached pytest-8.2.2-py3-none-any.whl.metadata (7.6 kB)
Collecting pytest-cov==5.0.0 (from -r src/requirements-dev.txt (line [19](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:20)))
  Using cached pytest_cov-5.0.0-py3-none-any.whl.metadata (27 kB)
Collecting hypothesis>=6.103.2 (from -r src/requirements-dev.txt (line 27))
  Using cached hypothesis-6.105.0-py3-none-any.whl.metadata (6.3 kB)
Collecting coverage>=7.5.3 (from -r src/requirements-dev.txt (line 28))
  Using cached coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux[20](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:21)14_x86_64.whl.metadata (8.2 kB)
Collecting coverage-badge==1.1.1 (from -r src/requirements-dev.txt (line 29))
  Using cached coverage_badge-1.1.1-py2.py3-none-any.whl.metadata (3.4 kB)
Collecting codespell==2.3.0 (from -r src/requirements-dev.txt (line 30))
  Using cached codespell-2.3.0-py3-none-any.whl.metadata (15 kB)
Collecting async_timeout==4.0.3 (from -r src/requirements-dev.txt (line 32))
  Using cached async_timeout-4.0.3-py3-none-any.whl.metadata (4.2 kB)
Collecting cycler==0.12.1 (from -r src/requirements-dev.txt (line 33))
  Using cached cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)
Collecting typing-extensions>=4.1.0 (from mypy==1.10.0->-r src/requirements-dev.txt (line 13))
  Using cached typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting mypy-extensions>=1.0.0 (from mypy==1.10.0->-r src/requirements-dev.txt (line 13))
  Using cached mypy_extensions-1.0.0-py3-none-any.whl.metadata (1.1 kB)
Collecting nodeenv>=1.6.0 (from pyright==1.1.370->-r src/requirements-dev.txt (line 14))
  Using cached nodeenv-1.9.1-py2.py3-none-any.whl.metadata ([21](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:22) kB)
Collecting platformdirs>=2.2.0 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached platformdirs-4.2.2-py3-none-any.whl.metadata (11 kB)
Collecting astroid<=3.3.0-dev0,>=3.2.2 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached astroid-3.2.2-py3-none-any.whl.metadata (4.5 kB)
Collecting isort!=5.13.0,<6,>=4.2.5 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached isort-5.13.2-py3-none-any.whl.metadata (12 kB)
Collecting mccabe<0.8,>=0.6 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached mccabe-0.7.0-py2.py3-none-any.whl.metadata (5.0 kB)
Collecting tomlkit>=0.10.1 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached tomlkit-0.12.5-py3-none-any.whl.metadata (2.7 kB)
Collecting dill>=0.3.6 (from pylint==3.2.5->-r src/requirements-dev.txt (line 16))
  Using cached dill-0.3.8-py3-none-any.whl.metadata (10 kB)
Collecting urllib3>=2 (from types-requests>=2.32.0.20240602->-r src/requirements-dev.txt (line 9))
  Using cached urllib3-2.2.2-py3-none-any.whl.metadata (6.4 kB)
Collecting cfgv>=2.0.0 (from pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached cfgv-3.4.0-py2.py3-none-any.whl.metadata (8.5 kB)
Collecting identify>=1.0.0 (from pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached identify-2.5.36-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting pyyaml>=5.1 (from pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Collecting virtualenv>=20.10.0 (from pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached virtualenv-20.26.3-py3-none-any.whl.metadata (4.5 kB)
Collecting iniconfig (from pytest>=8.2.2->-r src/requirements-dev.txt (line 18))
  Using cached iniconfig-2.0.0-py3-none-any.whl.metadata (2.6 kB)
Collecting packaging (from pytest>=8.2.2->-r src/requirements-dev.txt (line 18))
  Using cached packaging-24.1-py3-none-any.whl.metadata (3.2 kB)
Collecting pluggy<2.0,>=1.5 (from pytest>=8.2.2->-r src/requirements-dev.txt (line 18))
  Using cached pluggy-1.5.0-py3-none-any.whl.metadata (4.8 kB)
Collecting attrs>=[22](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:23).2.0 (from hypothesis>=6.103.2->-r src/requirements-dev.txt (line 27))
  Using cached attrs-23.2.0-py3-none-any.whl.metadata (9.5 kB)
Collecting sortedcontainers<3.0.0,>=2.1.0 (from hypothesis>=6.103.2->-r src/requirements-dev.txt (line 27))
  Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)
Collecting distlib<1,>=0.3.7 (from virtualenv>=20.10.0->pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached distlib-0.3.8-py2.py3-none-any.whl.metadata (5.1 kB)
Collecting filelock<4,>=3.12.2 (from virtualenv>=20.10.0->pre-commit>=3.7.0->-r src/requirements-dev.txt (line 17))
  Using cached filelock-3.15.4-py3-none-any.whl.metadata (2.9 kB)
Using cached types_python_dateutil-2.9.0.20240316-py3-none-any.whl (9.7 kB)
Using cached types_pytz-2024.1.0.20240417-py3-none-any.whl (5.2 kB)
Using cached mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.6 MB)
Using cached pyright-1.1.370-py3-none-any.whl (18 kB)
Using cached pylint-3.2.5-py3-none-any.whl (519 kB)
Using cached pytest_cov-5.0.0-py3-none-any.whl (21 kB)
Using cached coverage_badge-1.1.1-py2.py3-none-any.whl (6.5 kB)
Using cached codespell-2.3.0-py3-none-any.whl (329 kB)
Using cached async_timeout-4.0.3-py3-none-any.whl (5.7 kB)
Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)
Using cached types_openpyxl-3.1.5.20240630-py3-none-any.whl (161 kB)
Using cached types_Pillow-10.2.0.20240520-py3-none-any.whl (54 kB)
Using cached types_protobuf-5.27.0.20240626-py3-none-any.whl (68 kB)
Using cached types_psutil-6.0.0.20240621-py3-none-any.whl (18 kB)
Using cached types_pyserial-3.5.0.20240527-py3-none-any.whl (20 kB)
Using cached types_PyYAML-6.0.12.20240311-py3-none-any.whl (15 kB)
Using cached types_requests-2.32.0.20240622-py3-none-any.whl (15 kB)
Using cached types_setuptools-70.2.0.20240704-py3-none-any.whl (63 kB)
Using cached types_urllib3-1.26.25.14-py3-none-any.whl (15 kB)
Using cached lxml_stubs-0.5.1-py3-none-any.whl (13 kB)
Downloading ruff-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.1/10.1 MB 110.8 MB/s eta 0:00:00
Using cached pre_commit-3.7.1-py2.py3-none-any.whl (204 kB)
Using cached pytest-8.2.2-py3-none-any.whl (339 kB)
Using cached hypothesis-6.105.0-py3-none-any.whl (462 kB)
Using cached coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl ([23](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:24)7 kB)
Using cached astroid-3.2.2-py3-none-any.whl (276 kB)
Using cached attrs-23.2.0-py3-none-any.whl (60 kB)
Using cached cfgv-3.4.0-py2.py3-none-any.whl (7.2 kB)
Using cached dill-0.3.8-py3-none-any.whl (116 kB)
Using cached identify-2.5.36-py2.py3-none-any.whl (98 kB)
Using cached isort-5.13.2-py3-none-any.whl (92 kB)
Using cached mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)
Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Using cached nodeenv-1.9.1-py2.py3-none-any.whl (22 kB)
Using cached platformdirs-4.2.2-py3-none-any.whl (18 kB)
Using cached pluggy-1.5.0-py3-none-any.whl (20 kB)
Using cached PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7[24](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:25) kB)
Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Using cached tomlkit-0.12.5-py3-none-any.whl (37 kB)
Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Using cached urllib3-2.2.2-py3-none-any.whl (121 kB)
Using cached virtualenv-20.26.3-py3-none-any.whl (5.7 MB)
Using cached iniconfig-2.0.0-py3-none-any.whl (5.9 kB)
Using cached packaging-24.1-py3-none-any.whl (53 kB)
Using cached distlib-0.3.8-py2.py3-none-any.whl (468 kB)
Using cached filelock-3.15.4-py3-none-any.whl (16 kB)
Installing collected packages: types-urllib3, sortedcontainers, lxml-stubs, distlib, urllib3, typing-extensions, types-setuptools, types-pyyaml, types-pytz, types-python-dateutil, types-pyserial, types-psutil, types-protobuf, types-Pillow, types-openpyxl, tomlkit, ruff, pyyaml, pluggy, platformdirs, packaging, nodeenv, mypy-extensions, mccabe, isort, iniconfig, identify, filelock, dill, cycler, coverage, codespell, cfgv, attrs, async_timeout, astroid, virtualenv, types-requests, pytest, pyright, pylint, mypy, hypothesis, coverage-badge, pytest-cov, pre-commit
Successfully installed astroid-3.2.2 async_timeout-4.0.3 attrs-23.2.0 cfgv-3.4.0 codespell-2.3.0 coverage-7.5.4 coverage-badge-1.1.1 cycler-0.12.1 dill-0.3.8 distlib-0.3.8 filelock-3.15.4 hypothesis-6.105.0 identify-2.5.36 iniconfig-2.0.0 isort-5.13.2 lxml-stubs-0.5.1 mccabe-0.7.0 mypy-1.10.0 mypy-extensions-1.0.0 nodeenv-1.9.1 packaging-24.1 platformdirs-4.2.2 pluggy-1.5.0 pre-commit-3.7.1 pylint-3.2.5 pyright-1.1.370 pytest-8.2.2 pytest-cov-5.0.0 pyyaml-6.0.1 ruff-0.5.1 sortedcontainers-2.4.0 tomlkit-0.12.5 types-Pillow-10.2.0.20240520 types-openpyxl-3.1.5.20240630 types-protobuf-5.27.0.20240626 types-psutil-6.0.0.20240621 types-pyserial-3.5.0.20240527 types-python-dateutil-2.9.0.20240316 types-pytz-2024.1.0.20240417 types-pyyaml-6.0.12.20240311 types-requests-2.32.0.20240622 types-setuptools-70.2.0.20240704 types-urllib3-1.26.[25](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:26).14 typing-extensions-4.12.2 urllib3-2.2.2 virtualenv-20.26.3
Ignoring python-snap7: markers 'python_version < "3.10"' don't match your environment
Ignoring typing-extensions: markers 'python_version < "3.8"' don't match your environment
Ignoring numpy: markers 'python_version < "3.9"' don't match your environment
Ignoring scipy: markers 'python_version < "3.9"' don't match your environment
Ignoring matplotlib: markers 'python_version < "3.9"' don't match your environment
ERROR: Exception:
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 179, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/commands/install.py", line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 76, in resolve
    collected = self.factory.collect_root_requirements(root_reqs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 538, in collect_root_requirements
    reqs = list(
           ^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 478, in _make_requirements_from_install_req
    if not ireq.match_markers(requested_extras):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line [28](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:29)5, in match_markers
    return any(
           ^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 286, in <genexpr>
    self.markers.evaluate({"extra": extra}) for extra in extras_requested
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line [32](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812640653/job/27097104321#step:4:33)5, in evaluate
    return _evaluate_markers(self._markers, current_environment)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line 225, in _evaluate_markers
    groups[-1].append(_eval_op(lhs_value, op, rhs_value))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py", line 183, in _eval_op
    return spec.contains(lhs, prereleases=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py", line 552, in contains
    normalized_item = _coerce_version(item)
                      ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py", line 28, in _coerce_version
    version = Version(version)
              ^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/pip/_vendor/packaging/version.py", line 202, in __init__
    raise InvalidVersion(f"Invalid version: '{version}'")
pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure'
Error: Process completed with exit code 2.
0s
MAKOMO commented 3 months ago

Adding the pin back I get (still running)

Run pip install --upgrade pip==24.0 # downgrade pip as pip v24.1 fails with pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure' (image name!)
  pip install --upgrade pip==[2](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:2)4.0 # downgrade pip as pip v24.1 fails with pip._vendor.packaging.version.InvalidVersion: Invalid version: '6.5.0-1022-azure' (image name!)
  pip install -r src/requirements-dev.txt
  pip install -r src/requirements.txt
  shell: /usr/bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/[3](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:3).12.4/x64
    PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.12.[4](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:4)/x64/lib/pkgconfig
    Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.4/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.4/x64/lib
Collecting pip==24.0
  Using cached pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Using cached pip-24.0-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.1.1
    Uninstalling pip-24.1.1:
      Successfully uninstalled pip-24.1.1
Successfully installed pip-24.0

Notice:  A new release of pip is available: 24.0 -> 24.1.1
Notice:  To update, run: pip install --upgrade pip
Collecting types-openpyxl>=3.1.2.20240601 (from -r src/requirements-dev.txt (line 1))
  Using cached types_openpyxl-3.1.[5](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:5).20240630-py3-none-any.whl.metadata (1.[6](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:6) kB)
Collecting types-Pillow>=10.2.0.20240520 (from -r src/requirements-dev.txt (line 2))
  Using cached types_Pillow-10.2.0.20240520-py3-none-any.whl.metadata (1.[7](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:7) kB)
Collecting types-protobuf>=5.26.0.20240422 (from -r src/requirements-dev.txt (line 3))
  Using cached types_protobuf-5.27.0.20240626-py3-none-any.whl.metadata (2.0 kB)
Collecting types-psutil>=5.9.5.20240516 (from -r src/requirements-dev.txt (line 4))
  Using cached types_psutil-6.0.0.20240621-py3-none-any.whl.metadata (1.6 kB)
Collecting types-pyserial>=3.5.0.20240527 (from -r src/requirements-dev.txt (line 5))
  Using cached types_pyserial-3.5.0.20240527-py3-none-any.whl.metadata (1.6 kB)
Collecting types-python-dateutil==2.9.0.20240316 (from -r src/requirements-dev.txt (line 6))
  Using cached types_python_dateutil-2.9.0.20240316-py3-none-any.whl.metadata (1.[8](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:8) kB)
Collecting types-pytz==2024.1.0.20240417 (from -r src/requirements-dev.txt (line 7))
  Using cached types_pytz-2024.1.0.20240417-py3-none-any.whl.metadata (1.5 kB)
Collecting types-pyyaml>=6.0.12.20240311 (from -r src/requirements-dev.txt (line 8))
  Using cached types_PyYAML-6.0.12.20240311-py3-none-any.whl.metadata (1.5 kB)
Collecting types-requests>=2.32.0.20240602 (from -r src/requirements-dev.txt (line [9](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:9)))
  Using cached types_requests-2.32.0.20240622-py3-none-any.whl.metadata (1.8 kB)
Collecting types-setuptools>=70.0.0.20240524 (from -r src/requirements-dev.txt (line [10](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:10)))
  Using cached types_setuptools-70.2.0.20240704-py3-none-any.whl.metadata (1.6 kB)
Collecting types-urllib3>=1.26.25.14 (from -r src/requirements-dev.txt (line [11](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:11)))
  Using cached types_urllib3-1.26.25.14-py3-none-any.whl.metadata (1.7 kB)
Collecting lxml-stubs>=0.5.1 (from -r src/requirements-dev.txt (line [12](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:12)))
  Using cached lxml_stubs-0.5.1-py3-none-any.whl.metadata (1.6 kB)
Collecting mypy==1.10.0 (from -r src/requirements-dev.txt (line [13](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:14)))
Using cached MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux20[14](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:15)_x86_64.whl (28 kB)
Using cached multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (130 kB)
Using cached pyinstaller_hooks_contrib-2024.7-py2.py3-none-any.whl (341 kB)
Using cached pyparsing-3.1.2-py3-none-any.whl (103 kB)
Using cached PyQt6_Qt6-6.7.2-py3-none-manylinux_2_28_x86_64.whl (74.3 MB)
Using cached PyQt6_sip-13.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl (319 kB)
Using cached PyQt6_WebEngine_Qt6-6.7.2-py3-none-manylinux_2_28_x86_64.whl (26.1 MB)
Using cached PyQt6_WebEngineSubwheel_Qt6-6.7.2-py3-none-manylinux_2_28_x86_64.whl (76.1 MB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Using cached qt6_applications-6.5.0.2.3-py3-none-manylinux_2_17_x86_64.whl (89.0 MB)
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Using cached yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)
Using cached altgraph-0.17.4-py2.py3-none-any.whl (21 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Using cached et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
Using cached jaraco.classes-3.4.0-py3-none-any.whl (6.8 kB)
Using cached jaraco.context-5.3.0-py3-none-any.whl (6.5 kB)
Using cached jaraco.functools-4.0.1-py3-none-any.whl (9.8 kB)
Using cached pypng-0.202207[15](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:16).0-py3-none-any.whl (58 kB)
Using cached wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Using cached cffi-1.[16](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:17).0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (477 kB)
Using cached more_itertools-10.3.0-py3-none-any.whl (59 kB)
Using cached pycparser-2.22-py3-none-any.whl (1[17](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:18) kB)
Installing collected packages: wcwidth, pyserial, PyQt6-WebEngineSubwheel-Qt6, PyQt6-Qt6, pypng, Phidget22, persist-queue, arabic-reshaper, altgraph, yoctopuce, xlrd, wheel, websockets, Unidecode, six, setuptools, qt6-applications, qrcode, pyusb, python-snap7, PyQt6-WebEngine-Qt6, PyQt6-sip, pyparsing, pymodbus, pydantic-core, pycparser, psutil, protobuf, prettytable, portalocker, pillow, numpy, multidict, more-itertools, MarkupSafe, lxml, kiwisolver, jeepney, jaraco.context, idna, frozenlist, fonttools, et-xmlfile, distro, click, charset-normalizer, certifi, babel, annotated-types, yarl, wquantiles, scipy, requests, qt6-tools, python-dateutil, python-bidi, PyQt6, pyinstaller-hooks-contrib, pydantic, openpyxl, jinja2, jaraco.functools, jaraco.classes, contourpy, colorspacious, cffi, aiosignal, requests-file, PyQt6-WebEngine, pyinstaller, matplotlib, cryptography, aiohttp, SecretStorage, aiohttp_jinja2, keyring
Successfully installed MarkupSafe-2.1.5 Phidget22-1.19.20240513 PyQt6-6.7.0 PyQt6-Qt6-6.7.2 PyQt6-WebEngine-6.7.0 PyQt6-WebEngine-Qt6-6.7.2 PyQt6-WebEngineSubwheel-Qt6-6.7.2 PyQt6-sip-13.6.0 SecretStorage-3.3.3 Unidecode-1.3.8 aiohttp-3.9.5 aiohttp_jinja2-1.6 aiosignal-1.3.1 altgraph-0.17.4 annotated-types-0.7.0 arabic-reshaper-3.0.0 babel-2.15.0 certifi-2024.7.4 cffi-1.16.0 charset-normalizer-3.3.2 click-8.1.7 colorspacious-1.1.2 contourpy-1.2.1 cryptography-42.0.8 distro-1.9.0 et-xmlfile-1.1.0 fonttools-4.53.1 frozenlist-1.4.1 idna-3.7 jaraco.classes-3.4.0 jaraco.context-5.3.0 jaraco.functools-4.0.1 jeepney-0.8.0 jinja2-3.1.4 keyring-25.2.1 kiwisolver-1.4.5 lxml-5.2.2 matplotlib-3.9.0 more-itertools-10.3.0 multidict-6.0.5 numpy-1.26.4 openpyxl-3.1.5 persist-queue-0.8.1 pillow-10.4.0 portalocker-2.10.0 prettytable-3.10.0 protobuf-5.27.1 psutil-6.0.0 pycparser-2.22 pydantic-2.7.4 pydantic-core-2.[18](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:19).4 pyinstaller-6.8.0 pyinstaller-hooks-contrib-2024.7 pymodbus-3.6.9 pyparsing-3.1.2 pypng-0.[20](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:21)220715.0 pyserial-3.5 python-bidi-0.4.2 python-dateutil-2.9.0.post0 python-snap7-1.4.1 pyusb-1.2.1 qrcode-7.4.2 qt6-applications-6.5.0.2.3 qt6-tools-6.5.0.1.3 requests-2.32.3 requests-file-2.1.0 scipy-1.13.1 setuptools-70.2.0 six-1.16.0 wcwidth-0.2.13 websockets-12.0 wheel-0.43.0 wquantiles-0.6 xlrd-2.0.1 yarl-1.9.4 yoctopuce-2.0.61305

Notice:  A new release of pip is available: [24](https://github.com/artisan-roaster-scope/artisan/actions/runs/9812697684/job/27097267815#step:4:25).0 -> 24.1.1
Notice:  To update, run: pip install --upgrade pip
sbidoul commented 3 months ago

Ah. This looks like https://github.com/pypa/packaging/issues/774.

JamesParrott commented 3 months ago

Ah yes Marko you're right - I apologise. The deps are all well pinned, so the resolver shouldn't have to do too much. I ran pip install --dry-run locally and couldn't spot any problems, and the mind boggles as to where the image tag has come from in that f-string. I've reproduced it minimally, and it's just as you say:

https://github.com/JamesParrott/artisan-roaster-bug/actions/runs/9813073537

MAKOMO commented 3 months ago

Ah. This looks like pypa/packaging#774.

Upps. This one is open since Jan. Hm.

sbidoul commented 3 months ago

Yep, we need an upstream fix. In pip we can improve the error handling, though.

MAKOMO commented 3 months ago

Is there a way for me to find out wihch package is causing the troubles. Maybe I can convince the author make some adjustments...

sbidoul commented 3 months ago

@MAKOMO can you try with #12829 with pip install git+https://github.com/pypa/pip@refs/pull/12829/head

MAKOMO commented 3 months ago

Now I get the following and my action runs as expected. Very good work! The problematic package is yoctopuce and I have already a good connection to them. I will inform them on the issue and try to convince them to improve on this.

Hope your change will make it into the next pip release!

Thanks a lot for your support, Marko

https://github.com/artisan-roaster-scope/artisan/actions/runs/9821072883

Ignoring python-snap7: markers 'python_version < "3.10"' don't match your environment
Ignoring typing-extensions: markers 'python_version < "3.8"' don't match your environment
Ignoring numpy: markers 'python_version < "3.9"' don't match your environment
Ignoring scipy: markers 'python_version < "3.9"' don't match your environment
Ignoring matplotlib: markers 'python_version < "3.9"' don't match your environment
Ignoring yoctopuce: markers 'sys_platform == "darwin" and platform_release < "20.0"' don't match your environment due to a version parsing error (Invalid version: '6.5.0-1022-azure'). https://github.com/pypa/packaging/issues/774
Ignoring yoctopuce: markers 'sys_platform != "darwin" or (sys_platform == "darwin" and platform_release >= "20.0")' don't match your environment due to a version parsing error (Invalid version: '6.5.0-1022-azure'). https://github.com/pypa/packaging/issues/774
MAKOMO commented 3 months ago

Well, actually the run is not completing as not all imports succeed. So I pin back to pip 24.0 and hope for an updated yoctopuce package.

ichard26 commented 3 months ago

For what it's worth, AFAIU, this isn't a problem with the packages and it's not something they should need to work around either. The root problem seems to be that packaging.markers.Marker is inconsistent when it falls back to Python string comparison semantics. It falls back correctly when the right side is already invalid (and has no PEP 440 defined semantics), but it does not when the right side is a valid specifier (and the left side is an invalid version).

>>> m = Marker('platform_release >= "20.0-INVALID"')
>>> m.evaluate({'platform_release': '6.7.0-gentoo'})
True
>>> m = Marker('platform_release >= "20.0"')
>>> m.evaluate({'platform_release': '6.7.0-gentoo'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ichard26/dev/oss/packaging/src/packaging/markers.py", line 325, in evaluate
    return _evaluate_markers(self._markers, current_environment)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ichard26/dev/oss/packaging/src/packaging/markers.py", line 225, in _evaluate_markers
    groups[-1].append(_eval_op(lhs_value, op, rhs_value))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ichard26/dev/oss/packaging/src/packaging/markers.py", line 183, in _eval_op
    return spec.contains(lhs, prereleases=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ichard26/dev/oss/packaging/src/packaging/specifiers.py", line 552, in contains
    normalized_item = _coerce_version(item)
                      ^^^^^^^^^^^^^^^^^^^^^
  File "/home/ichard26/dev/oss/packaging/src/packaging/specifiers.py", line 28, in _coerce_version
    version = Version(version)
              ^^^^^^^^^^^^^^^^
  File "/home/ichard26/dev/oss/packaging/src/packaging/version.py", line 202, in __init__
    raise InvalidVersion(f"Invalid version: '{version}'")
packaging.version.InvalidVersion: Invalid version: '6.7.0-gentoo'

Due to how markers are commonly written, the left side is typically derived from the currently running environment, not the package. While a package could work around this bug by declaring an invalid version specifier, that seems unideal...

I've filed https://github.com/pypa/packaging/pull/816 in the hopes of fixing this upstream.