Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using --complete-platform with --resolve-local-platforms should build sdists when local platform provides a subset of complete-platforms #2026

Closed
shalabhc opened this issue Jan 6, 2023 · 16 comments · Fixed by #2031

Comments

@shalabhc
Copy link
Contributor

shalabhc commented Jan 6, 2023

Summary

If a builder platform is capable of building sdists into wheels that are compatible with a target platform, then pex --complete-platform=cp-generated-from-target.json --resolve-local-platforms should build any pex on the builder, including any sdists.

Example where this doesn't work

  • builder: PyPA official wheel builder quay.io/pypa/manylinux2014_x86_64
  • target: python:3.10-slim source

Steps to reproduce

  1. Generate the complete-platform.json (py310-complete-platform.json.zip)

    % docker run --platform=linux/amd64 -it python:3.10-slim /bin/bash -c 'pip3 install pex==2.1.119 --quiet --quiet --quiet; pex3 interpreter inspect --markers --tags;' > py310-complete-platform.json
    
  2. Prepare the builder

    % docker run --platform=linux/amd64 -it -v ${PWD}:/curdir quay.io/pypa/manylinux2014_x86_64            
    [root@3a4bc9eae7f5 /]# export PATH=/opt/python/cp310-cp310/bin/:$PATH
    [root@3a4bc9eae7f5 /]# python3.10 --version
    Python 3.10.9
    [root@3a4bc9eae7f5 /]# which pip3
    /opt/python/cp310-cp310/bin/pip3
    [root@3a4bc9eae7f5 /]# pip3 install pex
    Collecting pex
      Downloading pex-2.1.119-py2.py3-none-any.whl (2.9 MB)
         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 6.0 MB/s eta 0:00:00
    Installing collected packages: pex
    Successfully installed pex-2.1.119
    
    [root@3a4bc9eae7f5 curdir]# cd /curdir
    [root@3a4bc9eae7f5 curdir]# export _PEX_FILE_LOCK_STYLE=bsd
    
  3. Build the PEX (note there is no wheel for pendulum for Python 3.10)

    [root@3a4bc9eae7f5 curdir]# pex --python=python3.10 --complete-platform=py310-complete-platform.json --pip-version=22.2.2 --resolver-version=pip-2020-resolver pendulum==2.1.2 -o pendulum.pex --resolve-local-platforms
    pid 513 -> /root/.pex/venvs/6c59b447d0c1988f35c5942be176267a84f608a5/34acb08bef9fb9b19fe854dbe3d6bc571944def9/bin/python -sE /root/.pex/venvs/6c59b447d0c1988f35c5942be176267a84f608a5/34acb08bef9fb9b19fe854dbe3d6bc571944def9/pex --disable-pip-version-check --no-python-version-warning --exists-action a --no-input --isolated -q --cache-dir /root/.pex/pip_cache --log /tmp/pex-pip-log.dig57pt8/pip.log download --dest /root/.pex/downloads/resolver_download.pgnh8tee/cp310-cp310-manylinux_2_31_x86_64 --only-binary :all: pendulum==2.1.2 --index-url https://pypi.org/simple --retries 5 --timeout 15 exited with 1 and STDERR:
    ERROR: Could not find a version that satisfies the requirement pendulum==2.1.2 (from versions: 0.3.1, 0.4, 3.0.0a1)
    ERROR: No matching distribution found for pendulum==2.1.2
    

Alternatives tried

  • using --interpreter-constraint instead of --python -> same error as above
  • using --platform=manylinux2014_x86_64-cp-310-cp310 instead of --complete-platform
    • build succeeded
    • run succeeded - I was able to run the built pex on the target, which means this was a compatible wheel
    • the built wheel was manylinux_2_17 :
       unzip -l pendulum-b.pex | grep 'whl/$'
       0  01-01-1980 00:00   .deps/pendulum-2.1.2-cp310-cp310-manylinux_2_17_x86_64.whl/
       0  01-01-1980 00:00   .deps/python_dateutil-2.8.2-py2.py3-none-any.whl/
       0  01-01-1980 00:00   .deps/pytzdata-2020.1-py2.py3-none-any.whl/
       0  01-01-1980 00:00   .deps/six-1.16.0-py2.py3-none-any.whl/
      
@shalabhc shalabhc changed the title Using --complete-platform with --resolve-local-platforms should build sdists when local is a subset of complete Using --complete-platform with --resolve-local-platforms should build sdists when local plaform is a subset of complete-platforms Jan 6, 2023
@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

Here's a test that I think should pass, but doesn't:

main...shalabh-pex-lab:pex:main

@shalabhc shalabhc changed the title Using --complete-platform with --resolve-local-platforms should build sdists when local plaform is a subset of complete-platforms Using --complete-platform with --resolve-local-platforms should build sdists when local platform is a subset of complete-platforms Jan 6, 2023
@shalabhc shalabhc changed the title Using --complete-platform with --resolve-local-platforms should build sdists when local platform is a subset of complete-platforms Using --complete-platform with --resolve-local-platforms should build sdists when local platform provides a subset of complete-platforms Jan 6, 2023
@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

Why are you using --platform or --complete-platform at all here?

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

Here's our use case:

  1. our user's provide some python source, including a requirements.txt or setup.py
    • dependencies may or may not include sdists
  2. their code needs to be built with pex and deployed to our serverless platform
    • options include python version 3.8 through 3.10 (each has a different linux docker image)
  3. the pex build command can be run in one of many places
    • a github actions runner; or
    • any other CI environment; or
    • the user's local workstation (mac / windows)

I'm trying to optimize the build and deploy time. Using a custom builder docker image that can build sdists is expensive time-wise - eg takes about 1 additional minute in github to download. So I'm trying to do this:

  1. (fast path) try to build on the current platform using '--complete-platform', or '--platform' so we that can cross build

    • this works if all wheels are available (no sdists) and is very fast, works on mac, etc.
    • this should also work if some sdists are present but the current platform can build a wheel compatible with our serverless platform (this is where I'm having problems: --platform sometimes produced incompatible wheels, while --complete-platform fails to build at all, even though I'm sure it would build a compatible wheel)
  2. (slow fallback) if above fails due to distribution not found (eg trying to build an sdist on a mac), try to build in a custom docker builder image

Happy to answer more questions about this.

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

So, the issue here is there is no interpreter in the manylinux image that has a subset of the complete platform info you built in the slim image. It goes exactly like this:

  1. If either --platform or --complete-platform is presented along with --resolve-local-platforms, then before using either --platform or --complete-platform is used, an attempt is made to find a local interpreter that matches each --platform or --complete-platform you sepcificed. In this case there are 0 matches for the --complete-platform and so the resolve proceeds using the --complete-platform with no substitute. As such, no sdist building is allowed.

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

The definition of 'matches' is what I'm confused about. If a builder can build ['manylinux_2_3'] and complete platform includes ['manylinux_2_4', 'manylinux_2_3', 'manylinux_2_2'], then IMO the sdists build should be attempted. This should be considered a match but isn't.

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

i.e instead of a subset match it does two checks:

  1. most specific tag matches
  2. for remaining tags, the builder interpreter tags should be a superset of the complete-platforms tags.

I think 1 should not be necessary?

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

Matches means subset right now. Quite literally, this is the problem:

$ diff -y <(jq . py310-complete-platform.json) <(jq . manylinux2014-py310-complete-platform.json)
{                                                               {
  "path": "/usr/local/bin/python3.10",                        |   "path": "/opt/_internal/cpython-3.10.9/bin/python3.10",
  "compatible_tags": [                                            "compatible_tags": [
    "cp310-cp310-manylinux_2_31_x86_64",                      <
    "cp310-cp310-manylinux_2_30_x86_64",                      <
    "cp310-cp310-manylinux_2_29_x86_64",                      <
    "cp310-cp310-manylinux_2_28_x86_64",                      <
    "cp310-cp310-manylinux_2_27_x86_64",                      <
    "cp310-cp310-manylinux_2_26_x86_64",                      <
    "cp310-cp310-manylinux_2_25_x86_64",                      <
    "cp310-cp310-manylinux_2_24_x86_64",                      <
    "cp310-cp310-manylinux_2_23_x86_64",                      <
    "cp310-cp310-manylinux_2_22_x86_64",                      <
    "cp310-cp310-manylinux_2_21_x86_64",                      <
    "cp310-cp310-manylinux_2_20_x86_64",                      <
    "cp310-cp310-manylinux_2_19_x86_64",                      <
    "cp310-cp310-manylinux_2_18_x86_64",                      <
    "cp310-cp310-manylinux_2_17_x86_64",                            "cp310-cp310-manylinux_2_17_x86_64",
    "cp310-cp310-manylinux2014_x86_64",                             "cp310-cp310-manylinux2014_x86_64",
    "cp310-cp310-manylinux_2_16_x86_64",                            "cp310-cp310-manylinux_2_16_x86_64",
    "cp310-cp310-manylinux_2_15_x86_64",                            "cp310-cp310-manylinux_2_15_x86_64",
    "cp310-cp310-manylinux_2_14_x86_64",                            "cp310-cp310-manylinux_2_14_x86_64",
    "cp310-cp310-manylinux_2_13_x86_64",                            "cp310-cp310-manylinux_2_13_x86_64",
    "cp310-cp310-manylinux_2_12_x86_64",                            "cp310-cp310-manylinux_2_12_x86_64",
    "cp310-cp310-manylinux2010_x86_64",                             "cp310-cp310-manylinux2010_x86_64",
    "cp310-cp310-manylinux_2_11_x86_64",                            "cp310-cp310-manylinux_2_11_x86_64",
    "cp310-cp310-manylinux_2_10_x86_64",                            "cp310-cp310-manylinux_2_10_x86_64",
    "cp310-cp310-manylinux_2_9_x86_64",                             "cp310-cp310-manylinux_2_9_x86_64",
    "cp310-cp310-manylinux_2_8_x86_64",                             "cp310-cp310-manylinux_2_8_x86_64",
    "cp310-cp310-manylinux_2_7_x86_64",                             "cp310-cp310-manylinux_2_7_x86_64",
    "cp310-cp310-manylinux_2_6_x86_64",                             "cp310-cp310-manylinux_2_6_x86_64",
    "cp310-cp310-manylinux_2_5_x86_64",                             "cp310-cp310-manylinux_2_5_x86_64",
    "cp310-cp310-manylinux1_x86_64",                                "cp310-cp310-manylinux1_x86_64",
    "cp310-cp310-linux_x86_64",                                     "cp310-cp310-linux_x86_64",
    "cp310-abi3-manylinux_2_31_x86_64",                       <
    "cp310-abi3-manylinux_2_30_x86_64",                       <
    "cp310-abi3-manylinux_2_29_x86_64",                       <
    "cp310-abi3-manylinux_2_28_x86_64",                       <
    "cp310-abi3-manylinux_2_27_x86_64",                       <
    "cp310-abi3-manylinux_2_26_x86_64",                       <
    "cp310-abi3-manylinux_2_25_x86_64",                       <
    "cp310-abi3-manylinux_2_24_x86_64",                       <
    "cp310-abi3-manylinux_2_23_x86_64",                       <
    "cp310-abi3-manylinux_2_22_x86_64",                       <
    "cp310-abi3-manylinux_2_21_x86_64",                       <
    "cp310-abi3-manylinux_2_20_x86_64",                       <
    "cp310-abi3-manylinux_2_19_x86_64",                       <
    "cp310-abi3-manylinux_2_18_x86_64",                       <
    "cp310-abi3-manylinux_2_17_x86_64",                             "cp310-abi3-manylinux_2_17_x86_64",
    "cp310-abi3-manylinux2014_x86_64",                              "cp310-abi3-manylinux2014_x86_64",
    "cp310-abi3-manylinux_2_16_x86_64",                             "cp310-abi3-manylinux_2_16_x86_64",
    "cp310-abi3-manylinux_2_15_x86_64",                             "cp310-abi3-manylinux_2_15_x86_64",
    "cp310-abi3-manylinux_2_14_x86_64",                             "cp310-abi3-manylinux_2_14_x86_64",
    "cp310-abi3-manylinux_2_13_x86_64",                             "cp310-abi3-manylinux_2_13_x86_64",
    "cp310-abi3-manylinux_2_12_x86_64",                             "cp310-abi3-manylinux_2_12_x86_64",
    "cp310-abi3-manylinux2010_x86_64",                              "cp310-abi3-manylinux2010_x86_64",
    "cp310-abi3-manylinux_2_11_x86_64",                             "cp310-abi3-manylinux_2_11_x86_64",
    "cp310-abi3-manylinux_2_10_x86_64",                             "cp310-abi3-manylinux_2_10_x86_64",
    "cp310-abi3-manylinux_2_9_x86_64",                              "cp310-abi3-manylinux_2_9_x86_64",
    "cp310-abi3-manylinux_2_8_x86_64",                              "cp310-abi3-manylinux_2_8_x86_64",
    "cp310-abi3-manylinux_2_7_x86_64",                              "cp310-abi3-manylinux_2_7_x86_64",
    "cp310-abi3-manylinux_2_6_x86_64",                              "cp310-abi3-manylinux_2_6_x86_64",
    "cp310-abi3-manylinux_2_5_x86_64",                              "cp310-abi3-manylinux_2_5_x86_64",
    "cp310-abi3-manylinux1_x86_64",                                 "cp310-abi3-manylinux1_x86_64",
    "cp310-abi3-linux_x86_64",                                      "cp310-abi3-linux_x86_64",
    "cp310-none-manylinux_2_31_x86_64",                       <
    "cp310-none-manylinux_2_30_x86_64",                       <
    "cp310-none-manylinux_2_29_x86_64",                       <
    "cp310-none-manylinux_2_28_x86_64",                       <
    "cp310-none-manylinux_2_27_x86_64",                       <
    "cp310-none-manylinux_2_26_x86_64",                       <
    "cp310-none-manylinux_2_25_x86_64",                       <
    "cp310-none-manylinux_2_24_x86_64",                       <
    "cp310-none-manylinux_2_23_x86_64",                       <
    "cp310-none-manylinux_2_22_x86_64",                       <
    "cp310-none-manylinux_2_21_x86_64",                       <
    "cp310-none-manylinux_2_20_x86_64",                       <
    "cp310-none-manylinux_2_19_x86_64",                       <
    "cp310-none-manylinux_2_18_x86_64",                       <
    "cp310-none-manylinux_2_17_x86_64",                             "cp310-none-manylinux_2_17_x86_64",
    "cp310-none-manylinux2014_x86_64",                              "cp310-none-manylinux2014_x86_64",
    "cp310-none-manylinux_2_16_x86_64",                             "cp310-none-manylinux_2_16_x86_64",
    "cp310-none-manylinux_2_15_x86_64",                             "cp310-none-manylinux_2_15_x86_64",
    "cp310-none-manylinux_2_14_x86_64",                             "cp310-none-manylinux_2_14_x86_64",
    "cp310-none-manylinux_2_13_x86_64",                             "cp310-none-manylinux_2_13_x86_64",
    "cp310-none-manylinux_2_12_x86_64",                             "cp310-none-manylinux_2_12_x86_64",
    "cp310-none-manylinux2010_x86_64",                              "cp310-none-manylinux2010_x86_64",
    "cp310-none-manylinux_2_11_x86_64",                             "cp310-none-manylinux_2_11_x86_64",
    "cp310-none-manylinux_2_10_x86_64",                             "cp310-none-manylinux_2_10_x86_64",
    "cp310-none-manylinux_2_9_x86_64",                              "cp310-none-manylinux_2_9_x86_64",
    "cp310-none-manylinux_2_8_x86_64",                              "cp310-none-manylinux_2_8_x86_64",
    "cp310-none-manylinux_2_7_x86_64",                              "cp310-none-manylinux_2_7_x86_64",
    "cp310-none-manylinux_2_6_x86_64",                              "cp310-none-manylinux_2_6_x86_64",
    "cp310-none-manylinux_2_5_x86_64",                              "cp310-none-manylinux_2_5_x86_64",
    "cp310-none-manylinux1_x86_64",                                 "cp310-none-manylinux1_x86_64",
    "cp310-none-linux_x86_64",                                      "cp310-none-linux_x86_64",
    "cp39-abi3-manylinux_2_31_x86_64",                        <
    "cp39-abi3-manylinux_2_30_x86_64",                        <
    "cp39-abi3-manylinux_2_29_x86_64",                        <
    "cp39-abi3-manylinux_2_28_x86_64",                        <
    "cp39-abi3-manylinux_2_27_x86_64",                        <
    "cp39-abi3-manylinux_2_26_x86_64",                        <
    "cp39-abi3-manylinux_2_25_x86_64",                        <
    "cp39-abi3-manylinux_2_24_x86_64",                        <
    "cp39-abi3-manylinux_2_23_x86_64",                        <
    "cp39-abi3-manylinux_2_22_x86_64",                        <
    "cp39-abi3-manylinux_2_21_x86_64",                        <
    "cp39-abi3-manylinux_2_20_x86_64",                        <
    "cp39-abi3-manylinux_2_19_x86_64",                        <
    "cp39-abi3-manylinux_2_18_x86_64",                        <
    "cp39-abi3-manylinux_2_17_x86_64",                              "cp39-abi3-manylinux_2_17_x86_64",
    "cp39-abi3-manylinux2014_x86_64",                               "cp39-abi3-manylinux2014_x86_64",
    "cp39-abi3-manylinux_2_16_x86_64",                              "cp39-abi3-manylinux_2_16_x86_64",
    "cp39-abi3-manylinux_2_15_x86_64",                              "cp39-abi3-manylinux_2_15_x86_64",
    "cp39-abi3-manylinux_2_14_x86_64",                              "cp39-abi3-manylinux_2_14_x86_64",
    "cp39-abi3-manylinux_2_13_x86_64",                              "cp39-abi3-manylinux_2_13_x86_64",
    "cp39-abi3-manylinux_2_12_x86_64",                              "cp39-abi3-manylinux_2_12_x86_64",
    "cp39-abi3-manylinux2010_x86_64",                               "cp39-abi3-manylinux2010_x86_64",
    "cp39-abi3-manylinux_2_11_x86_64",                              "cp39-abi3-manylinux_2_11_x86_64",
    "cp39-abi3-manylinux_2_10_x86_64",                              "cp39-abi3-manylinux_2_10_x86_64",
    "cp39-abi3-manylinux_2_9_x86_64",                               "cp39-abi3-manylinux_2_9_x86_64",
    "cp39-abi3-manylinux_2_8_x86_64",                               "cp39-abi3-manylinux_2_8_x86_64",
    "cp39-abi3-manylinux_2_7_x86_64",                               "cp39-abi3-manylinux_2_7_x86_64",
    "cp39-abi3-manylinux_2_6_x86_64",                               "cp39-abi3-manylinux_2_6_x86_64",
    "cp39-abi3-manylinux_2_5_x86_64",                               "cp39-abi3-manylinux_2_5_x86_64",
    "cp39-abi3-manylinux1_x86_64",                                  "cp39-abi3-manylinux1_x86_64",
    "cp39-abi3-linux_x86_64",                                       "cp39-abi3-linux_x86_64",
    "cp38-abi3-manylinux_2_31_x86_64",                        <
    "cp38-abi3-manylinux_2_30_x86_64",                        <
    "cp38-abi3-manylinux_2_29_x86_64",                        <
    "cp38-abi3-manylinux_2_28_x86_64",                        <
    "cp38-abi3-manylinux_2_27_x86_64",                        <
    "cp38-abi3-manylinux_2_26_x86_64",                        <
    "cp38-abi3-manylinux_2_25_x86_64",                        <
    "cp38-abi3-manylinux_2_24_x86_64",                        <
    "cp38-abi3-manylinux_2_23_x86_64",                        <
    "cp38-abi3-manylinux_2_22_x86_64",                        <
    "cp38-abi3-manylinux_2_21_x86_64",                        <
    "cp38-abi3-manylinux_2_20_x86_64",                        <
    "cp38-abi3-manylinux_2_19_x86_64",                        <
    "cp38-abi3-manylinux_2_18_x86_64",                        <
    "cp38-abi3-manylinux_2_17_x86_64",                              "cp38-abi3-manylinux_2_17_x86_64",
    "cp38-abi3-manylinux2014_x86_64",                               "cp38-abi3-manylinux2014_x86_64",
    "cp38-abi3-manylinux_2_16_x86_64",                              "cp38-abi3-manylinux_2_16_x86_64",
    "cp38-abi3-manylinux_2_15_x86_64",                              "cp38-abi3-manylinux_2_15_x86_64",
    "cp38-abi3-manylinux_2_14_x86_64",                              "cp38-abi3-manylinux_2_14_x86_64",
    "cp38-abi3-manylinux_2_13_x86_64",                              "cp38-abi3-manylinux_2_13_x86_64",
    "cp38-abi3-manylinux_2_12_x86_64",                              "cp38-abi3-manylinux_2_12_x86_64",
    "cp38-abi3-manylinux2010_x86_64",                               "cp38-abi3-manylinux2010_x86_64",
    "cp38-abi3-manylinux_2_11_x86_64",                              "cp38-abi3-manylinux_2_11_x86_64",
    "cp38-abi3-manylinux_2_10_x86_64",                              "cp38-abi3-manylinux_2_10_x86_64",
    "cp38-abi3-manylinux_2_9_x86_64",                               "cp38-abi3-manylinux_2_9_x86_64",
    "cp38-abi3-manylinux_2_8_x86_64",                               "cp38-abi3-manylinux_2_8_x86_64",
    "cp38-abi3-manylinux_2_7_x86_64",                               "cp38-abi3-manylinux_2_7_x86_64",
    "cp38-abi3-manylinux_2_6_x86_64",                               "cp38-abi3-manylinux_2_6_x86_64",
    "cp38-abi3-manylinux_2_5_x86_64",                               "cp38-abi3-manylinux_2_5_x86_64",
    "cp38-abi3-manylinux1_x86_64",                                  "cp38-abi3-manylinux1_x86_64",
    "cp38-abi3-linux_x86_64",                                       "cp38-abi3-linux_x86_64",
    "cp37-abi3-manylinux_2_31_x86_64",                        <
    "cp37-abi3-manylinux_2_30_x86_64",                        <
    "cp37-abi3-manylinux_2_29_x86_64",                        <
    "cp37-abi3-manylinux_2_28_x86_64",                        <
    "cp37-abi3-manylinux_2_27_x86_64",                        <
    "cp37-abi3-manylinux_2_26_x86_64",                        <
    "cp37-abi3-manylinux_2_25_x86_64",                        <
    "cp37-abi3-manylinux_2_24_x86_64",                        <
    "cp37-abi3-manylinux_2_23_x86_64",                        <
    "cp37-abi3-manylinux_2_22_x86_64",                        <
    "cp37-abi3-manylinux_2_21_x86_64",                        <
    "cp37-abi3-manylinux_2_20_x86_64",                        <
    "cp37-abi3-manylinux_2_19_x86_64",                        <
    "cp37-abi3-manylinux_2_18_x86_64",                        <
    "cp37-abi3-manylinux_2_17_x86_64",                              "cp37-abi3-manylinux_2_17_x86_64",
    "cp37-abi3-manylinux2014_x86_64",                               "cp37-abi3-manylinux2014_x86_64",
    "cp37-abi3-manylinux_2_16_x86_64",                              "cp37-abi3-manylinux_2_16_x86_64",
    "cp37-abi3-manylinux_2_15_x86_64",                              "cp37-abi3-manylinux_2_15_x86_64",
    "cp37-abi3-manylinux_2_14_x86_64",                              "cp37-abi3-manylinux_2_14_x86_64",
    "cp37-abi3-manylinux_2_13_x86_64",                              "cp37-abi3-manylinux_2_13_x86_64",
    "cp37-abi3-manylinux_2_12_x86_64",                              "cp37-abi3-manylinux_2_12_x86_64",
    "cp37-abi3-manylinux2010_x86_64",                               "cp37-abi3-manylinux2010_x86_64",
    "cp37-abi3-manylinux_2_11_x86_64",                              "cp37-abi3-manylinux_2_11_x86_64",
    "cp37-abi3-manylinux_2_10_x86_64",                              "cp37-abi3-manylinux_2_10_x86_64",
    "cp37-abi3-manylinux_2_9_x86_64",                               "cp37-abi3-manylinux_2_9_x86_64",
    "cp37-abi3-manylinux_2_8_x86_64",                               "cp37-abi3-manylinux_2_8_x86_64",
    "cp37-abi3-manylinux_2_7_x86_64",                               "cp37-abi3-manylinux_2_7_x86_64",
    "cp37-abi3-manylinux_2_6_x86_64",                               "cp37-abi3-manylinux_2_6_x86_64",
    "cp37-abi3-manylinux_2_5_x86_64",                               "cp37-abi3-manylinux_2_5_x86_64",
    "cp37-abi3-manylinux1_x86_64",                                  "cp37-abi3-manylinux1_x86_64",
    "cp37-abi3-linux_x86_64",                                       "cp37-abi3-linux_x86_64",
    "cp36-abi3-manylinux_2_31_x86_64",                        <
    "cp36-abi3-manylinux_2_30_x86_64",                        <
    "cp36-abi3-manylinux_2_29_x86_64",                        <
    "cp36-abi3-manylinux_2_28_x86_64",                        <
    "cp36-abi3-manylinux_2_27_x86_64",                        <
    "cp36-abi3-manylinux_2_26_x86_64",                        <
    "cp36-abi3-manylinux_2_25_x86_64",                        <
    "cp36-abi3-manylinux_2_24_x86_64",                        <
    "cp36-abi3-manylinux_2_23_x86_64",                        <
    "cp36-abi3-manylinux_2_22_x86_64",                        <
    "cp36-abi3-manylinux_2_21_x86_64",                        <
    "cp36-abi3-manylinux_2_20_x86_64",                        <
    "cp36-abi3-manylinux_2_19_x86_64",                        <
    "cp36-abi3-manylinux_2_18_x86_64",                        <
    "cp36-abi3-manylinux_2_17_x86_64",                              "cp36-abi3-manylinux_2_17_x86_64",
    "cp36-abi3-manylinux2014_x86_64",                               "cp36-abi3-manylinux2014_x86_64",
    "cp36-abi3-manylinux_2_16_x86_64",                              "cp36-abi3-manylinux_2_16_x86_64",
    "cp36-abi3-manylinux_2_15_x86_64",                              "cp36-abi3-manylinux_2_15_x86_64",
    "cp36-abi3-manylinux_2_14_x86_64",                              "cp36-abi3-manylinux_2_14_x86_64",
    "cp36-abi3-manylinux_2_13_x86_64",                              "cp36-abi3-manylinux_2_13_x86_64",
    "cp36-abi3-manylinux_2_12_x86_64",                              "cp36-abi3-manylinux_2_12_x86_64",
    "cp36-abi3-manylinux2010_x86_64",                               "cp36-abi3-manylinux2010_x86_64",
    "cp36-abi3-manylinux_2_11_x86_64",                              "cp36-abi3-manylinux_2_11_x86_64",
    "cp36-abi3-manylinux_2_10_x86_64",                              "cp36-abi3-manylinux_2_10_x86_64",
    "cp36-abi3-manylinux_2_9_x86_64",                               "cp36-abi3-manylinux_2_9_x86_64",
    "cp36-abi3-manylinux_2_8_x86_64",                               "cp36-abi3-manylinux_2_8_x86_64",
    "cp36-abi3-manylinux_2_7_x86_64",                               "cp36-abi3-manylinux_2_7_x86_64",
    "cp36-abi3-manylinux_2_6_x86_64",                               "cp36-abi3-manylinux_2_6_x86_64",
    "cp36-abi3-manylinux_2_5_x86_64",                               "cp36-abi3-manylinux_2_5_x86_64",
    "cp36-abi3-manylinux1_x86_64",                                  "cp36-abi3-manylinux1_x86_64",
    "cp36-abi3-linux_x86_64",                                       "cp36-abi3-linux_x86_64",
    "cp35-abi3-manylinux_2_31_x86_64",                        <
    "cp35-abi3-manylinux_2_30_x86_64",                        <
    "cp35-abi3-manylinux_2_29_x86_64",                        <
    "cp35-abi3-manylinux_2_28_x86_64",                        <
    "cp35-abi3-manylinux_2_27_x86_64",                        <
    "cp35-abi3-manylinux_2_26_x86_64",                        <
    "cp35-abi3-manylinux_2_25_x86_64",                        <
    "cp35-abi3-manylinux_2_24_x86_64",                        <
    "cp35-abi3-manylinux_2_23_x86_64",                        <
    "cp35-abi3-manylinux_2_22_x86_64",                        <
    "cp35-abi3-manylinux_2_21_x86_64",                        <
    "cp35-abi3-manylinux_2_20_x86_64",                        <
    "cp35-abi3-manylinux_2_19_x86_64",                        <
    "cp35-abi3-manylinux_2_18_x86_64",                        <
    "cp35-abi3-manylinux_2_17_x86_64",                              "cp35-abi3-manylinux_2_17_x86_64",
    "cp35-abi3-manylinux2014_x86_64",                               "cp35-abi3-manylinux2014_x86_64",
    "cp35-abi3-manylinux_2_16_x86_64",                              "cp35-abi3-manylinux_2_16_x86_64",
    "cp35-abi3-manylinux_2_15_x86_64",                              "cp35-abi3-manylinux_2_15_x86_64",
    "cp35-abi3-manylinux_2_14_x86_64",                              "cp35-abi3-manylinux_2_14_x86_64",
    "cp35-abi3-manylinux_2_13_x86_64",                              "cp35-abi3-manylinux_2_13_x86_64",
    "cp35-abi3-manylinux_2_12_x86_64",                              "cp35-abi3-manylinux_2_12_x86_64",
    "cp35-abi3-manylinux2010_x86_64",                               "cp35-abi3-manylinux2010_x86_64",
    "cp35-abi3-manylinux_2_11_x86_64",                              "cp35-abi3-manylinux_2_11_x86_64",
    "cp35-abi3-manylinux_2_10_x86_64",                              "cp35-abi3-manylinux_2_10_x86_64",
    "cp35-abi3-manylinux_2_9_x86_64",                               "cp35-abi3-manylinux_2_9_x86_64",
    "cp35-abi3-manylinux_2_8_x86_64",                               "cp35-abi3-manylinux_2_8_x86_64",
    "cp35-abi3-manylinux_2_7_x86_64",                               "cp35-abi3-manylinux_2_7_x86_64",
    "cp35-abi3-manylinux_2_6_x86_64",                               "cp35-abi3-manylinux_2_6_x86_64",
    "cp35-abi3-manylinux_2_5_x86_64",                               "cp35-abi3-manylinux_2_5_x86_64",
    "cp35-abi3-manylinux1_x86_64",                                  "cp35-abi3-manylinux1_x86_64",
    "cp35-abi3-linux_x86_64",                                       "cp35-abi3-linux_x86_64",
    "cp34-abi3-manylinux_2_31_x86_64",                        <
    "cp34-abi3-manylinux_2_30_x86_64",                        <
    "cp34-abi3-manylinux_2_29_x86_64",                        <
    "cp34-abi3-manylinux_2_28_x86_64",                        <
    "cp34-abi3-manylinux_2_27_x86_64",                        <
    "cp34-abi3-manylinux_2_26_x86_64",                        <
    "cp34-abi3-manylinux_2_25_x86_64",                        <
    "cp34-abi3-manylinux_2_24_x86_64",                        <
    "cp34-abi3-manylinux_2_23_x86_64",                        <
    "cp34-abi3-manylinux_2_22_x86_64",                        <
    "cp34-abi3-manylinux_2_21_x86_64",                        <
    "cp34-abi3-manylinux_2_20_x86_64",                        <
    "cp34-abi3-manylinux_2_19_x86_64",                        <
    "cp34-abi3-manylinux_2_18_x86_64",                        <
    "cp34-abi3-manylinux_2_17_x86_64",                              "cp34-abi3-manylinux_2_17_x86_64",
    "cp34-abi3-manylinux2014_x86_64",                               "cp34-abi3-manylinux2014_x86_64",
    "cp34-abi3-manylinux_2_16_x86_64",                              "cp34-abi3-manylinux_2_16_x86_64",
    "cp34-abi3-manylinux_2_15_x86_64",                              "cp34-abi3-manylinux_2_15_x86_64",
    "cp34-abi3-manylinux_2_14_x86_64",                              "cp34-abi3-manylinux_2_14_x86_64",
    "cp34-abi3-manylinux_2_13_x86_64",                              "cp34-abi3-manylinux_2_13_x86_64",
    "cp34-abi3-manylinux_2_12_x86_64",                              "cp34-abi3-manylinux_2_12_x86_64",
    "cp34-abi3-manylinux2010_x86_64",                               "cp34-abi3-manylinux2010_x86_64",
    "cp34-abi3-manylinux_2_11_x86_64",                              "cp34-abi3-manylinux_2_11_x86_64",
    "cp34-abi3-manylinux_2_10_x86_64",                              "cp34-abi3-manylinux_2_10_x86_64",
    "cp34-abi3-manylinux_2_9_x86_64",                               "cp34-abi3-manylinux_2_9_x86_64",
    "cp34-abi3-manylinux_2_8_x86_64",                               "cp34-abi3-manylinux_2_8_x86_64",
    "cp34-abi3-manylinux_2_7_x86_64",                               "cp34-abi3-manylinux_2_7_x86_64",
    "cp34-abi3-manylinux_2_6_x86_64",                               "cp34-abi3-manylinux_2_6_x86_64",
    "cp34-abi3-manylinux_2_5_x86_64",                               "cp34-abi3-manylinux_2_5_x86_64",
    "cp34-abi3-manylinux1_x86_64",                                  "cp34-abi3-manylinux1_x86_64",
    "cp34-abi3-linux_x86_64",                                       "cp34-abi3-linux_x86_64",
    "cp33-abi3-manylinux_2_31_x86_64",                        <
    "cp33-abi3-manylinux_2_30_x86_64",                        <
    "cp33-abi3-manylinux_2_29_x86_64",                        <
    "cp33-abi3-manylinux_2_28_x86_64",                        <
    "cp33-abi3-manylinux_2_27_x86_64",                        <
    "cp33-abi3-manylinux_2_26_x86_64",                        <
    "cp33-abi3-manylinux_2_25_x86_64",                        <
    "cp33-abi3-manylinux_2_24_x86_64",                        <
    "cp33-abi3-manylinux_2_23_x86_64",                        <
    "cp33-abi3-manylinux_2_22_x86_64",                        <
    "cp33-abi3-manylinux_2_21_x86_64",                        <
    "cp33-abi3-manylinux_2_20_x86_64",                        <
    "cp33-abi3-manylinux_2_19_x86_64",                        <
    "cp33-abi3-manylinux_2_18_x86_64",                        <
    "cp33-abi3-manylinux_2_17_x86_64",                              "cp33-abi3-manylinux_2_17_x86_64",
    "cp33-abi3-manylinux2014_x86_64",                               "cp33-abi3-manylinux2014_x86_64",
    "cp33-abi3-manylinux_2_16_x86_64",                              "cp33-abi3-manylinux_2_16_x86_64",
    "cp33-abi3-manylinux_2_15_x86_64",                              "cp33-abi3-manylinux_2_15_x86_64",
    "cp33-abi3-manylinux_2_14_x86_64",                              "cp33-abi3-manylinux_2_14_x86_64",
    "cp33-abi3-manylinux_2_13_x86_64",                              "cp33-abi3-manylinux_2_13_x86_64",
    "cp33-abi3-manylinux_2_12_x86_64",                              "cp33-abi3-manylinux_2_12_x86_64",
    "cp33-abi3-manylinux2010_x86_64",                               "cp33-abi3-manylinux2010_x86_64",
    "cp33-abi3-manylinux_2_11_x86_64",                              "cp33-abi3-manylinux_2_11_x86_64",
    "cp33-abi3-manylinux_2_10_x86_64",                              "cp33-abi3-manylinux_2_10_x86_64",
    "cp33-abi3-manylinux_2_9_x86_64",                               "cp33-abi3-manylinux_2_9_x86_64",
    "cp33-abi3-manylinux_2_8_x86_64",                               "cp33-abi3-manylinux_2_8_x86_64",
    "cp33-abi3-manylinux_2_7_x86_64",                               "cp33-abi3-manylinux_2_7_x86_64",
    "cp33-abi3-manylinux_2_6_x86_64",                               "cp33-abi3-manylinux_2_6_x86_64",
    "cp33-abi3-manylinux_2_5_x86_64",                               "cp33-abi3-manylinux_2_5_x86_64",
    "cp33-abi3-manylinux1_x86_64",                                  "cp33-abi3-manylinux1_x86_64",
    "cp33-abi3-linux_x86_64",                                       "cp33-abi3-linux_x86_64",
    "cp32-abi3-manylinux_2_31_x86_64",                        <
    "cp32-abi3-manylinux_2_30_x86_64",                        <
    "cp32-abi3-manylinux_2_29_x86_64",                        <
    "cp32-abi3-manylinux_2_28_x86_64",                        <
    "cp32-abi3-manylinux_2_27_x86_64",                        <
    "cp32-abi3-manylinux_2_26_x86_64",                        <
    "cp32-abi3-manylinux_2_25_x86_64",                        <
    "cp32-abi3-manylinux_2_24_x86_64",                        <
    "cp32-abi3-manylinux_2_23_x86_64",                        <
    "cp32-abi3-manylinux_2_22_x86_64",                        <
    "cp32-abi3-manylinux_2_21_x86_64",                        <
    "cp32-abi3-manylinux_2_20_x86_64",                        <
    "cp32-abi3-manylinux_2_19_x86_64",                        <
    "cp32-abi3-manylinux_2_18_x86_64",                        <
    "cp32-abi3-manylinux_2_17_x86_64",                              "cp32-abi3-manylinux_2_17_x86_64",
    "cp32-abi3-manylinux2014_x86_64",                               "cp32-abi3-manylinux2014_x86_64",
    "cp32-abi3-manylinux_2_16_x86_64",                              "cp32-abi3-manylinux_2_16_x86_64",
    "cp32-abi3-manylinux_2_15_x86_64",                              "cp32-abi3-manylinux_2_15_x86_64",
    "cp32-abi3-manylinux_2_14_x86_64",                              "cp32-abi3-manylinux_2_14_x86_64",
    "cp32-abi3-manylinux_2_13_x86_64",                              "cp32-abi3-manylinux_2_13_x86_64",
    "cp32-abi3-manylinux_2_12_x86_64",                              "cp32-abi3-manylinux_2_12_x86_64",
    "cp32-abi3-manylinux2010_x86_64",                               "cp32-abi3-manylinux2010_x86_64",
    "cp32-abi3-manylinux_2_11_x86_64",                              "cp32-abi3-manylinux_2_11_x86_64",
    "cp32-abi3-manylinux_2_10_x86_64",                              "cp32-abi3-manylinux_2_10_x86_64",
    "cp32-abi3-manylinux_2_9_x86_64",                               "cp32-abi3-manylinux_2_9_x86_64",
    "cp32-abi3-manylinux_2_8_x86_64",                               "cp32-abi3-manylinux_2_8_x86_64",
    "cp32-abi3-manylinux_2_7_x86_64",                               "cp32-abi3-manylinux_2_7_x86_64",
    "cp32-abi3-manylinux_2_6_x86_64",                               "cp32-abi3-manylinux_2_6_x86_64",
    "cp32-abi3-manylinux_2_5_x86_64",                               "cp32-abi3-manylinux_2_5_x86_64",
    "cp32-abi3-manylinux1_x86_64",                                  "cp32-abi3-manylinux1_x86_64",
    "cp32-abi3-linux_x86_64",                                       "cp32-abi3-linux_x86_64",
    "py310-none-manylinux_2_31_x86_64",                       <
    "py310-none-manylinux_2_30_x86_64",                       <
    "py310-none-manylinux_2_29_x86_64",                       <
    "py310-none-manylinux_2_28_x86_64",                       <
    "py310-none-manylinux_2_27_x86_64",                       <
    "py310-none-manylinux_2_26_x86_64",                       <
    "py310-none-manylinux_2_25_x86_64",                       <
    "py310-none-manylinux_2_24_x86_64",                       <
    "py310-none-manylinux_2_23_x86_64",                       <
    "py310-none-manylinux_2_22_x86_64",                       <
    "py310-none-manylinux_2_21_x86_64",                       <
    "py310-none-manylinux_2_20_x86_64",                       <
    "py310-none-manylinux_2_19_x86_64",                       <
    "py310-none-manylinux_2_18_x86_64",                       <
    "py310-none-manylinux_2_17_x86_64",                             "py310-none-manylinux_2_17_x86_64",
    "py310-none-manylinux2014_x86_64",                              "py310-none-manylinux2014_x86_64",
    "py310-none-manylinux_2_16_x86_64",                             "py310-none-manylinux_2_16_x86_64",
    "py310-none-manylinux_2_15_x86_64",                             "py310-none-manylinux_2_15_x86_64",
    "py310-none-manylinux_2_14_x86_64",                             "py310-none-manylinux_2_14_x86_64",
    "py310-none-manylinux_2_13_x86_64",                             "py310-none-manylinux_2_13_x86_64",
    "py310-none-manylinux_2_12_x86_64",                             "py310-none-manylinux_2_12_x86_64",
    "py310-none-manylinux2010_x86_64",                              "py310-none-manylinux2010_x86_64",
    "py310-none-manylinux_2_11_x86_64",                             "py310-none-manylinux_2_11_x86_64",
    "py310-none-manylinux_2_10_x86_64",                             "py310-none-manylinux_2_10_x86_64",
    "py310-none-manylinux_2_9_x86_64",                              "py310-none-manylinux_2_9_x86_64",
    "py310-none-manylinux_2_8_x86_64",                              "py310-none-manylinux_2_8_x86_64",
    "py310-none-manylinux_2_7_x86_64",                              "py310-none-manylinux_2_7_x86_64",
    "py310-none-manylinux_2_6_x86_64",                              "py310-none-manylinux_2_6_x86_64",
    "py310-none-manylinux_2_5_x86_64",                              "py310-none-manylinux_2_5_x86_64",
    "py310-none-manylinux1_x86_64",                                 "py310-none-manylinux1_x86_64",
    "py310-none-linux_x86_64",                                      "py310-none-linux_x86_64",
    "py3-none-manylinux_2_31_x86_64",                         <
    "py3-none-manylinux_2_30_x86_64",                         <
    "py3-none-manylinux_2_29_x86_64",                         <
    "py3-none-manylinux_2_28_x86_64",                         <
    "py3-none-manylinux_2_27_x86_64",                         <
    "py3-none-manylinux_2_26_x86_64",                         <
    "py3-none-manylinux_2_25_x86_64",                         <
    "py3-none-manylinux_2_24_x86_64",                         <
    "py3-none-manylinux_2_23_x86_64",                         <
    "py3-none-manylinux_2_22_x86_64",                         <
    "py3-none-manylinux_2_21_x86_64",                         <
    "py3-none-manylinux_2_20_x86_64",                         <
    "py3-none-manylinux_2_19_x86_64",                         <
    "py3-none-manylinux_2_18_x86_64",                         <
    "py3-none-manylinux_2_17_x86_64",                               "py3-none-manylinux_2_17_x86_64",
    "py3-none-manylinux2014_x86_64",                                "py3-none-manylinux2014_x86_64",
    "py3-none-manylinux_2_16_x86_64",                               "py3-none-manylinux_2_16_x86_64",
    "py3-none-manylinux_2_15_x86_64",                               "py3-none-manylinux_2_15_x86_64",
    "py3-none-manylinux_2_14_x86_64",                               "py3-none-manylinux_2_14_x86_64",
    "py3-none-manylinux_2_13_x86_64",                               "py3-none-manylinux_2_13_x86_64",
    "py3-none-manylinux_2_12_x86_64",                               "py3-none-manylinux_2_12_x86_64",
    "py3-none-manylinux2010_x86_64",                                "py3-none-manylinux2010_x86_64",
    "py3-none-manylinux_2_11_x86_64",                               "py3-none-manylinux_2_11_x86_64",
    "py3-none-manylinux_2_10_x86_64",                               "py3-none-manylinux_2_10_x86_64",
    "py3-none-manylinux_2_9_x86_64",                                "py3-none-manylinux_2_9_x86_64",
    "py3-none-manylinux_2_8_x86_64",                                "py3-none-manylinux_2_8_x86_64",
    "py3-none-manylinux_2_7_x86_64",                                "py3-none-manylinux_2_7_x86_64",
    "py3-none-manylinux_2_6_x86_64",                                "py3-none-manylinux_2_6_x86_64",
    "py3-none-manylinux_2_5_x86_64",                                "py3-none-manylinux_2_5_x86_64",
    "py3-none-manylinux1_x86_64",                                   "py3-none-manylinux1_x86_64",
    "py3-none-linux_x86_64",                                        "py3-none-linux_x86_64",
    "py39-none-manylinux_2_31_x86_64",                        <
    "py39-none-manylinux_2_30_x86_64",                        <
    "py39-none-manylinux_2_29_x86_64",                        <
    "py39-none-manylinux_2_28_x86_64",                        <
    "py39-none-manylinux_2_27_x86_64",                        <
    "py39-none-manylinux_2_26_x86_64",                        <
    "py39-none-manylinux_2_25_x86_64",                        <
    "py39-none-manylinux_2_24_x86_64",                        <
    "py39-none-manylinux_2_23_x86_64",                        <
    "py39-none-manylinux_2_22_x86_64",                        <
    "py39-none-manylinux_2_21_x86_64",                        <
    "py39-none-manylinux_2_20_x86_64",                        <
    "py39-none-manylinux_2_19_x86_64",                        <
    "py39-none-manylinux_2_18_x86_64",                        <
    "py39-none-manylinux_2_17_x86_64",                              "py39-none-manylinux_2_17_x86_64",
    "py39-none-manylinux2014_x86_64",                               "py39-none-manylinux2014_x86_64",
    "py39-none-manylinux_2_16_x86_64",                              "py39-none-manylinux_2_16_x86_64",
    "py39-none-manylinux_2_15_x86_64",                              "py39-none-manylinux_2_15_x86_64",
    "py39-none-manylinux_2_14_x86_64",                              "py39-none-manylinux_2_14_x86_64",
    "py39-none-manylinux_2_13_x86_64",                              "py39-none-manylinux_2_13_x86_64",
    "py39-none-manylinux_2_12_x86_64",                              "py39-none-manylinux_2_12_x86_64",
    "py39-none-manylinux2010_x86_64",                               "py39-none-manylinux2010_x86_64",
    "py39-none-manylinux_2_11_x86_64",                              "py39-none-manylinux_2_11_x86_64",
    "py39-none-manylinux_2_10_x86_64",                              "py39-none-manylinux_2_10_x86_64",
    "py39-none-manylinux_2_9_x86_64",                               "py39-none-manylinux_2_9_x86_64",
    "py39-none-manylinux_2_8_x86_64",                               "py39-none-manylinux_2_8_x86_64",
    "py39-none-manylinux_2_7_x86_64",                               "py39-none-manylinux_2_7_x86_64",
    "py39-none-manylinux_2_6_x86_64",                               "py39-none-manylinux_2_6_x86_64",
    "py39-none-manylinux_2_5_x86_64",                               "py39-none-manylinux_2_5_x86_64",
    "py39-none-manylinux1_x86_64",                                  "py39-none-manylinux1_x86_64",
    "py39-none-linux_x86_64",                                       "py39-none-linux_x86_64",
    "py38-none-manylinux_2_31_x86_64",                        <
    "py38-none-manylinux_2_30_x86_64",                        <
    "py38-none-manylinux_2_29_x86_64",                        <
    "py38-none-manylinux_2_28_x86_64",                        <
    "py38-none-manylinux_2_27_x86_64",                        <
    "py38-none-manylinux_2_26_x86_64",                        <
    "py38-none-manylinux_2_25_x86_64",                        <
    "py38-none-manylinux_2_24_x86_64",                        <
    "py38-none-manylinux_2_23_x86_64",                        <
    "py38-none-manylinux_2_22_x86_64",                        <
    "py38-none-manylinux_2_21_x86_64",                        <
    "py38-none-manylinux_2_20_x86_64",                        <
    "py38-none-manylinux_2_19_x86_64",                        <
    "py38-none-manylinux_2_18_x86_64",                        <
    "py38-none-manylinux_2_17_x86_64",                              "py38-none-manylinux_2_17_x86_64",
    "py38-none-manylinux2014_x86_64",                               "py38-none-manylinux2014_x86_64",
    "py38-none-manylinux_2_16_x86_64",                              "py38-none-manylinux_2_16_x86_64",
    "py38-none-manylinux_2_15_x86_64",                              "py38-none-manylinux_2_15_x86_64",
    "py38-none-manylinux_2_14_x86_64",                              "py38-none-manylinux_2_14_x86_64",
    "py38-none-manylinux_2_13_x86_64",                              "py38-none-manylinux_2_13_x86_64",
    "py38-none-manylinux_2_12_x86_64",                              "py38-none-manylinux_2_12_x86_64",
    "py38-none-manylinux2010_x86_64",                               "py38-none-manylinux2010_x86_64",
    "py38-none-manylinux_2_11_x86_64",                              "py38-none-manylinux_2_11_x86_64",
    "py38-none-manylinux_2_10_x86_64",                              "py38-none-manylinux_2_10_x86_64",
    "py38-none-manylinux_2_9_x86_64",                               "py38-none-manylinux_2_9_x86_64",
    "py38-none-manylinux_2_8_x86_64",                               "py38-none-manylinux_2_8_x86_64",
    "py38-none-manylinux_2_7_x86_64",                               "py38-none-manylinux_2_7_x86_64",
    "py38-none-manylinux_2_6_x86_64",                               "py38-none-manylinux_2_6_x86_64",
    "py38-none-manylinux_2_5_x86_64",                               "py38-none-manylinux_2_5_x86_64",
    "py38-none-manylinux1_x86_64",                                  "py38-none-manylinux1_x86_64",
    "py38-none-linux_x86_64",                                       "py38-none-linux_x86_64",
    "py37-none-manylinux_2_31_x86_64",                        <
    "py37-none-manylinux_2_30_x86_64",                        <
    "py37-none-manylinux_2_29_x86_64",                        <
    "py37-none-manylinux_2_28_x86_64",                        <
    "py37-none-manylinux_2_27_x86_64",                        <
    "py37-none-manylinux_2_26_x86_64",                        <
    "py37-none-manylinux_2_25_x86_64",                        <
    "py37-none-manylinux_2_24_x86_64",                        <
    "py37-none-manylinux_2_23_x86_64",                        <
    "py37-none-manylinux_2_22_x86_64",                        <
    "py37-none-manylinux_2_21_x86_64",                        <
    "py37-none-manylinux_2_20_x86_64",                        <
    "py37-none-manylinux_2_19_x86_64",                        <
    "py37-none-manylinux_2_18_x86_64",                        <
    "py37-none-manylinux_2_17_x86_64",                              "py37-none-manylinux_2_17_x86_64",
    "py37-none-manylinux2014_x86_64",                               "py37-none-manylinux2014_x86_64",
    "py37-none-manylinux_2_16_x86_64",                              "py37-none-manylinux_2_16_x86_64",
    "py37-none-manylinux_2_15_x86_64",                              "py37-none-manylinux_2_15_x86_64",
    "py37-none-manylinux_2_14_x86_64",                              "py37-none-manylinux_2_14_x86_64",
    "py37-none-manylinux_2_13_x86_64",                              "py37-none-manylinux_2_13_x86_64",
    "py37-none-manylinux_2_12_x86_64",                              "py37-none-manylinux_2_12_x86_64",
    "py37-none-manylinux2010_x86_64",                               "py37-none-manylinux2010_x86_64",
    "py37-none-manylinux_2_11_x86_64",                              "py37-none-manylinux_2_11_x86_64",
    "py37-none-manylinux_2_10_x86_64",                              "py37-none-manylinux_2_10_x86_64",
    "py37-none-manylinux_2_9_x86_64",                               "py37-none-manylinux_2_9_x86_64",
    "py37-none-manylinux_2_8_x86_64",                               "py37-none-manylinux_2_8_x86_64",
    "py37-none-manylinux_2_7_x86_64",                               "py37-none-manylinux_2_7_x86_64",
    "py37-none-manylinux_2_6_x86_64",                               "py37-none-manylinux_2_6_x86_64",
    "py37-none-manylinux_2_5_x86_64",                               "py37-none-manylinux_2_5_x86_64",
    "py37-none-manylinux1_x86_64",                                  "py37-none-manylinux1_x86_64",
    "py37-none-linux_x86_64",                                       "py37-none-linux_x86_64",
    "py36-none-manylinux_2_31_x86_64",                        <
    "py36-none-manylinux_2_30_x86_64",                        <
    "py36-none-manylinux_2_29_x86_64",                        <
    "py36-none-manylinux_2_28_x86_64",                        <
    "py36-none-manylinux_2_27_x86_64",                        <
    "py36-none-manylinux_2_26_x86_64",                        <
    "py36-none-manylinux_2_25_x86_64",                        <
    "py36-none-manylinux_2_24_x86_64",                        <
    "py36-none-manylinux_2_23_x86_64",                        <
    "py36-none-manylinux_2_22_x86_64",                        <
    "py36-none-manylinux_2_21_x86_64",                        <
    "py36-none-manylinux_2_20_x86_64",                        <
    "py36-none-manylinux_2_19_x86_64",                        <
    "py36-none-manylinux_2_18_x86_64",                        <
    "py36-none-manylinux_2_17_x86_64",                              "py36-none-manylinux_2_17_x86_64",
    "py36-none-manylinux2014_x86_64",                               "py36-none-manylinux2014_x86_64",
    "py36-none-manylinux_2_16_x86_64",                              "py36-none-manylinux_2_16_x86_64",
    "py36-none-manylinux_2_15_x86_64",                              "py36-none-manylinux_2_15_x86_64",
    "py36-none-manylinux_2_14_x86_64",                              "py36-none-manylinux_2_14_x86_64",
    "py36-none-manylinux_2_13_x86_64",                              "py36-none-manylinux_2_13_x86_64",
    "py36-none-manylinux_2_12_x86_64",                              "py36-none-manylinux_2_12_x86_64",
    "py36-none-manylinux2010_x86_64",                               "py36-none-manylinux2010_x86_64",
    "py36-none-manylinux_2_11_x86_64",                              "py36-none-manylinux_2_11_x86_64",
    "py36-none-manylinux_2_10_x86_64",                              "py36-none-manylinux_2_10_x86_64",
    "py36-none-manylinux_2_9_x86_64",                               "py36-none-manylinux_2_9_x86_64",
    "py36-none-manylinux_2_8_x86_64",                               "py36-none-manylinux_2_8_x86_64",
    "py36-none-manylinux_2_7_x86_64",                               "py36-none-manylinux_2_7_x86_64",
    "py36-none-manylinux_2_6_x86_64",                               "py36-none-manylinux_2_6_x86_64",
    "py36-none-manylinux_2_5_x86_64",                               "py36-none-manylinux_2_5_x86_64",
    "py36-none-manylinux1_x86_64",                                  "py36-none-manylinux1_x86_64",
    "py36-none-linux_x86_64",                                       "py36-none-linux_x86_64",
    "py35-none-manylinux_2_31_x86_64",                        <
    "py35-none-manylinux_2_30_x86_64",                        <
    "py35-none-manylinux_2_29_x86_64",                        <
    "py35-none-manylinux_2_28_x86_64",                        <
    "py35-none-manylinux_2_27_x86_64",                        <
    "py35-none-manylinux_2_26_x86_64",                        <
    "py35-none-manylinux_2_25_x86_64",                        <
    "py35-none-manylinux_2_24_x86_64",                        <
    "py35-none-manylinux_2_23_x86_64",                        <
    "py35-none-manylinux_2_22_x86_64",                        <
    "py35-none-manylinux_2_21_x86_64",                        <
    "py35-none-manylinux_2_20_x86_64",                        <
    "py35-none-manylinux_2_19_x86_64",                        <
    "py35-none-manylinux_2_18_x86_64",                        <
    "py35-none-manylinux_2_17_x86_64",                              "py35-none-manylinux_2_17_x86_64",
    "py35-none-manylinux2014_x86_64",                               "py35-none-manylinux2014_x86_64",
    "py35-none-manylinux_2_16_x86_64",                              "py35-none-manylinux_2_16_x86_64",
    "py35-none-manylinux_2_15_x86_64",                              "py35-none-manylinux_2_15_x86_64",
    "py35-none-manylinux_2_14_x86_64",                              "py35-none-manylinux_2_14_x86_64",
    "py35-none-manylinux_2_13_x86_64",                              "py35-none-manylinux_2_13_x86_64",
    "py35-none-manylinux_2_12_x86_64",                              "py35-none-manylinux_2_12_x86_64",
    "py35-none-manylinux2010_x86_64",                               "py35-none-manylinux2010_x86_64",
    "py35-none-manylinux_2_11_x86_64",                              "py35-none-manylinux_2_11_x86_64",
    "py35-none-manylinux_2_10_x86_64",                              "py35-none-manylinux_2_10_x86_64",
    "py35-none-manylinux_2_9_x86_64",                               "py35-none-manylinux_2_9_x86_64",
    "py35-none-manylinux_2_8_x86_64",                               "py35-none-manylinux_2_8_x86_64",
    "py35-none-manylinux_2_7_x86_64",                               "py35-none-manylinux_2_7_x86_64",
    "py35-none-manylinux_2_6_x86_64",                               "py35-none-manylinux_2_6_x86_64",
    "py35-none-manylinux_2_5_x86_64",                               "py35-none-manylinux_2_5_x86_64",
    "py35-none-manylinux1_x86_64",                                  "py35-none-manylinux1_x86_64",
    "py35-none-linux_x86_64",                                       "py35-none-linux_x86_64",
    "py34-none-manylinux_2_31_x86_64",                        <
    "py34-none-manylinux_2_30_x86_64",                        <
    "py34-none-manylinux_2_29_x86_64",                        <
    "py34-none-manylinux_2_28_x86_64",                        <
    "py34-none-manylinux_2_27_x86_64",                        <
    "py34-none-manylinux_2_26_x86_64",                        <
    "py34-none-manylinux_2_25_x86_64",                        <
    "py34-none-manylinux_2_24_x86_64",                        <
    "py34-none-manylinux_2_23_x86_64",                        <
    "py34-none-manylinux_2_22_x86_64",                        <
    "py34-none-manylinux_2_21_x86_64",                        <
    "py34-none-manylinux_2_20_x86_64",                        <
    "py34-none-manylinux_2_19_x86_64",                        <
    "py34-none-manylinux_2_18_x86_64",                        <
    "py34-none-manylinux_2_17_x86_64",                              "py34-none-manylinux_2_17_x86_64",
    "py34-none-manylinux2014_x86_64",                               "py34-none-manylinux2014_x86_64",
    "py34-none-manylinux_2_16_x86_64",                              "py34-none-manylinux_2_16_x86_64",
    "py34-none-manylinux_2_15_x86_64",                              "py34-none-manylinux_2_15_x86_64",
    "py34-none-manylinux_2_14_x86_64",                              "py34-none-manylinux_2_14_x86_64",
    "py34-none-manylinux_2_13_x86_64",                              "py34-none-manylinux_2_13_x86_64",
    "py34-none-manylinux_2_12_x86_64",                              "py34-none-manylinux_2_12_x86_64",
    "py34-none-manylinux2010_x86_64",                               "py34-none-manylinux2010_x86_64",
    "py34-none-manylinux_2_11_x86_64",                              "py34-none-manylinux_2_11_x86_64",
    "py34-none-manylinux_2_10_x86_64",                              "py34-none-manylinux_2_10_x86_64",
    "py34-none-manylinux_2_9_x86_64",                               "py34-none-manylinux_2_9_x86_64",
    "py34-none-manylinux_2_8_x86_64",                               "py34-none-manylinux_2_8_x86_64",
    "py34-none-manylinux_2_7_x86_64",                               "py34-none-manylinux_2_7_x86_64",
    "py34-none-manylinux_2_6_x86_64",                               "py34-none-manylinux_2_6_x86_64",
    "py34-none-manylinux_2_5_x86_64",                               "py34-none-manylinux_2_5_x86_64",
    "py34-none-manylinux1_x86_64",                                  "py34-none-manylinux1_x86_64",
    "py34-none-linux_x86_64",                                       "py34-none-linux_x86_64",
    "py33-none-manylinux_2_31_x86_64",                        <
    "py33-none-manylinux_2_30_x86_64",                        <
    "py33-none-manylinux_2_29_x86_64",                        <
    "py33-none-manylinux_2_28_x86_64",                        <
    "py33-none-manylinux_2_27_x86_64",                        <
    "py33-none-manylinux_2_26_x86_64",                        <
    "py33-none-manylinux_2_25_x86_64",                        <
    "py33-none-manylinux_2_24_x86_64",                        <
    "py33-none-manylinux_2_23_x86_64",                        <
    "py33-none-manylinux_2_22_x86_64",                        <
    "py33-none-manylinux_2_21_x86_64",                        <
    "py33-none-manylinux_2_20_x86_64",                        <
    "py33-none-manylinux_2_19_x86_64",                        <
    "py33-none-manylinux_2_18_x86_64",                        <
    "py33-none-manylinux_2_17_x86_64",                              "py33-none-manylinux_2_17_x86_64",
    "py33-none-manylinux2014_x86_64",                               "py33-none-manylinux2014_x86_64",
    "py33-none-manylinux_2_16_x86_64",                              "py33-none-manylinux_2_16_x86_64",
    "py33-none-manylinux_2_15_x86_64",                              "py33-none-manylinux_2_15_x86_64",
    "py33-none-manylinux_2_14_x86_64",                              "py33-none-manylinux_2_14_x86_64",
    "py33-none-manylinux_2_13_x86_64",                              "py33-none-manylinux_2_13_x86_64",
    "py33-none-manylinux_2_12_x86_64",                              "py33-none-manylinux_2_12_x86_64",
    "py33-none-manylinux2010_x86_64",                               "py33-none-manylinux2010_x86_64",
    "py33-none-manylinux_2_11_x86_64",                              "py33-none-manylinux_2_11_x86_64",
    "py33-none-manylinux_2_10_x86_64",                              "py33-none-manylinux_2_10_x86_64",
    "py33-none-manylinux_2_9_x86_64",                               "py33-none-manylinux_2_9_x86_64",
    "py33-none-manylinux_2_8_x86_64",                               "py33-none-manylinux_2_8_x86_64",
    "py33-none-manylinux_2_7_x86_64",                               "py33-none-manylinux_2_7_x86_64",
    "py33-none-manylinux_2_6_x86_64",                               "py33-none-manylinux_2_6_x86_64",
    "py33-none-manylinux_2_5_x86_64",                               "py33-none-manylinux_2_5_x86_64",
    "py33-none-manylinux1_x86_64",                                  "py33-none-manylinux1_x86_64",
    "py33-none-linux_x86_64",                                       "py33-none-linux_x86_64",
    "py32-none-manylinux_2_31_x86_64",                        <
    "py32-none-manylinux_2_30_x86_64",                        <
    "py32-none-manylinux_2_29_x86_64",                        <
    "py32-none-manylinux_2_28_x86_64",                        <
    "py32-none-manylinux_2_27_x86_64",                        <
    "py32-none-manylinux_2_26_x86_64",                        <
    "py32-none-manylinux_2_25_x86_64",                        <
    "py32-none-manylinux_2_24_x86_64",                        <
    "py32-none-manylinux_2_23_x86_64",                        <
    "py32-none-manylinux_2_22_x86_64",                        <
    "py32-none-manylinux_2_21_x86_64",                        <
    "py32-none-manylinux_2_20_x86_64",                        <
    "py32-none-manylinux_2_19_x86_64",                        <
    "py32-none-manylinux_2_18_x86_64",                        <
    "py32-none-manylinux_2_17_x86_64",                              "py32-none-manylinux_2_17_x86_64",
    "py32-none-manylinux2014_x86_64",                               "py32-none-manylinux2014_x86_64",
    "py32-none-manylinux_2_16_x86_64",                              "py32-none-manylinux_2_16_x86_64",
    "py32-none-manylinux_2_15_x86_64",                              "py32-none-manylinux_2_15_x86_64",
    "py32-none-manylinux_2_14_x86_64",                              "py32-none-manylinux_2_14_x86_64",
    "py32-none-manylinux_2_13_x86_64",                              "py32-none-manylinux_2_13_x86_64",
    "py32-none-manylinux_2_12_x86_64",                              "py32-none-manylinux_2_12_x86_64",
    "py32-none-manylinux2010_x86_64",                               "py32-none-manylinux2010_x86_64",
    "py32-none-manylinux_2_11_x86_64",                              "py32-none-manylinux_2_11_x86_64",
    "py32-none-manylinux_2_10_x86_64",                              "py32-none-manylinux_2_10_x86_64",
    "py32-none-manylinux_2_9_x86_64",                               "py32-none-manylinux_2_9_x86_64",
    "py32-none-manylinux_2_8_x86_64",                               "py32-none-manylinux_2_8_x86_64",
    "py32-none-manylinux_2_7_x86_64",                               "py32-none-manylinux_2_7_x86_64",
    "py32-none-manylinux_2_6_x86_64",                               "py32-none-manylinux_2_6_x86_64",
    "py32-none-manylinux_2_5_x86_64",                               "py32-none-manylinux_2_5_x86_64",
    "py32-none-manylinux1_x86_64",                                  "py32-none-manylinux1_x86_64",
    "py32-none-linux_x86_64",                                       "py32-none-linux_x86_64",
    "py31-none-manylinux_2_31_x86_64",                        <
    "py31-none-manylinux_2_30_x86_64",                        <
    "py31-none-manylinux_2_29_x86_64",                        <
    "py31-none-manylinux_2_28_x86_64",                        <
    "py31-none-manylinux_2_27_x86_64",                        <
    "py31-none-manylinux_2_26_x86_64",                        <
    "py31-none-manylinux_2_25_x86_64",                        <
    "py31-none-manylinux_2_24_x86_64",                        <
    "py31-none-manylinux_2_23_x86_64",                        <
    "py31-none-manylinux_2_22_x86_64",                        <
    "py31-none-manylinux_2_21_x86_64",                        <
    "py31-none-manylinux_2_20_x86_64",                        <
    "py31-none-manylinux_2_19_x86_64",                        <
    "py31-none-manylinux_2_18_x86_64",                        <
    "py31-none-manylinux_2_17_x86_64",                              "py31-none-manylinux_2_17_x86_64",
    "py31-none-manylinux2014_x86_64",                               "py31-none-manylinux2014_x86_64",
    "py31-none-manylinux_2_16_x86_64",                              "py31-none-manylinux_2_16_x86_64",
    "py31-none-manylinux_2_15_x86_64",                              "py31-none-manylinux_2_15_x86_64",
    "py31-none-manylinux_2_14_x86_64",                              "py31-none-manylinux_2_14_x86_64",
    "py31-none-manylinux_2_13_x86_64",                              "py31-none-manylinux_2_13_x86_64",
    "py31-none-manylinux_2_12_x86_64",                              "py31-none-manylinux_2_12_x86_64",
    "py31-none-manylinux2010_x86_64",                               "py31-none-manylinux2010_x86_64",
    "py31-none-manylinux_2_11_x86_64",                              "py31-none-manylinux_2_11_x86_64",
    "py31-none-manylinux_2_10_x86_64",                              "py31-none-manylinux_2_10_x86_64",
    "py31-none-manylinux_2_9_x86_64",                               "py31-none-manylinux_2_9_x86_64",
    "py31-none-manylinux_2_8_x86_64",                               "py31-none-manylinux_2_8_x86_64",
    "py31-none-manylinux_2_7_x86_64",                               "py31-none-manylinux_2_7_x86_64",
    "py31-none-manylinux_2_6_x86_64",                               "py31-none-manylinux_2_6_x86_64",
    "py31-none-manylinux_2_5_x86_64",                               "py31-none-manylinux_2_5_x86_64",
    "py31-none-manylinux1_x86_64",                                  "py31-none-manylinux1_x86_64",
    "py31-none-linux_x86_64",                                       "py31-none-linux_x86_64",
    "py30-none-manylinux_2_31_x86_64",                        <
    "py30-none-manylinux_2_30_x86_64",                        <
    "py30-none-manylinux_2_29_x86_64",                        <
    "py30-none-manylinux_2_28_x86_64",                        <
    "py30-none-manylinux_2_27_x86_64",                        <
    "py30-none-manylinux_2_26_x86_64",                        <
    "py30-none-manylinux_2_25_x86_64",                        <
    "py30-none-manylinux_2_24_x86_64",                        <
    "py30-none-manylinux_2_23_x86_64",                        <
    "py30-none-manylinux_2_22_x86_64",                        <
    "py30-none-manylinux_2_21_x86_64",                        <
    "py30-none-manylinux_2_20_x86_64",                        <
    "py30-none-manylinux_2_19_x86_64",                        <
    "py30-none-manylinux_2_18_x86_64",                        <
    "py30-none-manylinux_2_17_x86_64",                              "py30-none-manylinux_2_17_x86_64",
    "py30-none-manylinux2014_x86_64",                               "py30-none-manylinux2014_x86_64",
    "py30-none-manylinux_2_16_x86_64",                              "py30-none-manylinux_2_16_x86_64",
    "py30-none-manylinux_2_15_x86_64",                              "py30-none-manylinux_2_15_x86_64",
    "py30-none-manylinux_2_14_x86_64",                              "py30-none-manylinux_2_14_x86_64",
    "py30-none-manylinux_2_13_x86_64",                              "py30-none-manylinux_2_13_x86_64",
    "py30-none-manylinux_2_12_x86_64",                              "py30-none-manylinux_2_12_x86_64",
    "py30-none-manylinux2010_x86_64",                               "py30-none-manylinux2010_x86_64",
    "py30-none-manylinux_2_11_x86_64",                              "py30-none-manylinux_2_11_x86_64",
    "py30-none-manylinux_2_10_x86_64",                              "py30-none-manylinux_2_10_x86_64",
    "py30-none-manylinux_2_9_x86_64",                               "py30-none-manylinux_2_9_x86_64",
    "py30-none-manylinux_2_8_x86_64",                               "py30-none-manylinux_2_8_x86_64",
    "py30-none-manylinux_2_7_x86_64",                               "py30-none-manylinux_2_7_x86_64",
    "py30-none-manylinux_2_6_x86_64",                               "py30-none-manylinux_2_6_x86_64",
    "py30-none-manylinux_2_5_x86_64",                               "py30-none-manylinux_2_5_x86_64",
    "py30-none-manylinux1_x86_64",                                  "py30-none-manylinux1_x86_64",
    "py30-none-linux_x86_64",                                       "py30-none-linux_x86_64",
    "py310-none-any",                                               "py310-none-any",
    "py3-none-any",                                                 "py3-none-any",
    "py39-none-any",                                                "py39-none-any",
    "py38-none-any",                                                "py38-none-any",
    "py37-none-any",                                                "py37-none-any",
    "py36-none-any",                                                "py36-none-any",
    "py35-none-any",                                                "py35-none-any",
    "py34-none-any",                                                "py34-none-any",
    "py33-none-any",                                                "py33-none-any",
    "py32-none-any",                                                "py32-none-any",
    "py31-none-any",                                                "py31-none-any",
    "py30-none-any"                                                 "py30-none-any"
  ],                                                              ],
  "marker_environment": {                                         "marker_environment": {
    "implementation_name": "cpython",                               "implementation_name": "cpython",
    "implementation_version": "3.10.9",                             "implementation_version": "3.10.9",
    "os_name": "posix",                                             "os_name": "posix",
    "platform_machine": "x86_64",                                   "platform_machine": "x86_64",
    "platform_python_implementation": "CPython",                    "platform_python_implementation": "CPython",
    "platform_release": "5.15.79.1-microsoft-standard-WSL2",        "platform_release": "5.15.79.1-microsoft-standard-WSL2",
    "platform_system": "Linux",                                     "platform_system": "Linux",
    "platform_version": "#1 SMP Wed Nov 23 01:01:46 UTC 2022"       "platform_version": "#1 SMP Wed Nov 23 01:01:46 UTC 2022"
    "python_full_version": "3.10.9",                                "python_full_version": "3.10.9",
    "python_version": "3.10",                                       "python_version": "3.10",
    "sys_platform": "linux"                                         "sys_platform": "linux"
  }                                                               }
}                                                               }

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

Note all_platforms uses the first tag for matching only: https://github.com/pantsbuild/pex/blob/7a2db79f12e747b173fd34f12af03934fe513a14/pex/targets.py#L264

I see in your diff above that the builder (right) is a proper subset of the target complete-platforms (left). Did I miss something?

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

@shalabhc why do you see the line you pulled as relevant? Its the block I point to that should be the relevant one.

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

The platform field is then used as the key here:
https://github.com/pantsbuild/pex/blob/7a2db79f12e747b173fd34f12af03934fe513a14/pex/resolve/target_configuration.py#L205-L207

This is then used in the intersection call you linked above, IIUC. So it is only using the complete_platform.platform aka supported_tags[0] for the intersection() here:

resolved_platforms = candidate_interpreter.supported_platforms.intersection( 
         all_platforms 
     ) 

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

Ok, you've gathered some good info here. I'll need some time to process.

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

See my test (slightly modified version of existing test) above - it should succeed if 'subset' is the only criteria.

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

@shalabhc what these seems to boil down to is me having done a poor job of reviewing @huonw's change in #1991. You appear to have a bit of a handle on what's going on here. Do you think you have the fix? I can try and do a better job of reviewing this time if so.

@shalabhc
Copy link
Contributor Author

shalabhc commented Jan 6, 2023

@jsirois I have a fix for my new test but it breaks some existing tests :)

I can tweak it until all tests pass and make a PR - may take a couple of iterations to get it right.

@jsirois
Copy link
Member

jsirois commented Jan 6, 2023

Sounds great. Thanks @shalabhc

@jsirois jsirois mentioned this issue Jan 9, 2023
3 tasks
jsirois pushed a commit that referenced this issue Jan 10, 2023
…lve-local-platforms (#2031)

Fixes #2026.

Previously the interpreter resolution was more strict than necessary.
The `supported_tags` were only checked if the most specific tag of the
complete platform matched the platform of the local interpreter. This
prevented resolution in cases when it was possible and safe (ie all
`supported_tags` of the interpreter as present in the `supported_tags`
of the complete-platform).

Added an additional test for the above case. Fixed existing code and
also improved various existing tests by adding
`expected_complete_platforms`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants