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

Allow changing the entire dependency resolution “context” (Markers, dependency resolution and cross compiling) #10050

Closed
1 task done
jsirois opened this issue Jun 10, 2021 · 27 comments

Comments

@jsirois
Copy link
Contributor

jsirois commented Jun 10, 2021

Description

A compact example from the CLI:

$ python3.9 -mvenv /tmp/pip
$ source /tmp/pip/bin/activate
(pip) $ pip install -U pip
Requirement already satisfied: pip in /tmp/pip/lib/python3.9/site-packages (21.1.1)
Collecting pip
  Using cached pip-21.1.2-py3-none-any.whl (1.5 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.1.1
    Uninstalling pip-21.1.1:
      Successfully uninstalled pip-21.1.1
Successfully installed pip-21.1.2
(pip) $ pip -v --disable-pip-version-check download --dest resolved/ --platform manylinux2014_x86_64 --platform linux_x86_64 --implementation cp --python-version 37 --abi cp37m --only-binary :all: "typing_extensions>=3.7.4.2; python_version < '3.8'"
Created temporary directory: /tmp/pip-req-tracker-a2l1j4g7
Initialized build tracking at /tmp/pip-req-tracker-a2l1j4g7
Created build tracker: /tmp/pip-req-tracker-a2l1j4g7
Entered build tracker: /tmp/pip-req-tracker-a2l1j4g7
Created temporary directory: /tmp/pip-download-essxzk7g
Ignoring typing-extensions: markers 'python_version < "3.8"' don't match your environment
Created temporary directory: /tmp/pip-unpack-o4qrlogh
Removed build tracker: '/tmp/pip-req-tracker-a2l1j4g7'

Here the ambient interpreter is a CPython 3.9 interpreter but the requested TargetPython is elsewise.

Expected behavior

It seems Pip should become aware of whether the TargetPython is the current Python or not. When the TargetPython is not the current Python, Pip should have a different strategy for evaluating environment markers. There are a few behaviors that make more sense than the current evaluation of markers in the wrong context:

  1. Fail the resolve on the grounds that Pip does not have enough information to evaluate all possible environment markers in the context of a foreign TargetPython.
  2. Run the resolve without evaluating environment markers at all on the same grounds as 1. Defer evaluation to use-time (install).
  3. Partially evaluate environment markers when enough information is available. In this case, the marker example is python_version and that happens to be completewly determined by TargetPython py_version_info (--python-version) and leave the un-evaluatable markers for install time evaluation as in 2.

pip version

21.1.2

Python version

CPython 3.9.5

OS

Linux

How to Reproduce

See description.

Output

See description.

Code of Conduct

@jsirois jsirois added S: needs triage Issues/PRs that need to be triaged type: bug A confirmed bug or unintended behavior labels Jun 10, 2021
@uranusjr
Copy link
Member

--python-version (and other flags) only applies to wheel tags, not environment markers. I don’t think there is currently a way to override marker evaluation. IIRC there’s already an issue on this, but I can’t find it at the moment.

@uranusjr uranusjr removed S: needs triage Issues/PRs that need to be triaged type: bug A confirmed bug or unintended behavior labels Jun 12, 2021
@uranusjr
Copy link
Member

So I guess there are two parts to this:

  1. The documentation and CLI help message should state clearly what --python-version et al. do (and what they do not).
  2. Feature request to override environment markers.

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

Not to quibble, but the environment markers handling as it exists here is a bug. There need be no new feature, just fixing the bug of using the ambient interpreter to evaluate environment marker when a foreign interpreter has been specified.

@uranusjr
Copy link
Member

It’s not that simple. There is not a one-to-one relation between wheel tags and environment marker values, so it is not possible for pip in infer the interpreter name it needs from a wheel tag. The implementation seems obvious if you only consider officially-distributed CPython builds, but there are a ton of edge cases, mapping the interpreter names is not viable.

@jsirois jsirois changed the title Reolution for TargetPython != current python evaluates markers against current python. Resolution for TargetPython != current python evaluates markers against current python. Jun 12, 2021
@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

It’s not that simple.

I think the fact that this is a bug is clear. I agree fixing it may not be simple. I don't think that undoes the bug-worthiness though.

I laid out a few solutions above. There are probably others.

  1. The current status quo: When resolving for a foreign interpreter, use its tag set to match wheels but check environment markers with the current interpreter instead.
  2. Fail the resolve whenever resolving for a foreign interpreter and any environment markers are encountered whatsoever in the course of the resolve.
  3. Run the resolve using the tag set of the foreign interpreter to match wheels and skip evaluation of any environment markers encountered whatsoever in the resolve.
  4. Run the resolve using the tag set of the foreign interpreter to match wheels and skip evaluation of any environment markers encountered that cannot be checked from known information about the foreign interpreter.

Hopefully we agree 0 is a bug. The user asked for the resolve to be for a foreign interpreter and yet the current interpreter was used to evaluate environment markers. This could lead to incorrect omission of certain distributions as in the case reported.

It seems to me adopting 1 effectively kills the the concept of Pip supporting foreign interpreters at all (--platform, --implementation, --python-version, --abi). I, for one, would very much like to see support for foreign interpreters continued.

It seems to me 2 is a viable solution. The end result is that the resolve (download) is too big. The resolve is useable though. I could transport the result of the resolve over to a machine with the foreign interpreter and pip install those distributions with the foreign interpreter, which becomes the current interpreter and all environment marker evaluation is now correct. As a result, some of the resolved distributions won't be installed. So the pip download, trasport, pip install sequence now works correctly at the cost of downloading and transporting more than we needed to since environment markers were impossible to evaluate correctly on the download machine without the foreign interpreter present.

Finally, 3 would just be an optimization of the too-big problem described above for 2. Iff there are environment markers that can be be evaluated based on the foreign interpreter --platform, --implementation, --python-version and --abi, then evaluate those, potentially trimming down the download set size ahead of transport.

What do you think about solution 2? I'd be happy to take a crack at implementing that if you agree it makes sense.

@pfmoore
Copy link
Member

pfmoore commented Jun 12, 2021

To try to clarify the situation, let me ask a question. You say "the user asked for the resolve to be for a foreign interpreter". How did the user do that, and what even do you mean by "the resolve to be for a foreign interpreter"? The pip documentation doesn't to my knowledge ever use that term.

The documentation for --platform, for example, simply says "Only use wheels compatible with ." You may not like the current behaviour, you may even feel that you can argue that the current behaviour isn't as useful as your preferred behaviour, but nevertheless, it does match what the documentation says it will do.

If you want the documentation and behaviour of --platform to be changed, for example to "Only use wheels compatible with , and also skip evaluation of markers", then that's a change in behaviour - and it may not suit some people who are using the --platform option expecting it to work as currently documented. So we have to consider backward compatibility.

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

So, Pip download docs say: https://pip.pypa.io/en/stable/cli/pip_download/#overview

... pip download with the --platform, --python-version, --implementation, and --abi options provides the ability to fetch dependencies for an interpreter and system other than the ones that pip is running on. 

The word foreign is not used, but presumably you'd agree it's a fine abbreviation for the intent expressed there. My claim this is a bug for the example I led with in this issue description seems valid. pip download does not "fetch dependencies for an interpreter and system other than the ones that pip is running on" in that case. The reason it doesn't is because it evaluates environment markers using the wrong interpreter.

@pradyunsg
Copy link
Member

pradyunsg commented Jun 12, 2021

(BTW, This seems to be getting to a point where folks are talking past each other. I suggest we all make sure we're calm before posting a comment here. If you're not calm, please don't mind me suggesting that you come back to this after a little break.)

So... I'm half-dazed rn and typing this on a phone for $reasons, so please treat what I'm trying to say here as a "steel-man" argument (i.e. treat it as favourably as possible, opposite of strawman argument). Also, apologies if something isn't 100% coherent here for the same reasons.


I think enabling pip to install into an interpreter other than the one it's running on is a good idea. It's come up before and I think most (all?) pip maintainers are on board for that. I am not a 100% fit at the moment, so I'm not gonna look for the issue but there's a bunch of discussion on this somewhere in this issue tracker.

However, I don't think that we should do that by changing what the marker evaluation environment is, based on the current CLI options that the user gives pip. It feels like asking a user to walk across a tightrope to make their use case happen. TBH I'm genuinely amazed at the amount of effort you've likely had put into that command line that posted in OP. Honestly, that looks like someone had to walk across that tightrope multiple times, had some painful falls and you've powered through it - kudos to you!

Chances are, the folks reading this have the required context to figure out how to cross the tightrope -- i.e. come up with a CLI invocation like that -- probably because we've got hard-fought knowledge of how to figure it out (either by writing the code, or reading+understanding it). I don't think this usecase needs to be treated like that though.

I think we should make it possible for the user to specify a different Python interpreter to install into directly as a CLI argument, and pip should create a subprocess to get all the relevant information from that interpreter (paths to install to AKA scheme paths, platform information, and relevant values for the markers) before starting the resolution process. It'd look something like:

python3.Y -m pip install --alternate-interpreter /path/to/python3.x -r requirements.txt

This has 3 main advantages:

  • it more directly addresses the underlying usecase of "install for a different Python", without needing to have CLI invocations that need deep knowledge of how pip does installations.
  • it's significantly easier to communicate about and (likely) easier to maintain.
  • it has no backward compatibility concerns, since this would be a new feature behind a new flag.

However, this would need a decent amount of work. This is likely more work than any of the approaches proposed so far. The reason this is stuck is because it is a tricky problem -- due to the context needed to figuring out the implementation and figuring out how it interacts with all the other parts of pip. There's open questions here for sure, but I think this is both feasible and a reasonably doable task.

Thoughts?

PS: I removed a few paragraphs about why the proposed solutions are tricky, because it's a lot of words to elaborate on something that diluted the rest of this comment anyway.

@pradyunsg
Copy link
Member

pradyunsg commented Jun 12, 2021

Also, re-reading this, I feel like we're in a situation where:

  • user reports a bug, describing what they're trying to do adn why they think that should work. And they have a valid use case.
  • Maintainers are saying that each of the knobs you're using is doing it's job but isn't the right tool for the task.
  • The knob the user actually needs doesn't actually exist, but the user got pretty close to what they want with the existing knobs they've tried.

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

I think you're overstating the tightrope. Here's my original command line with illusrative bits removed (-v --disable-pip-version-check was only used to get extra output but not too much extra output for the purposes of providing a useful but readable bug report):

pip \
--dest resolved/ \
--platform manylinux2014_x86_64 --platform linux_x86_64 \
--implementation cp \
--python-version 37 \
--abi cp37m \
--only-binary :all: \
"typing_extensions>=3.7.4.2; python_version < '3.8'"

Every part of that invocation is directly spelled out by pip download high level documentation here: https://pip.pypa.io/en/stable/cli/pip_download/#overview in the paragraph I snipped in my respnse to Paul. So its really not a tightrope - the Pip team documented this use case well and it's easy to follow. The requirement string is odd in the context I gave the example - but that's only for a concise illustration of the problem. In the root issue that requirement is a transitive one and none of the top level requirements have markers.

As to --alternate-interpreter - I like it. The thing I like is it unifies the 4 existing arguments needed to get pip download to work for a foreign interpreter as described in the docs for pip download. That's much less error prone and conceptually simpler. That said, it does not cover all the cases the existing quad set of arguments does: namely if I want to resolve for an interpreter I don't have on my machine. Lets say I only have Python 3.6 but I want to resolve for 3.9. Or, more interestingly, I want to resolve for mac but I'm on Linux. Pants and Pex have used Pip download to be able to do this with great effect for quite some time. In Pex, we use you idea by allowing either --python to specify an alternate python on the local machine to resolve for or --platform. The Pex definition for platform though is different from Pip and includes all 4 components in a specified way. We then break out those 4 components and send them as a quad to Pip.

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

Also, re-reading this, I feel like we're in a situation where:

  • user reports a bug, describing what they're trying to do adn why they think that should work. And they have a valid use case.
  • Maintainers are saying that each of the knobs you're using is doing it's job but isn't the right tool for the task.
  • The knob the user actually needs doesn't actually exist, but the user got pretty close to what they want with the existing knobs they've tried.

As to your second bullet point I do think Pip's own high level pip download docs, do say pip download should do what I'm expecting. Perhaps those docs are in conflict with the CLI level --help Paul referenced and they should be removed?

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

FWICT this was the intent of the original commit adding pip download support for the quad:
bbe99ce

I may be reading that wrong.

@jsirois
Copy link
Contributor Author

jsirois commented Jun 12, 2021

I've gathered a fuller history of this feature here for perusal if it helps:

Idea for pip download:

PR work for pip download:

Idea / work for download supporting foreign interpreters:

jsirois added a commit to jsirois/pex that referenced this issue Jun 21, 2021
Previously we relied on Pip, but it turns out Pip does not correctly
handle environment markers for `--platform` + `--implementation` +
`--python-version` + `--abi` (aka "foreign") resolves. Instead of
waiting on resolution of pypa/pip#10050, patch
Pip's vendored copy of `packaging` to see a default environment that
corresponds to what we know about the foreign platform. It turns out
what we know covers the most commonly used environment markers making
this workaround both safe and useful in practice.

Fixes pex-tool#1366
@jsirois
Copy link
Contributor Author

jsirois commented Jun 21, 2021

I've worked around this bug over in pex-tool/pex#1367. I'd still be happy to work on a fix if any of you come around to seeing this as a bug by your own docs. If you still see this as not a bug, feel free to close.

jsirois added a commit to pex-tool/pex that referenced this issue Jun 21, 2021
Previously we relied on Pip, but it turns out Pip does not correctly
handle environment markers for `--platform` + `--implementation` +
`--python-version` + `--abi` (aka "foreign") resolves. Instead of
waiting on resolution of pypa/pip#10050, patch
Pip's vendored copy of `packaging` to see a default environment that
corresponds to what we know about the foreign platform. It turns out
what we know covers the most commonly used environment markers making
this workaround both safe and useful in practice.

Fixes #1366
@uranusjr
Copy link
Member

To meaningfully progress on this, the entire “foreign platform” logic needs to be redesigned and exposed with better abstraction in the CLI. This is similar to the custom installation scheme problem; the built-in schemes are limited, and pip cannot hard-code all possible things to make this work on its own, so it must accept the user to supply some sort of custom declaration “I want you to behave like this”.

@jsirois
Copy link
Contributor Author

jsirois commented Apr 18, 2022

FWIW, Pex eventually progressed to allowing you to fully patch the marker environment and supported tags to take away any guesswork. So the idea is the CLI accepts a json blob (or file with a JSON blob inside) that fully defines these values.

Say I'm a Pip user on Mac and I want to target my production Docker image pypy on Linux. I can generate the needed info by running this in the docker image:

$ pex3 interpreter inspect --python ~/.pyenv/versions/pypy3.8-7.3.7/bin/python --markers --tags | jq .
{
...
  "compatible_tags": [
    "pp38-pypy38_pp73-manylinux_2_35_x86_64",
    "pp38-pypy38_pp73-manylinux_2_34_x86_64",
...
    "py30-none-manylinux_2_5_x86_64",
    "py30-none-manylinux1_x86_64",
    "py30-none-linux_x86_64",
    "py38-none-any",
    "py3-none-any",
    "py37-none-any",
    "py36-none-any",
    "py35-none-any",
    "py34-none-any",
    "py33-none-any",
    "py32-none-any",
    "py31-none-any",
    "py30-none-any"
  ],
  "marker_environment": {
    "implementation_name": "pypy",
    "implementation_version": "7.3.7",
    "os_name": "posix",
    "platform_machine": "x86_64",
    "platform_python_implementation": "PyPy",
    "platform_release": "5.17.3-arch1-1",
    "platform_system": "Linux",
    "platform_version": "#1 SMP PREEMPT Thu, 14 Apr 2022 01:18:36 +0000",
    "python_full_version": "3.8.12",
    "python_version": "3.8",
    "sys_platform": "linux"
  }
}

Then back on my Mac, I can pass that JSON blob to the CLI to fully characterize the foreign platform for the purposes of resolving (pip downloading) the required dists for that platform.

@uranusjr
Copy link
Member

Yeah I think that’s more or less what pip needs to be able to accept eventually, except I’m not sure how that can be done in a user-friendly way in the CLI. Maybe we need to invent some sort of “environment configuration” file format so the user can do something like pip download --env-spec spec.json ...

@jsirois
Copy link
Contributor Author

jsirois commented Apr 18, 2022

@amk1969
Copy link

amk1969 commented Apr 26, 2022

My use case is attempt to download packages with dependencies for install in a different python version. This is how I understand the purpose of pip option --python-version

$ pip3 download Django==4.0.4 --python-version 3.9 --only-binary=:all: 
Collecting Django==4.0.4
  Using cached Django-4.0.4-py3-none-any.whl (8.0 MB)
ERROR: Could not find a version that satisfies the requirement backports.zoneinfo; python_version < "3.9" (from django) (from versions: none)
ERROR: No matching distribution found for backports.zoneinfo; python_version < "3.9"

Package setup.cfg contains two relevant lines:

python_requires = >=3.8
install_requires = backports.zoneinfo; python_version<"3.9"

The first check was apparently considering the requested version, otherwise the process would fail immediately.
The second one compared with version of running python and triggered attempt to load nonexistent package.

The duplicate bug #11010 is a closer match, reporting here hoping for a fix soon. Eventually an update in the documentation that this is not a valid use case and one should maintain several virtual environments, one for every target version needed.

@pradyunsg
Copy link
Member

I think adding an environment specification file and deprecating the existing mechanisms for "install/download things while pretending to be a different interpreter" is a good action plan for this.

Note that this would only make sense for pip download -- and I think those options existing for pip install and pip wheel is a mistake anyway. :)

@pradyunsg
Copy link
Member

Adding a cross-reference to https://discuss.python.org/t/what-information-is-needed-to-choose-the-right-dependency-file-for-a-platform/13447 since that is related to this topic.

@brettcannon
Copy link
Member

brettcannon commented Apr 29, 2022

Maybe we need to invent some sort of “environment configuration” file format so the user can do something like pip download --env-spec spec.json ...

This is actually what I have been thinking is necessary as well, hence ...

Adding a cross-reference to https://discuss.python.org/t/what-information-is-needed-to-choose-the-right-dependency-file-for-a-platform/13447 since that is related to this topic.

😁

This would allow for a future where you could build an e.g. lock file for a different platform as all the input data about the target platform is contained in the JSON file (and I purposefully said JSON as this is a machine-readable format, not something a human being needs to edit). This starts to come into play when you have your local dev environment and your production environment that differ (e.g. macOS vs Linux).

And I can't speak for @pradyunsg , but I would support a PEP on this (and yes, I'm willing to help write it) and an implementation in packaging for generating/consuming such a platform spec file.

@jsirois
Copy link
Contributor Author

jsirois commented Apr 29, 2022

This would allow for a future where you could build an e.g. lock file for a different platform as all the input data about the target platform is contained in the JSON file

Exactly. Pex uses these "--complete-platform" JSON blobs to allow that and a few other use cases today (using a vendored Pip).

@jsirois
Copy link
Contributor Author

jsirois commented Apr 30, 2022

I'm willing to be the PEP author for this @brettcannon and write up a packaging PR for the reference implementation. I'll certainly need a bit of guidance, but as the primary Pex maintainer it's long past due I get more involved with the PyPA and chip in.

The use case you mention in Packaging discuss here is implemented today in Pex using a vendored pip with minimal runtime patches. I'd love to be able to remove those runtime patches and this would get that ball rolling.

In this case, the lock file format can contain more than one lock and here we get two created at once, one for each --complete-platform requested.:

$ pex3 lock create --complete-platform cp39-cp39-macosx_12_0_x86_64.json --complete-platform cp39-cp39-manylinux_2_26_x86_64.json requests[security] --indent 2
{
  "allow_builds": true,
  "allow_prereleases": false,
  "allow_wheels": true,
  "build_isolation": true,
  "constraints": [],
  "locked_resolves": [
    {
      "locked_requirements": [
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569",
              "url": "https://files.pythonhosted.org/packages/37/45/946c02767aabb873146011e665728b680884cd8fe70dde973c640e45b775/certifi-2021.10.8-py2.py3-none-any.whl"
            }
          ],
          "project_name": "certifi",
          "requires_dists": [],
          "requires_python": null,
          "version": "2021.10.8"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df",
              "url": "https://files.pythonhosted.org/packages/06/b3/24afc8868eba069a7f03650ac750a778862dc34941a4bebeb58706715726/charset_normalizer-2.0.12-py3-none-any.whl"
            }
          ],
          "project_name": "charset-normalizer",
          "requires_dists": [
            "unicodedata2; extra == \"unicode_backport\""
          ],
          "requires_python": ">=3.5.0",
          "version": "2.0.12"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
              "url": "https://files.pythonhosted.org/packages/04/a2/d918dcd22354d8958fe113e1a3630137e0fc8b44859ade3063982eacd2a4/idna-3.3-py3-none-any.whl"
            }
          ],
          "project_name": "idna",
          "requires_dists": [],
          "requires_python": ">=3.5",
          "version": "3.3"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d",
              "url": "https://files.pythonhosted.org/packages/2d/61/08076519c80041bc0ffa1a8af0cbd3bf3e2b62af10435d269a9d0f40564d/requests-2.27.1-py2.py3-none-any.whl"
            }
          ],
          "project_name": "requests",
          "requires_dists": [
            "PySocks!=1.5.7,>=1.5.6; extra == \"socks\"",
            "certifi>=2017.4.17",
            "chardet<5,>=3.0.2; extra == \"use_chardet_on_py3\"",
            "chardet<5,>=3.0.2; python_version < \"3\"",
            "charset-normalizer~=2.0.0; python_version >= \"3\"",
            "idna<3,>=2.5; python_version < \"3\"",
            "idna<4,>=2.5; python_version >= \"3\"",
            "urllib3<1.27,>=1.21.1",
            "win-inet-pton; (sys_platform == \"win32\" and python_version == \"2.7\") and extra == \"socks\""
          ],
          "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7",
          "version": "2.27.1"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
              "url": "https://files.pythonhosted.org/packages/ec/03/062e6444ce4baf1eac17a6a0ebfe36bb1ad05e1df0e20b110de59c278498/urllib3-1.26.9-py2.py3-none-any.whl"
            }
          ],
          "project_name": "urllib3",
          "requires_dists": [
            "PySocks!=1.5.7,<2.0,>=1.5.6; extra == \"socks\"",
            "brotli>=1.0.9; ((os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation == \"CPython\") and extra == \"brotli\"",
            "brotlicffi>=0.8.0; ((os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\") and extra == \"brotli\"",
            "brotlipy>=0.6.0; (os_name == \"nt\" and python_version < \"3\") and extra == \"brotli\"",
            "certifi; extra == \"secure\"",
            "cryptography>=1.3.4; extra == \"secure\"",
            "idna>=2.0.0; extra == \"secure\"",
            "ipaddress; python_version == \"2.7\" and extra == \"secure\"",
            "pyOpenSSL>=0.14; extra == \"secure\""
          ],
          "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,<4,>=2.7",
          "version": "1.26.9"
        }
      ],
      "platform_tag": [
        "cp39",
        "cp39",
        "macosx_12_0_x86_64"
      ]
    },
    {
      "locked_requirements": [
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569",
              "url": "https://files.pythonhosted.org/packages/37/45/946c02767aabb873146011e665728b680884cd8fe70dde973c640e45b775/certifi-2021.10.8-py2.py3-none-any.whl"
            }
          ],
          "project_name": "certifi",
          "requires_dists": [],
          "requires_python": null,
          "version": "2021.10.8"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df",
              "url": "https://files.pythonhosted.org/packages/06/b3/24afc8868eba069a7f03650ac750a778862dc34941a4bebeb58706715726/charset_normalizer-2.0.12-py3-none-any.whl"
            }
          ],
          "project_name": "charset-normalizer",
          "requires_dists": [
            "unicodedata2; extra == \"unicode_backport\""
          ],
          "requires_python": ">=3.5.0",
          "version": "2.0.12"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
              "url": "https://files.pythonhosted.org/packages/04/a2/d918dcd22354d8958fe113e1a3630137e0fc8b44859ade3063982eacd2a4/idna-3.3-py3-none-any.whl"
            }
          ],
          "project_name": "idna",
          "requires_dists": [],
          "requires_python": ">=3.5",
          "version": "3.3"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d",
              "url": "https://files.pythonhosted.org/packages/2d/61/08076519c80041bc0ffa1a8af0cbd3bf3e2b62af10435d269a9d0f40564d/requests-2.27.1-py2.py3-none-any.whl"
            }
          ],
          "project_name": "requests",
          "requires_dists": [
            "PySocks!=1.5.7,>=1.5.6; extra == \"socks\"",
            "certifi>=2017.4.17",
            "chardet<5,>=3.0.2; extra == \"use_chardet_on_py3\"",
            "chardet<5,>=3.0.2; python_version < \"3\"",
            "charset-normalizer~=2.0.0; python_version >= \"3\"",
            "idna<3,>=2.5; python_version < \"3\"",
            "idna<4,>=2.5; python_version >= \"3\"",
            "urllib3<1.27,>=1.21.1",
            "win-inet-pton; (sys_platform == \"win32\" and python_version == \"2.7\") and extra == \"socks\""
          ],
          "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7",
          "version": "2.27.1"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
              "url": "https://files.pythonhosted.org/packages/ec/03/062e6444ce4baf1eac17a6a0ebfe36bb1ad05e1df0e20b110de59c278498/urllib3-1.26.9-py2.py3-none-any.whl"
            }
          ],
          "project_name": "urllib3",
          "requires_dists": [
            "PySocks!=1.5.7,<2.0,>=1.5.6; extra == \"socks\"",
            "brotli>=1.0.9; ((os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation == \"CPython\") and extra == \"brotli\"",
            "brotlicffi>=0.8.0; ((os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\") and extra == \"brotli\"",
            "brotlipy>=0.6.0; (os_name == \"nt\" and python_version < \"3\") and extra == \"brotli\"",
            "certifi; extra == \"secure\"",
            "cryptography>=1.3.4; extra == \"secure\"",
            "idna>=2.0.0; extra == \"secure\"",
            "ipaddress; python_version == \"2.7\" and extra == \"secure\"",
            "pyOpenSSL>=0.14; extra == \"secure\""
          ],
          "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,<4,>=2.7",
          "version": "1.26.9"
        }
      ],
      "platform_tag": [
        "cp39",
        "cp39",
        "manylinux_2_26_x86_64"
      ]
    }
  ],
  "path_mappings": {},
  "pex_version": "2.1.84",
  "prefer_older_binary": false,
  "requirements": [
    "requests[security]"
  ],
  "requires_python": [],
  "resolver_version": "pip-legacy-resolver",
  "style": "strict",
  "transitive": true,
  "use_pep517": null
}

Where:

cp39-cp39-macosx_12_0_x86_64.json
{
  "marker_environment": {
    "implementation_name": "cpython",
    "implementation_version": "3.9.12",
    "os_name": "posix",
    "platform_machine": "x86_64",
    "platform_python_implementation": "CPython",
    "platform_release": "21.4.0",
    "platform_system": "Darwin",
    "platform_version": "Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64",
    "python_full_version": "3.9.12",
    "python_version": "3.9",
    "sys_platform": "darwin"
  },
  "compatible_tags": [
    "cp39-cp39-macosx_12_0_x86_64",
    "cp39-cp39-macosx_12_0_intel",
    "cp39-cp39-macosx_12_0_fat64",
    "cp39-cp39-macosx_12_0_fat32",
    "cp39-cp39-macosx_12_0_universal2",
    "cp39-cp39-macosx_12_0_universal",
    "cp39-cp39-macosx_11_0_x86_64",
    "cp39-cp39-macosx_11_0_intel",
    "cp39-cp39-macosx_11_0_fat64",
    "cp39-cp39-macosx_11_0_fat32",
    "cp39-cp39-macosx_11_0_universal2",
    "cp39-cp39-macosx_11_0_universal",
    "cp39-cp39-macosx_10_16_x86_64",
    "cp39-cp39-macosx_10_16_intel",
    "cp39-cp39-macosx_10_16_fat64",
    "cp39-cp39-macosx_10_16_fat32",
    "cp39-cp39-macosx_10_16_universal2",
    "cp39-cp39-macosx_10_16_universal",
    "cp39-cp39-macosx_10_15_x86_64",
    "cp39-cp39-macosx_10_15_intel",
    "cp39-cp39-macosx_10_15_fat64",
    "cp39-cp39-macosx_10_15_fat32",
    "cp39-cp39-macosx_10_15_universal2",
    "cp39-cp39-macosx_10_15_universal",
    "cp39-cp39-macosx_10_14_x86_64",
    "cp39-cp39-macosx_10_14_intel",
    "cp39-cp39-macosx_10_14_fat64",
    "cp39-cp39-macosx_10_14_fat32",
    "cp39-cp39-macosx_10_14_universal2",
    "cp39-cp39-macosx_10_14_universal",
    "cp39-cp39-macosx_10_13_x86_64",
    "cp39-cp39-macosx_10_13_intel",
    "cp39-cp39-macosx_10_13_fat64",
    "cp39-cp39-macosx_10_13_fat32",
    "cp39-cp39-macosx_10_13_universal2",
    "cp39-cp39-macosx_10_13_universal",
    "cp39-cp39-macosx_10_12_x86_64",
    "cp39-cp39-macosx_10_12_intel",
    "cp39-cp39-macosx_10_12_fat64",
    "cp39-cp39-macosx_10_12_fat32",
    "cp39-cp39-macosx_10_12_universal2",
    "cp39-cp39-macosx_10_12_universal",
    "cp39-cp39-macosx_10_11_x86_64",
    "cp39-cp39-macosx_10_11_intel",
    "cp39-cp39-macosx_10_11_fat64",
    "cp39-cp39-macosx_10_11_fat32",
    "cp39-cp39-macosx_10_11_universal2",
    "cp39-cp39-macosx_10_11_universal",
    "cp39-cp39-macosx_10_10_x86_64",
    "cp39-cp39-macosx_10_10_intel",
    "cp39-cp39-macosx_10_10_fat64",
    "cp39-cp39-macosx_10_10_fat32",
    "cp39-cp39-macosx_10_10_universal2",
    "cp39-cp39-macosx_10_10_universal",
    "cp39-cp39-macosx_10_9_x86_64",
    "cp39-cp39-macosx_10_9_intel",
    "cp39-cp39-macosx_10_9_fat64",
    "cp39-cp39-macosx_10_9_fat32",
    "cp39-cp39-macosx_10_9_universal2",
    "cp39-cp39-macosx_10_9_universal",
    "cp39-cp39-macosx_10_8_x86_64",
    "cp39-cp39-macosx_10_8_intel",
    "cp39-cp39-macosx_10_8_fat64",
    "cp39-cp39-macosx_10_8_fat32",
    "cp39-cp39-macosx_10_8_universal2",
    "cp39-cp39-macosx_10_8_universal",
    "cp39-cp39-macosx_10_7_x86_64",
    "cp39-cp39-macosx_10_7_intel",
    "cp39-cp39-macosx_10_7_fat64",
    "cp39-cp39-macosx_10_7_fat32",
    "cp39-cp39-macosx_10_7_universal2",
    "cp39-cp39-macosx_10_7_universal",
    "cp39-cp39-macosx_10_6_x86_64",
    "cp39-cp39-macosx_10_6_intel",
    "cp39-cp39-macosx_10_6_fat64",
    "cp39-cp39-macosx_10_6_fat32",
    "cp39-cp39-macosx_10_6_universal2",
    "cp39-cp39-macosx_10_6_universal",
    "cp39-cp39-macosx_10_5_x86_64",
    "cp39-cp39-macosx_10_5_intel",
    "cp39-cp39-macosx_10_5_fat64",
    "cp39-cp39-macosx_10_5_fat32",
    "cp39-cp39-macosx_10_5_universal2",
    "cp39-cp39-macosx_10_5_universal",
    "cp39-cp39-macosx_10_4_x86_64",
    "cp39-cp39-macosx_10_4_intel",
    "cp39-cp39-macosx_10_4_fat64",
    "cp39-cp39-macosx_10_4_fat32",
    "cp39-cp39-macosx_10_4_universal2",
    "cp39-cp39-macosx_10_4_universal",
    "cp39-abi3-macosx_12_0_x86_64",
    "cp39-abi3-macosx_12_0_intel",
    "cp39-abi3-macosx_12_0_fat64",
    "cp39-abi3-macosx_12_0_fat32",
    "cp39-abi3-macosx_12_0_universal2",
    "cp39-abi3-macosx_12_0_universal",
    "cp39-abi3-macosx_11_0_x86_64",
    "cp39-abi3-macosx_11_0_intel",
    "cp39-abi3-macosx_11_0_fat64",
    "cp39-abi3-macosx_11_0_fat32",
    "cp39-abi3-macosx_11_0_universal2",
    "cp39-abi3-macosx_11_0_universal",
    "cp39-abi3-macosx_10_16_x86_64",
    "cp39-abi3-macosx_10_16_intel",
    "cp39-abi3-macosx_10_16_fat64",
    "cp39-abi3-macosx_10_16_fat32",
    "cp39-abi3-macosx_10_16_universal2",
    "cp39-abi3-macosx_10_16_universal",
    "cp39-abi3-macosx_10_15_x86_64",
    "cp39-abi3-macosx_10_15_intel",
    "cp39-abi3-macosx_10_15_fat64",
    "cp39-abi3-macosx_10_15_fat32",
    "cp39-abi3-macosx_10_15_universal2",
    "cp39-abi3-macosx_10_15_universal",
    "cp39-abi3-macosx_10_14_x86_64",
    "cp39-abi3-macosx_10_14_intel",
    "cp39-abi3-macosx_10_14_fat64",
    "cp39-abi3-macosx_10_14_fat32",
    "cp39-abi3-macosx_10_14_universal2",
    "cp39-abi3-macosx_10_14_universal",
    "cp39-abi3-macosx_10_13_x86_64",
    "cp39-abi3-macosx_10_13_intel",
    "cp39-abi3-macosx_10_13_fat64",
    "cp39-abi3-macosx_10_13_fat32",
    "cp39-abi3-macosx_10_13_universal2",
    "cp39-abi3-macosx_10_13_universal",
    "cp39-abi3-macosx_10_12_x86_64",
    "cp39-abi3-macosx_10_12_intel",
    "cp39-abi3-macosx_10_12_fat64",
    "cp39-abi3-macosx_10_12_fat32",
    "cp39-abi3-macosx_10_12_universal2",
    "cp39-abi3-macosx_10_12_universal",
    "cp39-abi3-macosx_10_11_x86_64",
    "cp39-abi3-macosx_10_11_intel",
    "cp39-abi3-macosx_10_11_fat64",
    "cp39-abi3-macosx_10_11_fat32",
    "cp39-abi3-macosx_10_11_universal2",
    "cp39-abi3-macosx_10_11_universal",
    "cp39-abi3-macosx_10_10_x86_64",
    "cp39-abi3-macosx_10_10_intel",
    "cp39-abi3-macosx_10_10_fat64",
    "cp39-abi3-macosx_10_10_fat32",
    "cp39-abi3-macosx_10_10_universal2",
    "cp39-abi3-macosx_10_10_universal",
    "cp39-abi3-macosx_10_9_x86_64",
    "cp39-abi3-macosx_10_9_intel",
    "cp39-abi3-macosx_10_9_fat64",
    "cp39-abi3-macosx_10_9_fat32",
    "cp39-abi3-macosx_10_9_universal2",
    "cp39-abi3-macosx_10_9_universal",
    "cp39-abi3-macosx_10_8_x86_64",
    "cp39-abi3-macosx_10_8_intel",
    "cp39-abi3-macosx_10_8_fat64",
    "cp39-abi3-macosx_10_8_fat32",
    "cp39-abi3-macosx_10_8_universal2",
    "cp39-abi3-macosx_10_8_universal",
    "cp39-abi3-macosx_10_7_x86_64",
    "cp39-abi3-macosx_10_7_intel",
    "cp39-abi3-macosx_10_7_fat64",
    "cp39-abi3-macosx_10_7_fat32",
    "cp39-abi3-macosx_10_7_universal2",
    "cp39-abi3-macosx_10_7_universal",
    "cp39-abi3-macosx_10_6_x86_64",
    "cp39-abi3-macosx_10_6_intel",
    "cp39-abi3-macosx_10_6_fat64",
    "cp39-abi3-macosx_10_6_fat32",
    "cp39-abi3-macosx_10_6_universal2",
    "cp39-abi3-macosx_10_6_universal",
    "cp39-abi3-macosx_10_5_x86_64",
    "cp39-abi3-macosx_10_5_intel",
    "cp39-abi3-macosx_10_5_fat64",
    "cp39-abi3-macosx_10_5_fat32",
    "cp39-abi3-macosx_10_5_universal2",
    "cp39-abi3-macosx_10_5_universal",
    "cp39-abi3-macosx_10_4_x86_64",
    "cp39-abi3-macosx_10_4_intel",
    "cp39-abi3-macosx_10_4_fat64",
    "cp39-abi3-macosx_10_4_fat32",
    "cp39-abi3-macosx_10_4_universal2",
    "cp39-abi3-macosx_10_4_universal",
    "cp39-none-macosx_12_0_x86_64",
    "cp39-none-macosx_12_0_intel",
    "cp39-none-macosx_12_0_fat64",
    "cp39-none-macosx_12_0_fat32",
    "cp39-none-macosx_12_0_universal2",
    "cp39-none-macosx_12_0_universal",
    "cp39-none-macosx_11_0_x86_64",
    "cp39-none-macosx_11_0_intel",
    "cp39-none-macosx_11_0_fat64",
    "cp39-none-macosx_11_0_fat32",
    "cp39-none-macosx_11_0_universal2",
    "cp39-none-macosx_11_0_universal",
    "cp39-none-macosx_10_16_x86_64",
    "cp39-none-macosx_10_16_intel",
    "cp39-none-macosx_10_16_fat64",
    "cp39-none-macosx_10_16_fat32",
    "cp39-none-macosx_10_16_universal2",
    "cp39-none-macosx_10_16_universal",
    "cp39-none-macosx_10_15_x86_64",
    "cp39-none-macosx_10_15_intel",
    "cp39-none-macosx_10_15_fat64",
    "cp39-none-macosx_10_15_fat32",
    "cp39-none-macosx_10_15_universal2",
    "cp39-none-macosx_10_15_universal",
    "cp39-none-macosx_10_14_x86_64",
    "cp39-none-macosx_10_14_intel",
    "cp39-none-macosx_10_14_fat64",
    "cp39-none-macosx_10_14_fat32",
    "cp39-none-macosx_10_14_universal2",
    "cp39-none-macosx_10_14_universal",
    "cp39-none-macosx_10_13_x86_64",
    "cp39-none-macosx_10_13_intel",
    "cp39-none-macosx_10_13_fat64",
    "cp39-none-macosx_10_13_fat32",
    "cp39-none-macosx_10_13_universal2",
    "cp39-none-macosx_10_13_universal",
    "cp39-none-macosx_10_12_x86_64",
    "cp39-none-macosx_10_12_intel",
    "cp39-none-macosx_10_12_fat64",
    "cp39-none-macosx_10_12_fat32",
    "cp39-none-macosx_10_12_universal2",
    "cp39-none-macosx_10_12_universal",
    "cp39-none-macosx_10_11_x86_64",
    "cp39-none-macosx_10_11_intel",
    "cp39-none-macosx_10_11_fat64",
    "cp39-none-macosx_10_11_fat32",
    "cp39-none-macosx_10_11_universal2",
    "cp39-none-macosx_10_11_universal",
    "cp39-none-macosx_10_10_x86_64",
    "cp39-none-macosx_10_10_intel",
    "cp39-none-macosx_10_10_fat64",
    "cp39-none-macosx_10_10_fat32",
    "cp39-none-macosx_10_10_universal2",
    "cp39-none-macosx_10_10_universal",
    "cp39-none-macosx_10_9_x86_64",
    "cp39-none-macosx_10_9_intel",
    "cp39-none-macosx_10_9_fat64",
    "cp39-none-macosx_10_9_fat32",
    "cp39-none-macosx_10_9_universal2",
    "cp39-none-macosx_10_9_universal",
    "cp39-none-macosx_10_8_x86_64",
    "cp39-none-macosx_10_8_intel",
    "cp39-none-macosx_10_8_fat64",
    "cp39-none-macosx_10_8_fat32",
    "cp39-none-macosx_10_8_universal2",
    "cp39-none-macosx_10_8_universal",
    "cp39-none-macosx_10_7_x86_64",
    "cp39-none-macosx_10_7_intel",
    "cp39-none-macosx_10_7_fat64",
    "cp39-none-macosx_10_7_fat32",
    "cp39-none-macosx_10_7_universal2",
    "cp39-none-macosx_10_7_universal",
    "cp39-none-macosx_10_6_x86_64",
    "cp39-none-macosx_10_6_intel",
    "cp39-none-macosx_10_6_fat64",
    "cp39-none-macosx_10_6_fat32",
    "cp39-none-macosx_10_6_universal2",
    "cp39-none-macosx_10_6_universal",
    "cp39-none-macosx_10_5_x86_64",
    "cp39-none-macosx_10_5_intel",
    "cp39-none-macosx_10_5_fat64",
    "cp39-none-macosx_10_5_fat32",
    "cp39-none-macosx_10_5_universal2",
    "cp39-none-macosx_10_5_universal",
    "cp39-none-macosx_10_4_x86_64",
    "cp39-none-macosx_10_4_intel",
    "cp39-none-macosx_10_4_fat64",
    "cp39-none-macosx_10_4_fat32",
    "cp39-none-macosx_10_4_universal2",
    "cp39-none-macosx_10_4_universal",
    "cp38-abi3-macosx_12_0_x86_64",
    "cp38-abi3-macosx_12_0_intel",
    "cp38-abi3-macosx_12_0_fat64",
    "cp38-abi3-macosx_12_0_fat32",
    "cp38-abi3-macosx_12_0_universal2",
    "cp38-abi3-macosx_12_0_universal",
    "cp38-abi3-macosx_11_0_x86_64",
    "cp38-abi3-macosx_11_0_intel",
    "cp38-abi3-macosx_11_0_fat64",
    "cp38-abi3-macosx_11_0_fat32",
    "cp38-abi3-macosx_11_0_universal2",
    "cp38-abi3-macosx_11_0_universal",
    "cp38-abi3-macosx_10_16_x86_64",
    "cp38-abi3-macosx_10_16_intel",
    "cp38-abi3-macosx_10_16_fat64",
    "cp38-abi3-macosx_10_16_fat32",
    "cp38-abi3-macosx_10_16_universal2",
    "cp38-abi3-macosx_10_16_universal",
    "cp38-abi3-macosx_10_15_x86_64",
    "cp38-abi3-macosx_10_15_intel",
    "cp38-abi3-macosx_10_15_fat64",
    "cp38-abi3-macosx_10_15_fat32",
    "cp38-abi3-macosx_10_15_universal2",
    "cp38-abi3-macosx_10_15_universal",
    "cp38-abi3-macosx_10_14_x86_64",
    "cp38-abi3-macosx_10_14_intel",
    "cp38-abi3-macosx_10_14_fat64",
    "cp38-abi3-macosx_10_14_fat32",
    "cp38-abi3-macosx_10_14_universal2",
    "cp38-abi3-macosx_10_14_universal",
    "cp38-abi3-macosx_10_13_x86_64",
    "cp38-abi3-macosx_10_13_intel",
    "cp38-abi3-macosx_10_13_fat64",
    "cp38-abi3-macosx_10_13_fat32",
    "cp38-abi3-macosx_10_13_universal2",
    "cp38-abi3-macosx_10_13_universal",
    "cp38-abi3-macosx_10_12_x86_64",
    "cp38-abi3-macosx_10_12_intel",
    "cp38-abi3-macosx_10_12_fat64",
    "cp38-abi3-macosx_10_12_fat32",
    "cp38-abi3-macosx_10_12_universal2",
    "cp38-abi3-macosx_10_12_universal",
    "cp38-abi3-macosx_10_11_x86_64",
    "cp38-abi3-macosx_10_11_intel",
    "cp38-abi3-macosx_10_11_fat64",
    "cp38-abi3-macosx_10_11_fat32",
    "cp38-abi3-macosx_10_11_universal2",
    "cp38-abi3-macosx_10_11_universal",
    "cp38-abi3-macosx_10_10_x86_64",
    "cp38-abi3-macosx_10_10_intel",
    "cp38-abi3-macosx_10_10_fat64",
    "cp38-abi3-macosx_10_10_fat32",
    "cp38-abi3-macosx_10_10_universal2",
    "cp38-abi3-macosx_10_10_universal",
    "cp38-abi3-macosx_10_9_x86_64",
    "cp38-abi3-macosx_10_9_intel",
    "cp38-abi3-macosx_10_9_fat64",
    "cp38-abi3-macosx_10_9_fat32",
    "cp38-abi3-macosx_10_9_universal2",
    "cp38-abi3-macosx_10_9_universal",
    "cp38-abi3-macosx_10_8_x86_64",
    "cp38-abi3-macosx_10_8_intel",
    "cp38-abi3-macosx_10_8_fat64",
    "cp38-abi3-macosx_10_8_fat32",
    "cp38-abi3-macosx_10_8_universal2",
    "cp38-abi3-macosx_10_8_universal",
    "cp38-abi3-macosx_10_7_x86_64",
    "cp38-abi3-macosx_10_7_intel",
    "cp38-abi3-macosx_10_7_fat64",
    "cp38-abi3-macosx_10_7_fat32",
    "cp38-abi3-macosx_10_7_universal2",
    "cp38-abi3-macosx_10_7_universal",
    "cp38-abi3-macosx_10_6_x86_64",
    "cp38-abi3-macosx_10_6_intel",
    "cp38-abi3-macosx_10_6_fat64",
    "cp38-abi3-macosx_10_6_fat32",
    "cp38-abi3-macosx_10_6_universal2",
    "cp38-abi3-macosx_10_6_universal",
    "cp38-abi3-macosx_10_5_x86_64",
    "cp38-abi3-macosx_10_5_intel",
    "cp38-abi3-macosx_10_5_fat64",
    "cp38-abi3-macosx_10_5_fat32",
    "cp38-abi3-macosx_10_5_universal2",
    "cp38-abi3-macosx_10_5_universal",
    "cp38-abi3-macosx_10_4_x86_64",
    "cp38-abi3-macosx_10_4_intel",
    "cp38-abi3-macosx_10_4_fat64",
    "cp38-abi3-macosx_10_4_fat32",
    "cp38-abi3-macosx_10_4_universal2",
    "cp38-abi3-macosx_10_4_universal",
    "cp37-abi3-macosx_12_0_x86_64",
    "cp37-abi3-macosx_12_0_intel",
    "cp37-abi3-macosx_12_0_fat64",
    "cp37-abi3-macosx_12_0_fat32",
    "cp37-abi3-macosx_12_0_universal2",
    "cp37-abi3-macosx_12_0_universal",
    "cp37-abi3-macosx_11_0_x86_64",
    "cp37-abi3-macosx_11_0_intel",
    "cp37-abi3-macosx_11_0_fat64",
    "cp37-abi3-macosx_11_0_fat32",
    "cp37-abi3-macosx_11_0_universal2",
    "cp37-abi3-macosx_11_0_universal",
    "cp37-abi3-macosx_10_16_x86_64",
    "cp37-abi3-macosx_10_16_intel",
    "cp37-abi3-macosx_10_16_fat64",
    "cp37-abi3-macosx_10_16_fat32",
    "cp37-abi3-macosx_10_16_universal2",
    "cp37-abi3-macosx_10_16_universal",
    "cp37-abi3-macosx_10_15_x86_64",
    "cp37-abi3-macosx_10_15_intel",
    "cp37-abi3-macosx_10_15_fat64",
    "cp37-abi3-macosx_10_15_fat32",
    "cp37-abi3-macosx_10_15_universal2",
    "cp37-abi3-macosx_10_15_universal",
    "cp37-abi3-macosx_10_14_x86_64",
    "cp37-abi3-macosx_10_14_intel",
    "cp37-abi3-macosx_10_14_fat64",
    "cp37-abi3-macosx_10_14_fat32",
    "cp37-abi3-macosx_10_14_universal2",
    "cp37-abi3-macosx_10_14_universal",
    "cp37-abi3-macosx_10_13_x86_64",
    "cp37-abi3-macosx_10_13_intel",
    "cp37-abi3-macosx_10_13_fat64",
    "cp37-abi3-macosx_10_13_fat32",
    "cp37-abi3-macosx_10_13_universal2",
    "cp37-abi3-macosx_10_13_universal",
    "cp37-abi3-macosx_10_12_x86_64",
    "cp37-abi3-macosx_10_12_intel",
    "cp37-abi3-macosx_10_12_fat64",
    "cp37-abi3-macosx_10_12_fat32",
    "cp37-abi3-macosx_10_12_universal2",
    "cp37-abi3-macosx_10_12_universal",
    "cp37-abi3-macosx_10_11_x86_64",
    "cp37-abi3-macosx_10_11_intel",
    "cp37-abi3-macosx_10_11_fat64",
    "cp37-abi3-macosx_10_11_fat32",
    "cp37-abi3-macosx_10_11_universal2",
    "cp37-abi3-macosx_10_11_universal",
    "cp37-abi3-macosx_10_10_x86_64",
    "cp37-abi3-macosx_10_10_intel",
    "cp37-abi3-macosx_10_10_fat64",
    "cp37-abi3-macosx_10_10_fat32",
    "cp37-abi3-macosx_10_10_universal2",
    "cp37-abi3-macosx_10_10_universal",
    "cp37-abi3-macosx_10_9_x86_64",
    "cp37-abi3-macosx_10_9_intel",
    "cp37-abi3-macosx_10_9_fat64",
    "cp37-abi3-macosx_10_9_fat32",
    "cp37-abi3-macosx_10_9_universal2",
    "cp37-abi3-macosx_10_9_universal",
    "cp37-abi3-macosx_10_8_x86_64",
    "cp37-abi3-macosx_10_8_intel",
    "cp37-abi3-macosx_10_8_fat64",
    "cp37-abi3-macosx_10_8_fat32",
    "cp37-abi3-macosx_10_8_universal2",
    "cp37-abi3-macosx_10_8_universal",
    "cp37-abi3-macosx_10_7_x86_64",
    "cp37-abi3-macosx_10_7_intel",
    "cp37-abi3-macosx_10_7_fat64",
    "cp37-abi3-macosx_10_7_fat32",
    "cp37-abi3-macosx_10_7_universal2",
    "cp37-abi3-macosx_10_7_universal",
    "cp37-abi3-macosx_10_6_x86_64",
    "cp37-abi3-macosx_10_6_intel",
    "cp37-abi3-macosx_10_6_fat64",
    "cp37-abi3-macosx_10_6_fat32",
    "cp37-abi3-macosx_10_6_universal2",
    "cp37-abi3-macosx_10_6_universal",
    "cp37-abi3-macosx_10_5_x86_64",
    "cp37-abi3-macosx_10_5_intel",
    "cp37-abi3-macosx_10_5_fat64",
    "cp37-abi3-macosx_10_5_fat32",
    "cp37-abi3-macosx_10_5_universal2",
    "cp37-abi3-macosx_10_5_universal",
    "cp37-abi3-macosx_10_4_x86_64",
    "cp37-abi3-macosx_10_4_intel",
    "cp37-abi3-macosx_10_4_fat64",
    "cp37-abi3-macosx_10_4_fat32",
    "cp37-abi3-macosx_10_4_universal2",
    "cp37-abi3-macosx_10_4_universal",
    "cp36-abi3-macosx_12_0_x86_64",
    "cp36-abi3-macosx_12_0_intel",
    "cp36-abi3-macosx_12_0_fat64",
    "cp36-abi3-macosx_12_0_fat32",
    "cp36-abi3-macosx_12_0_universal2",
    "cp36-abi3-macosx_12_0_universal",
    "cp36-abi3-macosx_11_0_x86_64",
    "cp36-abi3-macosx_11_0_intel",
    "cp36-abi3-macosx_11_0_fat64",
    "cp36-abi3-macosx_11_0_fat32",
    "cp36-abi3-macosx_11_0_universal2",
    "cp36-abi3-macosx_11_0_universal",
    "cp36-abi3-macosx_10_16_x86_64",
    "cp36-abi3-macosx_10_16_intel",
    "cp36-abi3-macosx_10_16_fat64",
    "cp36-abi3-macosx_10_16_fat32",
    "cp36-abi3-macosx_10_16_universal2",
    "cp36-abi3-macosx_10_16_universal",
    "cp36-abi3-macosx_10_15_x86_64",
    "cp36-abi3-macosx_10_15_intel",
    "cp36-abi3-macosx_10_15_fat64",
    "cp36-abi3-macosx_10_15_fat32",
    "cp36-abi3-macosx_10_15_universal2",
    "cp36-abi3-macosx_10_15_universal",
    "cp36-abi3-macosx_10_14_x86_64",
    "cp36-abi3-macosx_10_14_intel",
    "cp36-abi3-macosx_10_14_fat64",
    "cp36-abi3-macosx_10_14_fat32",
    "cp36-abi3-macosx_10_14_universal2",
    "cp36-abi3-macosx_10_14_universal",
    "cp36-abi3-macosx_10_13_x86_64",
    "cp36-abi3-macosx_10_13_intel",
    "cp36-abi3-macosx_10_13_fat64",
    "cp36-abi3-macosx_10_13_fat32",
    "cp36-abi3-macosx_10_13_universal2",
    "cp36-abi3-macosx_10_13_universal",
    "cp36-abi3-macosx_10_12_x86_64",
    "cp36-abi3-macosx_10_12_intel",
    "cp36-abi3-macosx_10_12_fat64",
    "cp36-abi3-macosx_10_12_fat32",
    "cp36-abi3-macosx_10_12_universal2",
    "cp36-abi3-macosx_10_12_universal",
    "cp36-abi3-macosx_10_11_x86_64",
    "cp36-abi3-macosx_10_11_intel",
    "cp36-abi3-macosx_10_11_fat64",
    "cp36-abi3-macosx_10_11_fat32",
    "cp36-abi3-macosx_10_11_universal2",
    "cp36-abi3-macosx_10_11_universal",
    "cp36-abi3-macosx_10_10_x86_64",
    "cp36-abi3-macosx_10_10_intel",
    "cp36-abi3-macosx_10_10_fat64",
    "cp36-abi3-macosx_10_10_fat32",
    "cp36-abi3-macosx_10_10_universal2",
    "cp36-abi3-macosx_10_10_universal",
    "cp36-abi3-macosx_10_9_x86_64",
    "cp36-abi3-macosx_10_9_intel",
    "cp36-abi3-macosx_10_9_fat64",
    "cp36-abi3-macosx_10_9_fat32",
    "cp36-abi3-macosx_10_9_universal2",
    "cp36-abi3-macosx_10_9_universal",
    "cp36-abi3-macosx_10_8_x86_64",
    "cp36-abi3-macosx_10_8_intel",
    "cp36-abi3-macosx_10_8_fat64",
    "cp36-abi3-macosx_10_8_fat32",
    "cp36-abi3-macosx_10_8_universal2",
    "cp36-abi3-macosx_10_8_universal",
    "cp36-abi3-macosx_10_7_x86_64",
    "cp36-abi3-macosx_10_7_intel",
    "cp36-abi3-macosx_10_7_fat64",
    "cp36-abi3-macosx_10_7_fat32",
    "cp36-abi3-macosx_10_7_universal2",
    "cp36-abi3-macosx_10_7_universal",
    "cp36-abi3-macosx_10_6_x86_64",
    "cp36-abi3-macosx_10_6_intel",
    "cp36-abi3-macosx_10_6_fat64",
    "cp36-abi3-macosx_10_6_fat32",
    "cp36-abi3-macosx_10_6_universal2",
    "cp36-abi3-macosx_10_6_universal",
    "cp36-abi3-macosx_10_5_x86_64",
    "cp36-abi3-macosx_10_5_intel",
    "cp36-abi3-macosx_10_5_fat64",
    "cp36-abi3-macosx_10_5_fat32",
    "cp36-abi3-macosx_10_5_universal2",
    "cp36-abi3-macosx_10_5_universal",
    "cp36-abi3-macosx_10_4_x86_64",
    "cp36-abi3-macosx_10_4_intel",
    "cp36-abi3-macosx_10_4_fat64",
    "cp36-abi3-macosx_10_4_fat32",
    "cp36-abi3-macosx_10_4_universal2",
    "cp36-abi3-macosx_10_4_universal",
    "cp35-abi3-macosx_12_0_x86_64",
    "cp35-abi3-macosx_12_0_intel",
    "cp35-abi3-macosx_12_0_fat64",
    "cp35-abi3-macosx_12_0_fat32",
    "cp35-abi3-macosx_12_0_universal2",
    "cp35-abi3-macosx_12_0_universal",
    "cp35-abi3-macosx_11_0_x86_64",
    "cp35-abi3-macosx_11_0_intel",
    "cp35-abi3-macosx_11_0_fat64",
    "cp35-abi3-macosx_11_0_fat32",
    "cp35-abi3-macosx_11_0_universal2",
    "cp35-abi3-macosx_11_0_universal",
    "cp35-abi3-macosx_10_16_x86_64",
    "cp35-abi3-macosx_10_16_intel",
    "cp35-abi3-macosx_10_16_fat64",
    "cp35-abi3-macosx_10_16_fat32",
    "cp35-abi3-macosx_10_16_universal2",
    "cp35-abi3-macosx_10_16_universal",
    "cp35-abi3-macosx_10_15_x86_64",
    "cp35-abi3-macosx_10_15_intel",
    "cp35-abi3-macosx_10_15_fat64",
    "cp35-abi3-macosx_10_15_fat32",
    "cp35-abi3-macosx_10_15_universal2",
    "cp35-abi3-macosx_10_15_universal",
    "cp35-abi3-macosx_10_14_x86_64",
    "cp35-abi3-macosx_10_14_intel",
    "cp35-abi3-macosx_10_14_fat64",
    "cp35-abi3-macosx_10_14_fat32",
    "cp35-abi3-macosx_10_14_universal2",
    "cp35-abi3-macosx_10_14_universal",
    "cp35-abi3-macosx_10_13_x86_64",
    "cp35-abi3-macosx_10_13_intel",
    "cp35-abi3-macosx_10_13_fat64",
    "cp35-abi3-macosx_10_13_fat32",
    "cp35-abi3-macosx_10_13_universal2",
    "cp35-abi3-macosx_10_13_universal",
    "cp35-abi3-macosx_10_12_x86_64",
    "cp35-abi3-macosx_10_12_intel",
    "cp35-abi3-macosx_10_12_fat64",
    "cp35-abi3-macosx_10_12_fat32",
    "cp35-abi3-macosx_10_12_universal2",
    "cp35-abi3-macosx_10_12_universal",
    "cp35-abi3-macosx_10_11_x86_64",
    "cp35-abi3-macosx_10_11_intel",
    "cp35-abi3-macosx_10_11_fat64",
    "cp35-abi3-macosx_10_11_fat32",
    "cp35-abi3-macosx_10_11_universal2",
    "cp35-abi3-macosx_10_11_universal",
    "cp35-abi3-macosx_10_10_x86_64",
    "cp35-abi3-macosx_10_10_intel",
    "cp35-abi3-macosx_10_10_fat64",
    "cp35-abi3-macosx_10_10_fat32",
    "cp35-abi3-macosx_10_10_universal2",
    "cp35-abi3-macosx_10_10_universal",
    "cp35-abi3-macosx_10_9_x86_64",
    "cp35-abi3-macosx_10_9_intel",
    "cp35-abi3-macosx_10_9_fat64",
    "cp35-abi3-macosx_10_9_fat32",
    "cp35-abi3-macosx_10_9_universal2",
    "cp35-abi3-macosx_10_9_universal",
    "cp35-abi3-macosx_10_8_x86_64",
    "cp35-abi3-macosx_10_8_intel",
    "cp35-abi3-macosx_10_8_fat64",
    "cp35-abi3-macosx_10_8_fat32",
    "cp35-abi3-macosx_10_8_universal2",
    "cp35-abi3-macosx_10_8_universal",
    "cp35-abi3-macosx_10_7_x86_64",
    "cp35-abi3-macosx_10_7_intel",
    "cp35-abi3-macosx_10_7_fat64",
    "cp35-abi3-macosx_10_7_fat32",
    "cp35-abi3-macosx_10_7_universal2",
    "cp35-abi3-macosx_10_7_universal",
    "cp35-abi3-macosx_10_6_x86_64",
    "cp35-abi3-macosx_10_6_intel",
    "cp35-abi3-macosx_10_6_fat64",
    "cp35-abi3-macosx_10_6_fat32",
    "cp35-abi3-macosx_10_6_universal2",
    "cp35-abi3-macosx_10_6_universal",
    "cp35-abi3-macosx_10_5_x86_64",
    "cp35-abi3-macosx_10_5_intel",
    "cp35-abi3-macosx_10_5_fat64",
    "cp35-abi3-macosx_10_5_fat32",
    "cp35-abi3-macosx_10_5_universal2",
    "cp35-abi3-macosx_10_5_universal",
    "cp35-abi3-macosx_10_4_x86_64",
    "cp35-abi3-macosx_10_4_intel",
    "cp35-abi3-macosx_10_4_fat64",
    "cp35-abi3-macosx_10_4_fat32",
    "cp35-abi3-macosx_10_4_universal2",
    "cp35-abi3-macosx_10_4_universal",
    "cp34-abi3-macosx_12_0_x86_64",
    "cp34-abi3-macosx_12_0_intel",
    "cp34-abi3-macosx_12_0_fat64",
    "cp34-abi3-macosx_12_0_fat32",
    "cp34-abi3-macosx_12_0_universal2",
    "cp34-abi3-macosx_12_0_universal",
    "cp34-abi3-macosx_11_0_x86_64",
    "cp34-abi3-macosx_11_0_intel",
    "cp34-abi3-macosx_11_0_fat64",
    "cp34-abi3-macosx_11_0_fat32",
    "cp34-abi3-macosx_11_0_universal2",
    "cp34-abi3-macosx_11_0_universal",
    "cp34-abi3-macosx_10_16_x86_64",
    "cp34-abi3-macosx_10_16_intel",
    "cp34-abi3-macosx_10_16_fat64",
    "cp34-abi3-macosx_10_16_fat32",
    "cp34-abi3-macosx_10_16_universal2",
    "cp34-abi3-macosx_10_16_universal",
    "cp34-abi3-macosx_10_15_x86_64",
    "cp34-abi3-macosx_10_15_intel",
    "cp34-abi3-macosx_10_15_fat64",
    "cp34-abi3-macosx_10_15_fat32",
    "cp34-abi3-macosx_10_15_universal2",
    "cp34-abi3-macosx_10_15_universal",
    "cp34-abi3-macosx_10_14_x86_64",
    "cp34-abi3-macosx_10_14_intel",
    "cp34-abi3-macosx_10_14_fat64",
    "cp34-abi3-macosx_10_14_fat32",
    "cp34-abi3-macosx_10_14_universal2",
    "cp34-abi3-macosx_10_14_universal",
    "cp34-abi3-macosx_10_13_x86_64",
    "cp34-abi3-macosx_10_13_intel",
    "cp34-abi3-macosx_10_13_fat64",
    "cp34-abi3-macosx_10_13_fat32",
    "cp34-abi3-macosx_10_13_universal2",
    "cp34-abi3-macosx_10_13_universal",
    "cp34-abi3-macosx_10_12_x86_64",
    "cp34-abi3-macosx_10_12_intel",
    "cp34-abi3-macosx_10_12_fat64",
    "cp34-abi3-macosx_10_12_fat32",
    "cp34-abi3-macosx_10_12_universal2",
    "cp34-abi3-macosx_10_12_universal",
    "cp34-abi3-macosx_10_11_x86_64",
    "cp34-abi3-macosx_10_11_intel",
    "cp34-abi3-macosx_10_11_fat64",
    "cp34-abi3-macosx_10_11_fat32",
    "cp34-abi3-macosx_10_11_universal2",
    "cp34-abi3-macosx_10_11_universal",
    "cp34-abi3-macosx_10_10_x86_64",
    "cp34-abi3-macosx_10_10_intel",
    "cp34-abi3-macosx_10_10_fat64",
    "cp34-abi3-macosx_10_10_fat32",
    "cp34-abi3-macosx_10_10_universal2",
    "cp34-abi3-macosx_10_10_universal",
    "cp34-abi3-macosx_10_9_x86_64",
    "cp34-abi3-macosx_10_9_intel",
    "cp34-abi3-macosx_10_9_fat64",
    "cp34-abi3-macosx_10_9_fat32",
    "cp34-abi3-macosx_10_9_universal2",
    "cp34-abi3-macosx_10_9_universal",
    "cp34-abi3-macosx_10_8_x86_64",
    "cp34-abi3-macosx_10_8_intel",
    "cp34-abi3-macosx_10_8_fat64",
    "cp34-abi3-macosx_10_8_fat32",
    "cp34-abi3-macosx_10_8_universal2",
    "cp34-abi3-macosx_10_8_universal",
    "cp34-abi3-macosx_10_7_x86_64",
    "cp34-abi3-macosx_10_7_intel",
    "cp34-abi3-macosx_10_7_fat64",
    "cp34-abi3-macosx_10_7_fat32",
    "cp34-abi3-macosx_10_7_universal2",
    "cp34-abi3-macosx_10_7_universal",
    "cp34-abi3-macosx_10_6_x86_64",
    "cp34-abi3-macosx_10_6_intel",
    "cp34-abi3-macosx_10_6_fat64",
    "cp34-abi3-macosx_10_6_fat32",
    "cp34-abi3-macosx_10_6_universal2",
    "cp34-abi3-macosx_10_6_universal",
    "cp34-abi3-macosx_10_5_x86_64",
    "cp34-abi3-macosx_10_5_intel",
    "cp34-abi3-macosx_10_5_fat64",
    "cp34-abi3-macosx_10_5_fat32",
    "cp34-abi3-macosx_10_5_universal2",
    "cp34-abi3-macosx_10_5_universal",
    "cp34-abi3-macosx_10_4_x86_64",
    "cp34-abi3-macosx_10_4_intel",
    "cp34-abi3-macosx_10_4_fat64",
    "cp34-abi3-macosx_10_4_fat32",
    "cp34-abi3-macosx_10_4_universal2",
    "cp34-abi3-macosx_10_4_universal",
    "cp33-abi3-macosx_12_0_x86_64",
    "cp33-abi3-macosx_12_0_intel",
    "cp33-abi3-macosx_12_0_fat64",
    "cp33-abi3-macosx_12_0_fat32",
    "cp33-abi3-macosx_12_0_universal2",
    "cp33-abi3-macosx_12_0_universal",
    "cp33-abi3-macosx_11_0_x86_64",
    "cp33-abi3-macosx_11_0_intel",
    "cp33-abi3-macosx_11_0_fat64",
    "cp33-abi3-macosx_11_0_fat32",
    "cp33-abi3-macosx_11_0_universal2",
    "cp33-abi3-macosx_11_0_universal",
    "cp33-abi3-macosx_10_16_x86_64",
    "cp33-abi3-macosx_10_16_intel",
    "cp33-abi3-macosx_10_16_fat64",
    "cp33-abi3-macosx_10_16_fat32",
    "cp33-abi3-macosx_10_16_universal2",
    "cp33-abi3-macosx_10_16_universal",
    "cp33-abi3-macosx_10_15_x86_64",
    "cp33-abi3-macosx_10_15_intel",
    "cp33-abi3-macosx_10_15_fat64",
    "cp33-abi3-macosx_10_15_fat32",
    "cp33-abi3-macosx_10_15_universal2",
    "cp33-abi3-macosx_10_15_universal",
    "cp33-abi3-macosx_10_14_x86_64",
    "cp33-abi3-macosx_10_14_intel",
    "cp33-abi3-macosx_10_14_fat64",
    "cp33-abi3-macosx_10_14_fat32",
    "cp33-abi3-macosx_10_14_universal2",
    "cp33-abi3-macosx_10_14_universal",
    "cp33-abi3-macosx_10_13_x86_64",
    "cp33-abi3-macosx_10_13_intel",
    "cp33-abi3-macosx_10_13_fat64",
    "cp33-abi3-macosx_10_13_fat32",
    "cp33-abi3-macosx_10_13_universal2",
    "cp33-abi3-macosx_10_13_universal",
    "cp33-abi3-macosx_10_12_x86_64",
    "cp33-abi3-macosx_10_12_intel",
    "cp33-abi3-macosx_10_12_fat64",
    "cp33-abi3-macosx_10_12_fat32",
    "cp33-abi3-macosx_10_12_universal2",
    "cp33-abi3-macosx_10_12_universal",
    "cp33-abi3-macosx_10_11_x86_64",
    "cp33-abi3-macosx_10_11_intel",
    "cp33-abi3-macosx_10_11_fat64",
    "cp33-abi3-macosx_10_11_fat32",
    "cp33-abi3-macosx_10_11_universal2",
    "cp33-abi3-macosx_10_11_universal",
    "cp33-abi3-macosx_10_10_x86_64",
    "cp33-abi3-macosx_10_10_intel",
    "cp33-abi3-macosx_10_10_fat64",
    "cp33-abi3-macosx_10_10_fat32",
    "cp33-abi3-macosx_10_10_universal2",
    "cp33-abi3-macosx_10_10_universal",
    "cp33-abi3-macosx_10_9_x86_64",
    "cp33-abi3-macosx_10_9_intel",
    "cp33-abi3-macosx_10_9_fat64",
    "cp33-abi3-macosx_10_9_fat32",
    "cp33-abi3-macosx_10_9_universal2",
    "cp33-abi3-macosx_10_9_universal",
    "cp33-abi3-macosx_10_8_x86_64",
    "cp33-abi3-macosx_10_8_intel",
    "cp33-abi3-macosx_10_8_fat64",
    "cp33-abi3-macosx_10_8_fat32",
    "cp33-abi3-macosx_10_8_universal2",
    "cp33-abi3-macosx_10_8_universal",
    "cp33-abi3-macosx_10_7_x86_64",
    "cp33-abi3-macosx_10_7_intel",
    "cp33-abi3-macosx_10_7_fat64",
    "cp33-abi3-macosx_10_7_fat32",
    "cp33-abi3-macosx_10_7_universal2",
    "cp33-abi3-macosx_10_7_universal",
    "cp33-abi3-macosx_10_6_x86_64",
    "cp33-abi3-macosx_10_6_intel",
    "cp33-abi3-macosx_10_6_fat64",
    "cp33-abi3-macosx_10_6_fat32",
    "cp33-abi3-macosx_10_6_universal2",
    "cp33-abi3-macosx_10_6_universal",
    "cp33-abi3-macosx_10_5_x86_64",
    "cp33-abi3-macosx_10_5_intel",
    "cp33-abi3-macosx_10_5_fat64",
    "cp33-abi3-macosx_10_5_fat32",
    "cp33-abi3-macosx_10_5_universal2",
    "cp33-abi3-macosx_10_5_universal",
    "cp33-abi3-macosx_10_4_x86_64",
    "cp33-abi3-macosx_10_4_intel",
    "cp33-abi3-macosx_10_4_fat64",
    "cp33-abi3-macosx_10_4_fat32",
    "cp33-abi3-macosx_10_4_universal2",
    "cp33-abi3-macosx_10_4_universal",
    "cp32-abi3-macosx_12_0_x86_64",
    "cp32-abi3-macosx_12_0_intel",
    "cp32-abi3-macosx_12_0_fat64",
    "cp32-abi3-macosx_12_0_fat32",
    "cp32-abi3-macosx_12_0_universal2",
    "cp32-abi3-macosx_12_0_universal",
    "cp32-abi3-macosx_11_0_x86_64",
    "cp32-abi3-macosx_11_0_intel",
    "cp32-abi3-macosx_11_0_fat64",
    "cp32-abi3-macosx_11_0_fat32",
    "cp32-abi3-macosx_11_0_universal2",
    "cp32-abi3-macosx_11_0_universal",
    "cp32-abi3-macosx_10_16_x86_64",
    "cp32-abi3-macosx_10_16_intel",
    "cp32-abi3-macosx_10_16_fat64",
    "cp32-abi3-macosx_10_16_fat32",
    "cp32-abi3-macosx_10_16_universal2",
    "cp32-abi3-macosx_10_16_universal",
    "cp32-abi3-macosx_10_15_x86_64",
    "cp32-abi3-macosx_10_15_intel",
    "cp32-abi3-macosx_10_15_fat64",
    "cp32-abi3-macosx_10_15_fat32",
    "cp32-abi3-macosx_10_15_universal2",
    "cp32-abi3-macosx_10_15_universal",
    "cp32-abi3-macosx_10_14_x86_64",
    "cp32-abi3-macosx_10_14_intel",
    "cp32-abi3-macosx_10_14_fat64",
    "cp32-abi3-macosx_10_14_fat32",
    "cp32-abi3-macosx_10_14_universal2",
    "cp32-abi3-macosx_10_14_universal",
    "cp32-abi3-macosx_10_13_x86_64",
    "cp32-abi3-macosx_10_13_intel",
    "cp32-abi3-macosx_10_13_fat64",
    "cp32-abi3-macosx_10_13_fat32",
    "cp32-abi3-macosx_10_13_universal2",
    "cp32-abi3-macosx_10_13_universal",
    "cp32-abi3-macosx_10_12_x86_64",
    "cp32-abi3-macosx_10_12_intel",
    "cp32-abi3-macosx_10_12_fat64",
    "cp32-abi3-macosx_10_12_fat32",
    "cp32-abi3-macosx_10_12_universal2",
    "cp32-abi3-macosx_10_12_universal",
    "cp32-abi3-macosx_10_11_x86_64",
    "cp32-abi3-macosx_10_11_intel",
    "cp32-abi3-macosx_10_11_fat64",
    "cp32-abi3-macosx_10_11_fat32",
    "cp32-abi3-macosx_10_11_universal2",
    "cp32-abi3-macosx_10_11_universal",
    "cp32-abi3-macosx_10_10_x86_64",
    "cp32-abi3-macosx_10_10_intel",
    "cp32-abi3-macosx_10_10_fat64",
    "cp32-abi3-macosx_10_10_fat32",
    "cp32-abi3-macosx_10_10_universal2",
    "cp32-abi3-macosx_10_10_universal",
    "cp32-abi3-macosx_10_9_x86_64",
    "cp32-abi3-macosx_10_9_intel",
    "cp32-abi3-macosx_10_9_fat64",
    "cp32-abi3-macosx_10_9_fat32",
    "cp32-abi3-macosx_10_9_universal2",
    "cp32-abi3-macosx_10_9_universal",
    "cp32-abi3-macosx_10_8_x86_64",
    "cp32-abi3-macosx_10_8_intel",
    "cp32-abi3-macosx_10_8_fat64",
    "cp32-abi3-macosx_10_8_fat32",
    "cp32-abi3-macosx_10_8_universal2",
    "cp32-abi3-macosx_10_8_universal",
    "cp32-abi3-macosx_10_7_x86_64",
    "cp32-abi3-macosx_10_7_intel",
    "cp32-abi3-macosx_10_7_fat64",
    "cp32-abi3-macosx_10_7_fat32",
    "cp32-abi3-macosx_10_7_universal2",
    "cp32-abi3-macosx_10_7_universal",
    "cp32-abi3-macosx_10_6_x86_64",
    "cp32-abi3-macosx_10_6_intel",
    "cp32-abi3-macosx_10_6_fat64",
    "cp32-abi3-macosx_10_6_fat32",
    "cp32-abi3-macosx_10_6_universal2",
    "cp32-abi3-macosx_10_6_universal",
    "cp32-abi3-macosx_10_5_x86_64",
    "cp32-abi3-macosx_10_5_intel",
    "cp32-abi3-macosx_10_5_fat64",
    "cp32-abi3-macosx_10_5_fat32",
    "cp32-abi3-macosx_10_5_universal2",
    "cp32-abi3-macosx_10_5_universal",
    "cp32-abi3-macosx_10_4_x86_64",
    "cp32-abi3-macosx_10_4_intel",
    "cp32-abi3-macosx_10_4_fat64",
    "cp32-abi3-macosx_10_4_fat32",
    "cp32-abi3-macosx_10_4_universal2",
    "cp32-abi3-macosx_10_4_universal",
    "py39-none-macosx_12_0_x86_64",
    "py39-none-macosx_12_0_intel",
    "py39-none-macosx_12_0_fat64",
    "py39-none-macosx_12_0_fat32",
    "py39-none-macosx_12_0_universal2",
    "py39-none-macosx_12_0_universal",
    "py39-none-macosx_11_0_x86_64",
    "py39-none-macosx_11_0_intel",
    "py39-none-macosx_11_0_fat64",
    "py39-none-macosx_11_0_fat32",
    "py39-none-macosx_11_0_universal2",
    "py39-none-macosx_11_0_universal",
    "py39-none-macosx_10_16_x86_64",
    "py39-none-macosx_10_16_intel",
    "py39-none-macosx_10_16_fat64",
    "py39-none-macosx_10_16_fat32",
    "py39-none-macosx_10_16_universal2",
    "py39-none-macosx_10_16_universal",
    "py39-none-macosx_10_15_x86_64",
    "py39-none-macosx_10_15_intel",
    "py39-none-macosx_10_15_fat64",
    "py39-none-macosx_10_15_fat32",
    "py39-none-macosx_10_15_universal2",
    "py39-none-macosx_10_15_universal",
    "py39-none-macosx_10_14_x86_64",
    "py39-none-macosx_10_14_intel",
    "py39-none-macosx_10_14_fat64",
    "py39-none-macosx_10_14_fat32",
    "py39-none-macosx_10_14_universal2",
    "py39-none-macosx_10_14_universal",
    "py39-none-macosx_10_13_x86_64",
    "py39-none-macosx_10_13_intel",
    "py39-none-macosx_10_13_fat64",
    "py39-none-macosx_10_13_fat32",
    "py39-none-macosx_10_13_universal2",
    "py39-none-macosx_10_13_universal",
    "py39-none-macosx_10_12_x86_64",
    "py39-none-macosx_10_12_intel",
    "py39-none-macosx_10_12_fat64",
    "py39-none-macosx_10_12_fat32",
    "py39-none-macosx_10_12_universal2",
    "py39-none-macosx_10_12_universal",
    "py39-none-macosx_10_11_x86_64",
    "py39-none-macosx_10_11_intel",
    "py39-none-macosx_10_11_fat64",
    "py39-none-macosx_10_11_fat32",
    "py39-none-macosx_10_11_universal2",
    "py39-none-macosx_10_11_universal",
    "py39-none-macosx_10_10_x86_64",
    "py39-none-macosx_10_10_intel",
    "py39-none-macosx_10_10_fat64",
    "py39-none-macosx_10_10_fat32",
    "py39-none-macosx_10_10_universal2",
    "py39-none-macosx_10_10_universal",
    "py39-none-macosx_10_9_x86_64",
    "py39-none-macosx_10_9_intel",
    "py39-none-macosx_10_9_fat64",
    "py39-none-macosx_10_9_fat32",
    "py39-none-macosx_10_9_universal2",
    "py39-none-macosx_10_9_universal",
    "py39-none-macosx_10_8_x86_64",
    "py39-none-macosx_10_8_intel",
    "py39-none-macosx_10_8_fat64",
    "py39-none-macosx_10_8_fat32",
    "py39-none-macosx_10_8_universal2",
    "py39-none-macosx_10_8_universal",
    "py39-none-macosx_10_7_x86_64",
    "py39-none-macosx_10_7_intel",
    "py39-none-macosx_10_7_fat64",
    "py39-none-macosx_10_7_fat32",
    "py39-none-macosx_10_7_universal2",
    "py39-none-macosx_10_7_universal",
    "py39-none-macosx_10_6_x86_64",
    "py39-none-macosx_10_6_intel",
    "py39-none-macosx_10_6_fat64",
    "py39-none-macosx_10_6_fat32",
    "py39-none-macosx_10_6_universal2",
    "py39-none-macosx_10_6_universal",
    "py39-none-macosx_10_5_x86_64",
    "py39-none-macosx_10_5_intel",
    "py39-none-macosx_10_5_fat64",
    "py39-none-macosx_10_5_fat32",
    "py39-none-macosx_10_5_universal2",
    "py39-none-macosx_10_5_universal",
    "py39-none-macosx_10_4_x86_64",
    "py39-none-macosx_10_4_intel",
    "py39-none-macosx_10_4_fat64",
    "py39-none-macosx_10_4_fat32",
    "py39-none-macosx_10_4_universal2",
    "py39-none-macosx_10_4_universal",
    "py3-none-macosx_12_0_x86_64",
    "py3-none-macosx_12_0_intel",
    "py3-none-macosx_12_0_fat64",
    "py3-none-macosx_12_0_fat32",
    "py3-none-macosx_12_0_universal2",
    "py3-none-macosx_12_0_universal",
    "py3-none-macosx_11_0_x86_64",
    "py3-none-macosx_11_0_intel",
    "py3-none-macosx_11_0_fat64",
    "py3-none-macosx_11_0_fat32",
    "py3-none-macosx_11_0_universal2",
    "py3-none-macosx_11_0_universal",
    "py3-none-macosx_10_16_x86_64",
    "py3-none-macosx_10_16_intel",
    "py3-none-macosx_10_16_fat64",
    "py3-none-macosx_10_16_fat32",
    "py3-none-macosx_10_16_universal2",
    "py3-none-macosx_10_16_universal",
    "py3-none-macosx_10_15_x86_64",
    "py3-none-macosx_10_15_intel",
    "py3-none-macosx_10_15_fat64",
    "py3-none-macosx_10_15_fat32",
    "py3-none-macosx_10_15_universal2",
    "py3-none-macosx_10_15_universal",
    "py3-none-macosx_10_14_x86_64",
    "py3-none-macosx_10_14_intel",
    "py3-none-macosx_10_14_fat64",
    "py3-none-macosx_10_14_fat32",
    "py3-none-macosx_10_14_universal2",
    "py3-none-macosx_10_14_universal",
    "py3-none-macosx_10_13_x86_64",
    "py3-none-macosx_10_13_intel",
    "py3-none-macosx_10_13_fat64",
    "py3-none-macosx_10_13_fat32",
    "py3-none-macosx_10_13_universal2",
    "py3-none-macosx_10_13_universal",
    "py3-none-macosx_10_12_x86_64",
    "py3-none-macosx_10_12_intel",
    "py3-none-macosx_10_12_fat64",
    "py3-none-macosx_10_12_fat32",
    "py3-none-macosx_10_12_universal2",
    "py3-none-macosx_10_12_universal",
    "py3-none-macosx_10_11_x86_64",
    "py3-none-macosx_10_11_intel",
    "py3-none-macosx_10_11_fat64",
    "py3-none-macosx_10_11_fat32",
    "py3-none-macosx_10_11_universal2",
    "py3-none-macosx_10_11_universal",
    "py3-none-macosx_10_10_x86_64",
    "py3-none-macosx_10_10_intel",
    "py3-none-macosx_10_10_fat64",
    "py3-none-macosx_10_10_fat32",
    "py3-none-macosx_10_10_universal2",
    "py3-none-macosx_10_10_universal",
    "py3-none-macosx_10_9_x86_64",
    "py3-none-macosx_10_9_intel",
    "py3-none-macosx_10_9_fat64",
    "py3-none-macosx_10_9_fat32",
    "py3-none-macosx_10_9_universal2",
    "py3-none-macosx_10_9_universal",
    "py3-none-macosx_10_8_x86_64",
    "py3-none-macosx_10_8_intel",
    "py3-none-macosx_10_8_fat64",
    "py3-none-macosx_10_8_fat32",
    "py3-none-macosx_10_8_universal2",
    "py3-none-macosx_10_8_universal",
    "py3-none-macosx_10_7_x86_64",
    "py3-none-macosx_10_7_intel",
    "py3-none-macosx_10_7_fat64",
    "py3-none-macosx_10_7_fat32",
    "py3-none-macosx_10_7_universal2",
    "py3-none-macosx_10_7_universal",
    "py3-none-macosx_10_6_x86_64",
    "py3-none-macosx_10_6_intel",
    "py3-none-macosx_10_6_fat64",
    "py3-none-macosx_10_6_fat32",
    "py3-none-macosx_10_6_universal2",
    "py3-none-macosx_10_6_universal",
    "py3-none-macosx_10_5_x86_64",
    "py3-none-macosx_10_5_intel",
    "py3-none-macosx_10_5_fat64",
    "py3-none-macosx_10_5_fat32",
    "py3-none-macosx_10_5_universal2",
    "py3-none-macosx_10_5_universal",
    "py3-none-macosx_10_4_x86_64",
    "py3-none-macosx_10_4_intel",
    "py3-none-macosx_10_4_fat64",
    "py3-none-macosx_10_4_fat32",
    "py3-none-macosx_10_4_universal2",
    "py3-none-macosx_10_4_universal",
    "py38-none-macosx_12_0_x86_64",
    "py38-none-macosx_12_0_intel",
    "py38-none-macosx_12_0_fat64",
    "py38-none-macosx_12_0_fat32",
    "py38-none-macosx_12_0_universal2",
    "py38-none-macosx_12_0_universal",
    "py38-none-macosx_11_0_x86_64",
    "py38-none-macosx_11_0_intel",
    "py38-none-macosx_11_0_fat64",
    "py38-none-macosx_11_0_fat32",
    "py38-none-macosx_11_0_universal2",
    "py38-none-macosx_11_0_universal",
    "py38-none-macosx_10_16_x86_64",
    "py38-none-macosx_10_16_intel",
    "py38-none-macosx_10_16_fat64",
    "py38-none-macosx_10_16_fat32",
    "py38-none-macosx_10_16_universal2",
    "py38-none-macosx_10_16_universal",
    "py38-none-macosx_10_15_x86_64",
    "py38-none-macosx_10_15_intel",
    "py38-none-macosx_10_15_fat64",
    "py38-none-macosx_10_15_fat32",
    "py38-none-macosx_10_15_universal2",
    "py38-none-macosx_10_15_universal",
    "py38-none-macosx_10_14_x86_64",
    "py38-none-macosx_10_14_intel",
    "py38-none-macosx_10_14_fat64",
    "py38-none-macosx_10_14_fat32",
    "py38-none-macosx_10_14_universal2",
    "py38-none-macosx_10_14_universal",
    "py38-none-macosx_10_13_x86_64",
    "py38-none-macosx_10_13_intel",
    "py38-none-macosx_10_13_fat64",
    "py38-none-macosx_10_13_fat32",
    "py38-none-macosx_10_13_universal2",
    "py38-none-macosx_10_13_universal",
    "py38-none-macosx_10_12_x86_64",
    "py38-none-macosx_10_12_intel",
    "py38-none-macosx_10_12_fat64",
    "py38-none-macosx_10_12_fat32",
    "py38-none-macosx_10_12_universal2",
    "py38-none-macosx_10_12_universal",
    "py38-none-macosx_10_11_x86_64",
    "py38-none-macosx_10_11_intel",
    "py38-none-macosx_10_11_fat64",
    "py38-none-macosx_10_11_fat32",
    "py38-none-macosx_10_11_universal2",
    "py38-none-macosx_10_11_universal",
    "py38-none-macosx_10_10_x86_64",
    "py38-none-macosx_10_10_intel",
    "py38-none-macosx_10_10_fat64",
    "py38-none-macosx_10_10_fat32",
    "py38-none-macosx_10_10_universal2",
    "py38-none-macosx_10_10_universal",
    "py38-none-macosx_10_9_x86_64",
    "py38-none-macosx_10_9_intel",
    "py38-none-macosx_10_9_fat64",
    "py38-none-macosx_10_9_fat32",
    "py38-none-macosx_10_9_universal2",
    "py38-none-macosx_10_9_universal",
    "py38-none-macosx_10_8_x86_64",
    "py38-none-macosx_10_8_intel",
    "py38-none-macosx_10_8_fat64",
    "py38-none-macosx_10_8_fat32",
    "py38-none-macosx_10_8_universal2",
    "py38-none-macosx_10_8_universal",
    "py38-none-macosx_10_7_x86_64",
    "py38-none-macosx_10_7_intel",
    "py38-none-macosx_10_7_fat64",
    "py38-none-macosx_10_7_fat32",
    "py38-none-macosx_10_7_universal2",
    "py38-none-macosx_10_7_universal",
    "py38-none-macosx_10_6_x86_64",
    "py38-none-macosx_10_6_intel",
    "py38-none-macosx_10_6_fat64",
    "py38-none-macosx_10_6_fat32",
    "py38-none-macosx_10_6_universal2",
    "py38-none-macosx_10_6_universal",
    "py38-none-macosx_10_5_x86_64",
    "py38-none-macosx_10_5_intel",
    "py38-none-macosx_10_5_fat64",
    "py38-none-macosx_10_5_fat32",
    "py38-none-macosx_10_5_universal2",
    "py38-none-macosx_10_5_universal",
    "py38-none-macosx_10_4_x86_64",
    "py38-none-macosx_10_4_intel",
    "py38-none-macosx_10_4_fat64",
    "py38-none-macosx_10_4_fat32",
    "py38-none-macosx_10_4_universal2",
    "py38-none-macosx_10_4_universal",
    "py37-none-macosx_12_0_x86_64",
    "py37-none-macosx_12_0_intel",
    "py37-none-macosx_12_0_fat64",
    "py37-none-macosx_12_0_fat32",
    "py37-none-macosx_12_0_universal2",
    "py37-none-macosx_12_0_universal",
    "py37-none-macosx_11_0_x86_64",
    "py37-none-macosx_11_0_intel",
    "py37-none-macosx_11_0_fat64",
    "py37-none-macosx_11_0_fat32",
    "py37-none-macosx_11_0_universal2",
    "py37-none-macosx_11_0_universal",
    "py37-none-macosx_10_16_x86_64",
    "py37-none-macosx_10_16_intel",
    "py37-none-macosx_10_16_fat64",
    "py37-none-macosx_10_16_fat32",
    "py37-none-macosx_10_16_universal2",
    "py37-none-macosx_10_16_universal",
    "py37-none-macosx_10_15_x86_64",
    "py37-none-macosx_10_15_intel",
    "py37-none-macosx_10_15_fat64",
    "py37-none-macosx_10_15_fat32",
    "py37-none-macosx_10_15_universal2",
    "py37-none-macosx_10_15_universal",
    "py37-none-macosx_10_14_x86_64",
    "py37-none-macosx_10_14_intel",
    "py37-none-macosx_10_14_fat64",
    "py37-none-macosx_10_14_fat32",
    "py37-none-macosx_10_14_universal2",
    "py37-none-macosx_10_14_universal",
    "py37-none-macosx_10_13_x86_64",
    "py37-none-macosx_10_13_intel",
    "py37-none-macosx_10_13_fat64",
    "py37-none-macosx_10_13_fat32",
    "py37-none-macosx_10_13_universal2",
    "py37-none-macosx_10_13_universal",
    "py37-none-macosx_10_12_x86_64",
    "py37-none-macosx_10_12_intel",
    "py37-none-macosx_10_12_fat64",
    "py37-none-macosx_10_12_fat32",
    "py37-none-macosx_10_12_universal2",
    "py37-none-macosx_10_12_universal",
    "py37-none-macosx_10_11_x86_64",
    "py37-none-macosx_10_11_intel",
    "py37-none-macosx_10_11_fat64",
    "py37-none-macosx_10_11_fat32",
    "py37-none-macosx_10_11_universal2",
    "py37-none-macosx_10_11_universal",
    "py37-none-macosx_10_10_x86_64",
    "py37-none-macosx_10_10_intel",
    "py37-none-macosx_10_10_fat64",
    "py37-none-macosx_10_10_fat32",
    "py37-none-macosx_10_10_universal2",
    "py37-none-macosx_10_10_universal",
    "py37-none-macosx_10_9_x86_64",
    "py37-none-macosx_10_9_intel",
    "py37-none-macosx_10_9_fat64",
    "py37-none-macosx_10_9_fat32",
    "py37-none-macosx_10_9_universal2",
    "py37-none-macosx_10_9_universal",
    "py37-none-macosx_10_8_x86_64",
    "py37-none-macosx_10_8_intel",
    "py37-none-macosx_10_8_fat64",
    "py37-none-macosx_10_8_fat32",
    "py37-none-macosx_10_8_universal2",
    "py37-none-macosx_10_8_universal",
    "py37-none-macosx_10_7_x86_64",
    "py37-none-macosx_10_7_intel",
    "py37-none-macosx_10_7_fat64",
    "py37-none-macosx_10_7_fat32",
    "py37-none-macosx_10_7_universal2",
    "py37-none-macosx_10_7_universal",
    "py37-none-macosx_10_6_x86_64",
    "py37-none-macosx_10_6_intel",
    "py37-none-macosx_10_6_fat64",
    "py37-none-macosx_10_6_fat32",
    "py37-none-macosx_10_6_universal2",
    "py37-none-macosx_10_6_universal",
    "py37-none-macosx_10_5_x86_64",
    "py37-none-macosx_10_5_intel",
    "py37-none-macosx_10_5_fat64",
    "py37-none-macosx_10_5_fat32",
    "py37-none-macosx_10_5_universal2",
    "py37-none-macosx_10_5_universal",
    "py37-none-macosx_10_4_x86_64",
    "py37-none-macosx_10_4_intel",
    "py37-none-macosx_10_4_fat64",
    "py37-none-macosx_10_4_fat32",
    "py37-none-macosx_10_4_universal2",
    "py37-none-macosx_10_4_universal",
    "py36-none-macosx_12_0_x86_64",
    "py36-none-macosx_12_0_intel",
    "py36-none-macosx_12_0_fat64",
    "py36-none-macosx_12_0_fat32",
    "py36-none-macosx_12_0_universal2",
    "py36-none-macosx_12_0_universal",
    "py36-none-macosx_11_0_x86_64",
    "py36-none-macosx_11_0_intel",
    "py36-none-macosx_11_0_fat64",
    "py36-none-macosx_11_0_fat32",
    "py36-none-macosx_11_0_universal2",
    "py36-none-macosx_11_0_universal",
    "py36-none-macosx_10_16_x86_64",
    "py36-none-macosx_10_16_intel",
    "py36-none-macosx_10_16_fat64",
    "py36-none-macosx_10_16_fat32",
    "py36-none-macosx_10_16_universal2",
    "py36-none-macosx_10_16_universal",
    "py36-none-macosx_10_15_x86_64",
    "py36-none-macosx_10_15_intel",
    "py36-none-macosx_10_15_fat64",
    "py36-none-macosx_10_15_fat32",
    "py36-none-macosx_10_15_universal2",
    "py36-none-macosx_10_15_universal",
    "py36-none-macosx_10_14_x86_64",
    "py36-none-macosx_10_14_intel",
    "py36-none-macosx_10_14_fat64",
    "py36-none-macosx_10_14_fat32",
    "py36-none-macosx_10_14_universal2",
    "py36-none-macosx_10_14_universal",
    "py36-none-macosx_10_13_x86_64",
    "py36-none-macosx_10_13_intel",
    "py36-none-macosx_10_13_fat64",
    "py36-none-macosx_10_13_fat32",
    "py36-none-macosx_10_13_universal2",
    "py36-none-macosx_10_13_universal",
    "py36-none-macosx_10_12_x86_64",
    "py36-none-macosx_10_12_intel",
    "py36-none-macosx_10_12_fat64",
    "py36-none-macosx_10_12_fat32",
    "py36-none-macosx_10_12_universal2",
    "py36-none-macosx_10_12_universal",
    "py36-none-macosx_10_11_x86_64",
    "py36-none-macosx_10_11_intel",
    "py36-none-macosx_10_11_fat64",
    "py36-none-macosx_10_11_fat32",
    "py36-none-macosx_10_11_universal2",
    "py36-none-macosx_10_11_universal",
    "py36-none-macosx_10_10_x86_64",
    "py36-none-macosx_10_10_intel",
    "py36-none-macosx_10_10_fat64",
    "py36-none-macosx_10_10_fat32",
    "py36-none-macosx_10_10_universal2",
    "py36-none-macosx_10_10_universal",
    "py36-none-macosx_10_9_x86_64",
    "py36-none-macosx_10_9_intel",
    "py36-none-macosx_10_9_fat64",
    "py36-none-macosx_10_9_fat32",
    "py36-none-macosx_10_9_universal2",
    "py36-none-macosx_10_9_universal",
    "py36-none-macosx_10_8_x86_64",
    "py36-none-macosx_10_8_intel",
    "py36-none-macosx_10_8_fat64",
    "py36-none-macosx_10_8_fat32",
    "py36-none-macosx_10_8_universal2",
    "py36-none-macosx_10_8_universal",
    "py36-none-macosx_10_7_x86_64",
    "py36-none-macosx_10_7_intel",
    "py36-none-macosx_10_7_fat64",
    "py36-none-macosx_10_7_fat32",
    "py36-none-macosx_10_7_universal2",
    "py36-none-macosx_10_7_universal",
    "py36-none-macosx_10_6_x86_64",
    "py36-none-macosx_10_6_intel",
    "py36-none-macosx_10_6_fat64",
    "py36-none-macosx_10_6_fat32",
    "py36-none-macosx_10_6_universal2",
    "py36-none-macosx_10_6_universal",
    "py36-none-macosx_10_5_x86_64",
    "py36-none-macosx_10_5_intel",
    "py36-none-macosx_10_5_fat64",
    "py36-none-macosx_10_5_fat32",
    "py36-none-macosx_10_5_universal2",
    "py36-none-macosx_10_5_universal",
    "py36-none-macosx_10_4_x86_64",
    "py36-none-macosx_10_4_intel",
    "py36-none-macosx_10_4_fat64",
    "py36-none-macosx_10_4_fat32",
    "py36-none-macosx_10_4_universal2",
    "py36-none-macosx_10_4_universal",
    "py35-none-macosx_12_0_x86_64",
    "py35-none-macosx_12_0_intel",
    "py35-none-macosx_12_0_fat64",
    "py35-none-macosx_12_0_fat32",
    "py35-none-macosx_12_0_universal2",
    "py35-none-macosx_12_0_universal",
    "py35-none-macosx_11_0_x86_64",
    "py35-none-macosx_11_0_intel",
    "py35-none-macosx_11_0_fat64",
    "py35-none-macosx_11_0_fat32",
    "py35-none-macosx_11_0_universal2",
    "py35-none-macosx_11_0_universal",
    "py35-none-macosx_10_16_x86_64",
    "py35-none-macosx_10_16_intel",
    "py35-none-macosx_10_16_fat64",
    "py35-none-macosx_10_16_fat32",
    "py35-none-macosx_10_16_universal2",
    "py35-none-macosx_10_16_universal",
    "py35-none-macosx_10_15_x86_64",
    "py35-none-macosx_10_15_intel",
    "py35-none-macosx_10_15_fat64",
    "py35-none-macosx_10_15_fat32",
    "py35-none-macosx_10_15_universal2",
    "py35-none-macosx_10_15_universal",
    "py35-none-macosx_10_14_x86_64",
    "py35-none-macosx_10_14_intel",
    "py35-none-macosx_10_14_fat64",
    "py35-none-macosx_10_14_fat32",
    "py35-none-macosx_10_14_universal2",
    "py35-none-macosx_10_14_universal",
    "py35-none-macosx_10_13_x86_64",
    "py35-none-macosx_10_13_intel",
    "py35-none-macosx_10_13_fat64",
    "py35-none-macosx_10_13_fat32",
    "py35-none-macosx_10_13_universal2",
    "py35-none-macosx_10_13_universal",
    "py35-none-macosx_10_12_x86_64",
    "py35-none-macosx_10_12_intel",
    "py35-none-macosx_10_12_fat64",
    "py35-none-macosx_10_12_fat32",
    "py35-none-macosx_10_12_universal2",
    "py35-none-macosx_10_12_universal",
    "py35-none-macosx_10_11_x86_64",
    "py35-none-macosx_10_11_intel",
    "py35-none-macosx_10_11_fat64",
    "py35-none-macosx_10_11_fat32",
    "py35-none-macosx_10_11_universal2",
    "py35-none-macosx_10_11_universal",
    "py35-none-macosx_10_10_x86_64",
    "py35-none-macosx_10_10_intel",
    "py35-none-macosx_10_10_fat64",
    "py35-none-macosx_10_10_fat32",
    "py35-none-macosx_10_10_universal2",
    "py35-none-macosx_10_10_universal",
    "py35-none-macosx_10_9_x86_64",
    "py35-none-macosx_10_9_intel",
    "py35-none-macosx_10_9_fat64",
    "py35-none-macosx_10_9_fat32",
    "py35-none-macosx_10_9_universal2",
    "py35-none-macosx_10_9_universal",
    "py35-none-macosx_10_8_x86_64",
    "py35-none-macosx_10_8_intel",
    "py35-none-macosx_10_8_fat64",
    "py35-none-macosx_10_8_fat32",
    "py35-none-macosx_10_8_universal2",
    "py35-none-macosx_10_8_universal",
    "py35-none-macosx_10_7_x86_64",
    "py35-none-macosx_10_7_intel",
    "py35-none-macosx_10_7_fat64",
    "py35-none-macosx_10_7_fat32",
    "py35-none-macosx_10_7_universal2",
    "py35-none-macosx_10_7_universal",
    "py35-none-macosx_10_6_x86_64",
    "py35-none-macosx_10_6_intel",
    "py35-none-macosx_10_6_fat64",
    "py35-none-macosx_10_6_fat32",
    "py35-none-macosx_10_6_universal2",
    "py35-none-macosx_10_6_universal",
    "py35-none-macosx_10_5_x86_64",
    "py35-none-macosx_10_5_intel",
    "py35-none-macosx_10_5_fat64",
    "py35-none-macosx_10_5_fat32",
    "py35-none-macosx_10_5_universal2",
    "py35-none-macosx_10_5_universal",
    "py35-none-macosx_10_4_x86_64",
    "py35-none-macosx_10_4_intel",
    "py35-none-macosx_10_4_fat64",
    "py35-none-macosx_10_4_fat32",
    "py35-none-macosx_10_4_universal2",
    "py35-none-macosx_10_4_universal",
    "py34-none-macosx_12_0_x86_64",
    "py34-none-macosx_12_0_intel",
    "py34-none-macosx_12_0_fat64",
    "py34-none-macosx_12_0_fat32",
    "py34-none-macosx_12_0_universal2",
    "py34-none-macosx_12_0_universal",
    "py34-none-macosx_11_0_x86_64",
    "py34-none-macosx_11_0_intel",
    "py34-none-macosx_11_0_fat64",
    "py34-none-macosx_11_0_fat32",
    "py34-none-macosx_11_0_universal2",
    "py34-none-macosx_11_0_universal",
    "py34-none-macosx_10_16_x86_64",
    "py34-none-macosx_10_16_intel",
    "py34-none-macosx_10_16_fat64",
    "py34-none-macosx_10_16_fat32",
    "py34-none-macosx_10_16_universal2",
    "py34-none-macosx_10_16_universal",
    "py34-none-macosx_10_15_x86_64",
    "py34-none-macosx_10_15_intel",
    "py34-none-macosx_10_15_fat64",
    "py34-none-macosx_10_15_fat32",
    "py34-none-macosx_10_15_universal2",
    "py34-none-macosx_10_15_universal",
    "py34-none-macosx_10_14_x86_64",
    "py34-none-macosx_10_14_intel",
    "py34-none-macosx_10_14_fat64",
    "py34-none-macosx_10_14_fat32",
    "py34-none-macosx_10_14_universal2",
    "py34-none-macosx_10_14_universal",
    "py34-none-macosx_10_13_x86_64",
    "py34-none-macosx_10_13_intel",
    "py34-none-macosx_10_13_fat64",
    "py34-none-macosx_10_13_fat32",
    "py34-none-macosx_10_13_universal2",
    "py34-none-macosx_10_13_universal",
    "py34-none-macosx_10_12_x86_64",
    "py34-none-macosx_10_12_intel",
    "py34-none-macosx_10_12_fat64",
    "py34-none-macosx_10_12_fat32",
    "py34-none-macosx_10_12_universal2",
    "py34-none-macosx_10_12_universal",
    "py34-none-macosx_10_11_x86_64",
    "py34-none-macosx_10_11_intel",
    "py34-none-macosx_10_11_fat64",
    "py34-none-macosx_10_11_fat32",
    "py34-none-macosx_10_11_universal2",
    "py34-none-macosx_10_11_universal",
    "py34-none-macosx_10_10_x86_64",
    "py34-none-macosx_10_10_intel",
    "py34-none-macosx_10_10_fat64",
    "py34-none-macosx_10_10_fat32",
    "py34-none-macosx_10_10_universal2",
    "py34-none-macosx_10_10_universal",
    "py34-none-macosx_10_9_x86_64",
    "py34-none-macosx_10_9_intel",
    "py34-none-macosx_10_9_fat64",
    "py34-none-macosx_10_9_fat32",
    "py34-none-macosx_10_9_universal2",
    "py34-none-macosx_10_9_universal",
    "py34-none-macosx_10_8_x86_64",
    "py34-none-macosx_10_8_intel",
    "py34-none-macosx_10_8_fat64",
    "py34-none-macosx_10_8_fat32",
    "py34-none-macosx_10_8_universal2",
    "py34-none-macosx_10_8_universal",
    "py34-none-macosx_10_7_x86_64",
    "py34-none-macosx_10_7_intel",
    "py34-none-macosx_10_7_fat64",
    "py34-none-macosx_10_7_fat32",
    "py34-none-macosx_10_7_universal2",
    "py34-none-macosx_10_7_universal",
    "py34-none-macosx_10_6_x86_64",
    "py34-none-macosx_10_6_intel",
    "py34-none-macosx_10_6_fat64",
    "py34-none-macosx_10_6_fat32",
    "py34-none-macosx_10_6_universal2",
    "py34-none-macosx_10_6_universal",
    "py34-none-macosx_10_5_x86_64",
    "py34-none-macosx_10_5_intel",
    "py34-none-macosx_10_5_fat64",
    "py34-none-macosx_10_5_fat32",
    "py34-none-macosx_10_5_universal2",
    "py34-none-macosx_10_5_universal",
    "py34-none-macosx_10_4_x86_64",
    "py34-none-macosx_10_4_intel",
    "py34-none-macosx_10_4_fat64",
    "py34-none-macosx_10_4_fat32",
    "py34-none-macosx_10_4_universal2",
    "py34-none-macosx_10_4_universal",
    "py33-none-macosx_12_0_x86_64",
    "py33-none-macosx_12_0_intel",
    "py33-none-macosx_12_0_fat64",
    "py33-none-macosx_12_0_fat32",
    "py33-none-macosx_12_0_universal2",
    "py33-none-macosx_12_0_universal",
    "py33-none-macosx_11_0_x86_64",
    "py33-none-macosx_11_0_intel",
    "py33-none-macosx_11_0_fat64",
    "py33-none-macosx_11_0_fat32",
    "py33-none-macosx_11_0_universal2",
    "py33-none-macosx_11_0_universal",
    "py33-none-macosx_10_16_x86_64",
    "py33-none-macosx_10_16_intel",
    "py33-none-macosx_10_16_fat64",
    "py33-none-macosx_10_16_fat32",
    "py33-none-macosx_10_16_universal2",
    "py33-none-macosx_10_16_universal",
    "py33-none-macosx_10_15_x86_64",
    "py33-none-macosx_10_15_intel",
    "py33-none-macosx_10_15_fat64",
    "py33-none-macosx_10_15_fat32",
    "py33-none-macosx_10_15_universal2",
    "py33-none-macosx_10_15_universal",
    "py33-none-macosx_10_14_x86_64",
    "py33-none-macosx_10_14_intel",
    "py33-none-macosx_10_14_fat64",
    "py33-none-macosx_10_14_fat32",
    "py33-none-macosx_10_14_universal2",
    "py33-none-macosx_10_14_universal",
    "py33-none-macosx_10_13_x86_64",
    "py33-none-macosx_10_13_intel",
    "py33-none-macosx_10_13_fat64",
    "py33-none-macosx_10_13_fat32",
    "py33-none-macosx_10_13_universal2",
    "py33-none-macosx_10_13_universal",
    "py33-none-macosx_10_12_x86_64",
    "py33-none-macosx_10_12_intel",
    "py33-none-macosx_10_12_fat64",
    "py33-none-macosx_10_12_fat32",
    "py33-none-macosx_10_12_universal2",
    "py33-none-macosx_10_12_universal",
    "py33-none-macosx_10_11_x86_64",
    "py33-none-macosx_10_11_intel",
    "py33-none-macosx_10_11_fat64",
    "py33-none-macosx_10_11_fat32",
    "py33-none-macosx_10_11_universal2",
    "py33-none-macosx_10_11_universal",
    "py33-none-macosx_10_10_x86_64",
    "py33-none-macosx_10_10_intel",
    "py33-none-macosx_10_10_fat64",
    "py33-none-macosx_10_10_fat32",
    "py33-none-macosx_10_10_universal2",
    "py33-none-macosx_10_10_universal",
    "py33-none-macosx_10_9_x86_64",
    "py33-none-macosx_10_9_intel",
    "py33-none-macosx_10_9_fat64",
    "py33-none-macosx_10_9_fat32",
    "py33-none-macosx_10_9_universal2",
    "py33-none-macosx_10_9_universal",
    "py33-none-macosx_10_8_x86_64",
    "py33-none-macosx_10_8_intel",
    "py33-none-macosx_10_8_fat64",
    "py33-none-macosx_10_8_fat32",
    "py33-none-macosx_10_8_universal2",
    "py33-none-macosx_10_8_universal",
    "py33-none-macosx_10_7_x86_64",
    "py33-none-macosx_10_7_intel",
    "py33-none-macosx_10_7_fat64",
    "py33-none-macosx_10_7_fat32",
    "py33-none-macosx_10_7_universal2",
    "py33-none-macosx_10_7_universal",
    "py33-none-macosx_10_6_x86_64",
    "py33-none-macosx_10_6_intel",
    "py33-none-macosx_10_6_fat64",
    "py33-none-macosx_10_6_fat32",
    "py33-none-macosx_10_6_universal2",
    "py33-none-macosx_10_6_universal",
    "py33-none-macosx_10_5_x86_64",
    "py33-none-macosx_10_5_intel",
    "py33-none-macosx_10_5_fat64",
    "py33-none-macosx_10_5_fat32",
    "py33-none-macosx_10_5_universal2",
    "py33-none-macosx_10_5_universal",
    "py33-none-macosx_10_4_x86_64",
    "py33-none-macosx_10_4_intel",
    "py33-none-macosx_10_4_fat64",
    "py33-none-macosx_10_4_fat32",
    "py33-none-macosx_10_4_universal2",
    "py33-none-macosx_10_4_universal",
    "py32-none-macosx_12_0_x86_64",
    "py32-none-macosx_12_0_intel",
    "py32-none-macosx_12_0_fat64",
    "py32-none-macosx_12_0_fat32",
    "py32-none-macosx_12_0_universal2",
    "py32-none-macosx_12_0_universal",
    "py32-none-macosx_11_0_x86_64",
    "py32-none-macosx_11_0_intel",
    "py32-none-macosx_11_0_fat64",
    "py32-none-macosx_11_0_fat32",
    "py32-none-macosx_11_0_universal2",
    "py32-none-macosx_11_0_universal",
    "py32-none-macosx_10_16_x86_64",
    "py32-none-macosx_10_16_intel",
    "py32-none-macosx_10_16_fat64",
    "py32-none-macosx_10_16_fat32",
    "py32-none-macosx_10_16_universal2",
    "py32-none-macosx_10_16_universal",
    "py32-none-macosx_10_15_x86_64",
    "py32-none-macosx_10_15_intel",
    "py32-none-macosx_10_15_fat64",
    "py32-none-macosx_10_15_fat32",
    "py32-none-macosx_10_15_universal2",
    "py32-none-macosx_10_15_universal",
    "py32-none-macosx_10_14_x86_64",
    "py32-none-macosx_10_14_intel",
    "py32-none-macosx_10_14_fat64",
    "py32-none-macosx_10_14_fat32",
    "py32-none-macosx_10_14_universal2",
    "py32-none-macosx_10_14_universal",
    "py32-none-macosx_10_13_x86_64",
    "py32-none-macosx_10_13_intel",
    "py32-none-macosx_10_13_fat64",
    "py32-none-macosx_10_13_fat32",
    "py32-none-macosx_10_13_universal2",
    "py32-none-macosx_10_13_universal",
    "py32-none-macosx_10_12_x86_64",
    "py32-none-macosx_10_12_intel",
    "py32-none-macosx_10_12_fat64",
    "py32-none-macosx_10_12_fat32",
    "py32-none-macosx_10_12_universal2",
    "py32-none-macosx_10_12_universal",
    "py32-none-macosx_10_11_x86_64",
    "py32-none-macosx_10_11_intel",
    "py32-none-macosx_10_11_fat64",
    "py32-none-macosx_10_11_fat32",
    "py32-none-macosx_10_11_universal2",
    "py32-none-macosx_10_11_universal",
    "py32-none-macosx_10_10_x86_64",
    "py32-none-macosx_10_10_intel",
    "py32-none-macosx_10_10_fat64",
    "py32-none-macosx_10_10_fat32",
    "py32-none-macosx_10_10_universal2",
    "py32-none-macosx_10_10_universal",
    "py32-none-macosx_10_9_x86_64",
    "py32-none-macosx_10_9_intel",
    "py32-none-macosx_10_9_fat64",
    "py32-none-macosx_10_9_fat32",
    "py32-none-macosx_10_9_universal2",
    "py32-none-macosx_10_9_universal",
    "py32-none-macosx_10_8_x86_64",
    "py32-none-macosx_10_8_intel",
    "py32-none-macosx_10_8_fat64",
    "py32-none-macosx_10_8_fat32",
    "py32-none-macosx_10_8_universal2",
    "py32-none-macosx_10_8_universal",
    "py32-none-macosx_10_7_x86_64",
    "py32-none-macosx_10_7_intel",
    "py32-none-macosx_10_7_fat64",
    "py32-none-macosx_10_7_fat32",
    "py32-none-macosx_10_7_universal2",
    "py32-none-macosx_10_7_universal",
    "py32-none-macosx_10_6_x86_64",
    "py32-none-macosx_10_6_intel",
    "py32-none-macosx_10_6_fat64",
    "py32-none-macosx_10_6_fat32",
    "py32-none-macosx_10_6_universal2",
    "py32-none-macosx_10_6_universal",
    "py32-none-macosx_10_5_x86_64",
    "py32-none-macosx_10_5_intel",
    "py32-none-macosx_10_5_fat64",
    "py32-none-macosx_10_5_fat32",
    "py32-none-macosx_10_5_universal2",
    "py32-none-macosx_10_5_universal",
    "py32-none-macosx_10_4_x86_64",
    "py32-none-macosx_10_4_intel",
    "py32-none-macosx_10_4_fat64",
    "py32-none-macosx_10_4_fat32",
    "py32-none-macosx_10_4_universal2",
    "py32-none-macosx_10_4_universal",
    "py31-none-macosx_12_0_x86_64",
    "py31-none-macosx_12_0_intel",
    "py31-none-macosx_12_0_fat64",
    "py31-none-macosx_12_0_fat32",
    "py31-none-macosx_12_0_universal2",
    "py31-none-macosx_12_0_universal",
    "py31-none-macosx_11_0_x86_64",
    "py31-none-macosx_11_0_intel",
    "py31-none-macosx_11_0_fat64",
    "py31-none-macosx_11_0_fat32",
    "py31-none-macosx_11_0_universal2",
    "py31-none-macosx_11_0_universal",
    "py31-none-macosx_10_16_x86_64",
    "py31-none-macosx_10_16_intel",
    "py31-none-macosx_10_16_fat64",
    "py31-none-macosx_10_16_fat32",
    "py31-none-macosx_10_16_universal2",
    "py31-none-macosx_10_16_universal",
    "py31-none-macosx_10_15_x86_64",
    "py31-none-macosx_10_15_intel",
    "py31-none-macosx_10_15_fat64",
    "py31-none-macosx_10_15_fat32",
    "py31-none-macosx_10_15_universal2",
    "py31-none-macosx_10_15_universal",
    "py31-none-macosx_10_14_x86_64",
    "py31-none-macosx_10_14_intel",
    "py31-none-macosx_10_14_fat64",
    "py31-none-macosx_10_14_fat32",
    "py31-none-macosx_10_14_universal2",
    "py31-none-macosx_10_14_universal",
    "py31-none-macosx_10_13_x86_64",
    "py31-none-macosx_10_13_intel",
    "py31-none-macosx_10_13_fat64",
    "py31-none-macosx_10_13_fat32",
    "py31-none-macosx_10_13_universal2",
    "py31-none-macosx_10_13_universal",
    "py31-none-macosx_10_12_x86_64",
    "py31-none-macosx_10_12_intel",
    "py31-none-macosx_10_12_fat64",
    "py31-none-macosx_10_12_fat32",
    "py31-none-macosx_10_12_universal2",
    "py31-none-macosx_10_12_universal",
    "py31-none-macosx_10_11_x86_64",
    "py31-none-macosx_10_11_intel",
    "py31-none-macosx_10_11_fat64",
    "py31-none-macosx_10_11_fat32",
    "py31-none-macosx_10_11_universal2",
    "py31-none-macosx_10_11_universal",
    "py31-none-macosx_10_10_x86_64",
    "py31-none-macosx_10_10_intel",
    "py31-none-macosx_10_10_fat64",
    "py31-none-macosx_10_10_fat32",
    "py31-none-macosx_10_10_universal2",
    "py31-none-macosx_10_10_universal",
    "py31-none-macosx_10_9_x86_64",
    "py31-none-macosx_10_9_intel",
    "py31-none-macosx_10_9_fat64",
    "py31-none-macosx_10_9_fat32",
    "py31-none-macosx_10_9_universal2",
    "py31-none-macosx_10_9_universal",
    "py31-none-macosx_10_8_x86_64",
    "py31-none-macosx_10_8_intel",
    "py31-none-macosx_10_8_fat64",
    "py31-none-macosx_10_8_fat32",
    "py31-none-macosx_10_8_universal2",
    "py31-none-macosx_10_8_universal",
    "py31-none-macosx_10_7_x86_64",
    "py31-none-macosx_10_7_intel",
    "py31-none-macosx_10_7_fat64",
    "py31-none-macosx_10_7_fat32",
    "py31-none-macosx_10_7_universal2",
    "py31-none-macosx_10_7_universal",
    "py31-none-macosx_10_6_x86_64",
    "py31-none-macosx_10_6_intel",
    "py31-none-macosx_10_6_fat64",
    "py31-none-macosx_10_6_fat32",
    "py31-none-macosx_10_6_universal2",
    "py31-none-macosx_10_6_universal",
    "py31-none-macosx_10_5_x86_64",
    "py31-none-macosx_10_5_intel",
    "py31-none-macosx_10_5_fat64",
    "py31-none-macosx_10_5_fat32",
    "py31-none-macosx_10_5_universal2",
    "py31-none-macosx_10_5_universal",
    "py31-none-macosx_10_4_x86_64",
    "py31-none-macosx_10_4_intel",
    "py31-none-macosx_10_4_fat64",
    "py31-none-macosx_10_4_fat32",
    "py31-none-macosx_10_4_universal2",
    "py31-none-macosx_10_4_universal",
    "py30-none-macosx_12_0_x86_64",
    "py30-none-macosx_12_0_intel",
    "py30-none-macosx_12_0_fat64",
    "py30-none-macosx_12_0_fat32",
    "py30-none-macosx_12_0_universal2",
    "py30-none-macosx_12_0_universal",
    "py30-none-macosx_11_0_x86_64",
    "py30-none-macosx_11_0_intel",
    "py30-none-macosx_11_0_fat64",
    "py30-none-macosx_11_0_fat32",
    "py30-none-macosx_11_0_universal2",
    "py30-none-macosx_11_0_universal",
    "py30-none-macosx_10_16_x86_64",
    "py30-none-macosx_10_16_intel",
    "py30-none-macosx_10_16_fat64",
    "py30-none-macosx_10_16_fat32",
    "py30-none-macosx_10_16_universal2",
    "py30-none-macosx_10_16_universal",
    "py30-none-macosx_10_15_x86_64",
    "py30-none-macosx_10_15_intel",
    "py30-none-macosx_10_15_fat64",
    "py30-none-macosx_10_15_fat32",
    "py30-none-macosx_10_15_universal2",
    "py30-none-macosx_10_15_universal",
    "py30-none-macosx_10_14_x86_64",
    "py30-none-macosx_10_14_intel",
    "py30-none-macosx_10_14_fat64",
    "py30-none-macosx_10_14_fat32",
    "py30-none-macosx_10_14_universal2",
    "py30-none-macosx_10_14_universal",
    "py30-none-macosx_10_13_x86_64",
    "py30-none-macosx_10_13_intel",
    "py30-none-macosx_10_13_fat64",
    "py30-none-macosx_10_13_fat32",
    "py30-none-macosx_10_13_universal2",
    "py30-none-macosx_10_13_universal",
    "py30-none-macosx_10_12_x86_64",
    "py30-none-macosx_10_12_intel",
    "py30-none-macosx_10_12_fat64",
    "py30-none-macosx_10_12_fat32",
    "py30-none-macosx_10_12_universal2",
    "py30-none-macosx_10_12_universal",
    "py30-none-macosx_10_11_x86_64",
    "py30-none-macosx_10_11_intel",
    "py30-none-macosx_10_11_fat64",
    "py30-none-macosx_10_11_fat32",
    "py30-none-macosx_10_11_universal2",
    "py30-none-macosx_10_11_universal",
    "py30-none-macosx_10_10_x86_64",
    "py30-none-macosx_10_10_intel",
    "py30-none-macosx_10_10_fat64",
    "py30-none-macosx_10_10_fat32",
    "py30-none-macosx_10_10_universal2",
    "py30-none-macosx_10_10_universal",
    "py30-none-macosx_10_9_x86_64",
    "py30-none-macosx_10_9_intel",
    "py30-none-macosx_10_9_fat64",
    "py30-none-macosx_10_9_fat32",
    "py30-none-macosx_10_9_universal2",
    "py30-none-macosx_10_9_universal",
    "py30-none-macosx_10_8_x86_64",
    "py30-none-macosx_10_8_intel",
    "py30-none-macosx_10_8_fat64",
    "py30-none-macosx_10_8_fat32",
    "py30-none-macosx_10_8_universal2",
    "py30-none-macosx_10_8_universal",
    "py30-none-macosx_10_7_x86_64",
    "py30-none-macosx_10_7_intel",
    "py30-none-macosx_10_7_fat64",
    "py30-none-macosx_10_7_fat32",
    "py30-none-macosx_10_7_universal2",
    "py30-none-macosx_10_7_universal",
    "py30-none-macosx_10_6_x86_64",
    "py30-none-macosx_10_6_intel",
    "py30-none-macosx_10_6_fat64",
    "py30-none-macosx_10_6_fat32",
    "py30-none-macosx_10_6_universal2",
    "py30-none-macosx_10_6_universal",
    "py30-none-macosx_10_5_x86_64",
    "py30-none-macosx_10_5_intel",
    "py30-none-macosx_10_5_fat64",
    "py30-none-macosx_10_5_fat32",
    "py30-none-macosx_10_5_universal2",
    "py30-none-macosx_10_5_universal",
    "py30-none-macosx_10_4_x86_64",
    "py30-none-macosx_10_4_intel",
    "py30-none-macosx_10_4_fat64",
    "py30-none-macosx_10_4_fat32",
    "py30-none-macosx_10_4_universal2",
    "py30-none-macosx_10_4_universal",
    "py39-none-any",
    "py3-none-any",
    "py38-none-any",
    "py37-none-any",
    "py36-none-any",
    "py35-none-any",
    "py34-none-any",
    "py33-none-any",
    "py32-none-any",
    "py31-none-any",
    "py30-none-any"
  ]
}
cp39-cp39-manylinux_2_26_x86_64.json
{
  "marker_environment": {
    "implementation_name": "cpython",
    "implementation_version": "3.9.11",
    "os_name": "posix",
    "platform_machine": "x86_64",
    "platform_python_implementation": "CPython",
    "platform_release": "4.14.255-273-220.498.amzn2.x86_64",
    "platform_system": "Linux",
    "platform_version": "#1 SMP Tue Mar 29 00:40:11 UTC 2022",
    "python_full_version": "3.9.11",
    "python_version": "3.9",
    "sys_platform": "linux"
  },
  "compatible_tags": [
    "cp39-cp39-manylinux_2_26_x86_64",
    "cp39-cp39-manylinux_2_25_x86_64",
    "cp39-cp39-manylinux_2_24_x86_64",
    "cp39-cp39-manylinux_2_23_x86_64",
    "cp39-cp39-manylinux_2_22_x86_64",
    "cp39-cp39-manylinux_2_21_x86_64",
    "cp39-cp39-manylinux_2_20_x86_64",
    "cp39-cp39-manylinux_2_19_x86_64",
    "cp39-cp39-manylinux_2_18_x86_64",
    "cp39-cp39-manylinux_2_17_x86_64",
    "cp39-cp39-manylinux2014_x86_64",
    "cp39-cp39-manylinux_2_16_x86_64",
    "cp39-cp39-manylinux_2_15_x86_64",
    "cp39-cp39-manylinux_2_14_x86_64",
    "cp39-cp39-manylinux_2_13_x86_64",
    "cp39-cp39-manylinux_2_12_x86_64",
    "cp39-cp39-manylinux2010_x86_64",
    "cp39-cp39-manylinux_2_11_x86_64",
    "cp39-cp39-manylinux_2_10_x86_64",
    "cp39-cp39-manylinux_2_9_x86_64",
    "cp39-cp39-manylinux_2_8_x86_64",
    "cp39-cp39-manylinux_2_7_x86_64",
    "cp39-cp39-manylinux_2_6_x86_64",
    "cp39-cp39-manylinux_2_5_x86_64",
    "cp39-cp39-manylinux1_x86_64",
    "cp39-cp39-linux_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-manylinux2014_x86_64",
    "cp39-abi3-manylinux_2_16_x86_64",
    "cp39-abi3-manylinux_2_15_x86_64",
    "cp39-abi3-manylinux_2_14_x86_64",
    "cp39-abi3-manylinux_2_13_x86_64",
    "cp39-abi3-manylinux_2_12_x86_64",
    "cp39-abi3-manylinux2010_x86_64",
    "cp39-abi3-manylinux_2_11_x86_64",
    "cp39-abi3-manylinux_2_10_x86_64",
    "cp39-abi3-manylinux_2_9_x86_64",
    "cp39-abi3-manylinux_2_8_x86_64",
    "cp39-abi3-manylinux_2_7_x86_64",
    "cp39-abi3-manylinux_2_6_x86_64",
    "cp39-abi3-manylinux_2_5_x86_64",
    "cp39-abi3-manylinux1_x86_64",
    "cp39-abi3-linux_x86_64",
    "cp39-none-manylinux_2_26_x86_64",
    "cp39-none-manylinux_2_25_x86_64",
    "cp39-none-manylinux_2_24_x86_64",
    "cp39-none-manylinux_2_23_x86_64",
    "cp39-none-manylinux_2_22_x86_64",
    "cp39-none-manylinux_2_21_x86_64",
    "cp39-none-manylinux_2_20_x86_64",
    "cp39-none-manylinux_2_19_x86_64",
    "cp39-none-manylinux_2_18_x86_64",
    "cp39-none-manylinux_2_17_x86_64",
    "cp39-none-manylinux2014_x86_64",
    "cp39-none-manylinux_2_16_x86_64",
    "cp39-none-manylinux_2_15_x86_64",
    "cp39-none-manylinux_2_14_x86_64",
    "cp39-none-manylinux_2_13_x86_64",
    "cp39-none-manylinux_2_12_x86_64",
    "cp39-none-manylinux2010_x86_64",
    "cp39-none-manylinux_2_11_x86_64",
    "cp39-none-manylinux_2_10_x86_64",
    "cp39-none-manylinux_2_9_x86_64",
    "cp39-none-manylinux_2_8_x86_64",
    "cp39-none-manylinux_2_7_x86_64",
    "cp39-none-manylinux_2_6_x86_64",
    "cp39-none-manylinux_2_5_x86_64",
    "cp39-none-manylinux1_x86_64",
    "cp39-none-linux_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-manylinux2014_x86_64",
    "cp38-abi3-manylinux_2_16_x86_64",
    "cp38-abi3-manylinux_2_15_x86_64",
    "cp38-abi3-manylinux_2_14_x86_64",
    "cp38-abi3-manylinux_2_13_x86_64",
    "cp38-abi3-manylinux_2_12_x86_64",
    "cp38-abi3-manylinux2010_x86_64",
    "cp38-abi3-manylinux_2_11_x86_64",
    "cp38-abi3-manylinux_2_10_x86_64",
    "cp38-abi3-manylinux_2_9_x86_64",
    "cp38-abi3-manylinux_2_8_x86_64",
    "cp38-abi3-manylinux_2_7_x86_64",
    "cp38-abi3-manylinux_2_6_x86_64",
    "cp38-abi3-manylinux_2_5_x86_64",
    "cp38-abi3-manylinux1_x86_64",
    "cp38-abi3-linux_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-manylinux2014_x86_64",
    "cp37-abi3-manylinux_2_16_x86_64",
    "cp37-abi3-manylinux_2_15_x86_64",
    "cp37-abi3-manylinux_2_14_x86_64",
    "cp37-abi3-manylinux_2_13_x86_64",
    "cp37-abi3-manylinux_2_12_x86_64",
    "cp37-abi3-manylinux2010_x86_64",
    "cp37-abi3-manylinux_2_11_x86_64",
    "cp37-abi3-manylinux_2_10_x86_64",
    "cp37-abi3-manylinux_2_9_x86_64",
    "cp37-abi3-manylinux_2_8_x86_64",
    "cp37-abi3-manylinux_2_7_x86_64",
    "cp37-abi3-manylinux_2_6_x86_64",
    "cp37-abi3-manylinux_2_5_x86_64",
    "cp37-abi3-manylinux1_x86_64",
    "cp37-abi3-linux_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-manylinux2014_x86_64",
    "cp36-abi3-manylinux_2_16_x86_64",
    "cp36-abi3-manylinux_2_15_x86_64",
    "cp36-abi3-manylinux_2_14_x86_64",
    "cp36-abi3-manylinux_2_13_x86_64",
    "cp36-abi3-manylinux_2_12_x86_64",
    "cp36-abi3-manylinux2010_x86_64",
    "cp36-abi3-manylinux_2_11_x86_64",
    "cp36-abi3-manylinux_2_10_x86_64",
    "cp36-abi3-manylinux_2_9_x86_64",
    "cp36-abi3-manylinux_2_8_x86_64",
    "cp36-abi3-manylinux_2_7_x86_64",
    "cp36-abi3-manylinux_2_6_x86_64",
    "cp36-abi3-manylinux_2_5_x86_64",
    "cp36-abi3-manylinux1_x86_64",
    "cp36-abi3-linux_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-manylinux2014_x86_64",
    "cp35-abi3-manylinux_2_16_x86_64",
    "cp35-abi3-manylinux_2_15_x86_64",
    "cp35-abi3-manylinux_2_14_x86_64",
    "cp35-abi3-manylinux_2_13_x86_64",
    "cp35-abi3-manylinux_2_12_x86_64",
    "cp35-abi3-manylinux2010_x86_64",
    "cp35-abi3-manylinux_2_11_x86_64",
    "cp35-abi3-manylinux_2_10_x86_64",
    "cp35-abi3-manylinux_2_9_x86_64",
    "cp35-abi3-manylinux_2_8_x86_64",
    "cp35-abi3-manylinux_2_7_x86_64",
    "cp35-abi3-manylinux_2_6_x86_64",
    "cp35-abi3-manylinux_2_5_x86_64",
    "cp35-abi3-manylinux1_x86_64",
    "cp35-abi3-linux_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-manylinux2014_x86_64",
    "cp34-abi3-manylinux_2_16_x86_64",
    "cp34-abi3-manylinux_2_15_x86_64",
    "cp34-abi3-manylinux_2_14_x86_64",
    "cp34-abi3-manylinux_2_13_x86_64",
    "cp34-abi3-manylinux_2_12_x86_64",
    "cp34-abi3-manylinux2010_x86_64",
    "cp34-abi3-manylinux_2_11_x86_64",
    "cp34-abi3-manylinux_2_10_x86_64",
    "cp34-abi3-manylinux_2_9_x86_64",
    "cp34-abi3-manylinux_2_8_x86_64",
    "cp34-abi3-manylinux_2_7_x86_64",
    "cp34-abi3-manylinux_2_6_x86_64",
    "cp34-abi3-manylinux_2_5_x86_64",
    "cp34-abi3-manylinux1_x86_64",
    "cp34-abi3-linux_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-manylinux2014_x86_64",
    "cp33-abi3-manylinux_2_16_x86_64",
    "cp33-abi3-manylinux_2_15_x86_64",
    "cp33-abi3-manylinux_2_14_x86_64",
    "cp33-abi3-manylinux_2_13_x86_64",
    "cp33-abi3-manylinux_2_12_x86_64",
    "cp33-abi3-manylinux2010_x86_64",
    "cp33-abi3-manylinux_2_11_x86_64",
    "cp33-abi3-manylinux_2_10_x86_64",
    "cp33-abi3-manylinux_2_9_x86_64",
    "cp33-abi3-manylinux_2_8_x86_64",
    "cp33-abi3-manylinux_2_7_x86_64",
    "cp33-abi3-manylinux_2_6_x86_64",
    "cp33-abi3-manylinux_2_5_x86_64",
    "cp33-abi3-manylinux1_x86_64",
    "cp33-abi3-linux_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-manylinux2014_x86_64",
    "cp32-abi3-manylinux_2_16_x86_64",
    "cp32-abi3-manylinux_2_15_x86_64",
    "cp32-abi3-manylinux_2_14_x86_64",
    "cp32-abi3-manylinux_2_13_x86_64",
    "cp32-abi3-manylinux_2_12_x86_64",
    "cp32-abi3-manylinux2010_x86_64",
    "cp32-abi3-manylinux_2_11_x86_64",
    "cp32-abi3-manylinux_2_10_x86_64",
    "cp32-abi3-manylinux_2_9_x86_64",
    "cp32-abi3-manylinux_2_8_x86_64",
    "cp32-abi3-manylinux_2_7_x86_64",
    "cp32-abi3-manylinux_2_6_x86_64",
    "cp32-abi3-manylinux_2_5_x86_64",
    "cp32-abi3-manylinux1_x86_64",
    "cp32-abi3-linux_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-manylinux2014_x86_64",
    "py39-none-manylinux_2_16_x86_64",
    "py39-none-manylinux_2_15_x86_64",
    "py39-none-manylinux_2_14_x86_64",
    "py39-none-manylinux_2_13_x86_64",
    "py39-none-manylinux_2_12_x86_64",
    "py39-none-manylinux2010_x86_64",
    "py39-none-manylinux_2_11_x86_64",
    "py39-none-manylinux_2_10_x86_64",
    "py39-none-manylinux_2_9_x86_64",
    "py39-none-manylinux_2_8_x86_64",
    "py39-none-manylinux_2_7_x86_64",
    "py39-none-manylinux_2_6_x86_64",
    "py39-none-manylinux_2_5_x86_64",
    "py39-none-manylinux1_x86_64",
    "py39-none-linux_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-manylinux2014_x86_64",
    "py3-none-manylinux_2_16_x86_64",
    "py3-none-manylinux_2_15_x86_64",
    "py3-none-manylinux_2_14_x86_64",
    "py3-none-manylinux_2_13_x86_64",
    "py3-none-manylinux_2_12_x86_64",
    "py3-none-manylinux2010_x86_64",
    "py3-none-manylinux_2_11_x86_64",
    "py3-none-manylinux_2_10_x86_64",
    "py3-none-manylinux_2_9_x86_64",
    "py3-none-manylinux_2_8_x86_64",
    "py3-none-manylinux_2_7_x86_64",
    "py3-none-manylinux_2_6_x86_64",
    "py3-none-manylinux_2_5_x86_64",
    "py3-none-manylinux1_x86_64",
    "py3-none-linux_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-manylinux2014_x86_64",
    "py38-none-manylinux_2_16_x86_64",
    "py38-none-manylinux_2_15_x86_64",
    "py38-none-manylinux_2_14_x86_64",
    "py38-none-manylinux_2_13_x86_64",
    "py38-none-manylinux_2_12_x86_64",
    "py38-none-manylinux2010_x86_64",
    "py38-none-manylinux_2_11_x86_64",
    "py38-none-manylinux_2_10_x86_64",
    "py38-none-manylinux_2_9_x86_64",
    "py38-none-manylinux_2_8_x86_64",
    "py38-none-manylinux_2_7_x86_64",
    "py38-none-manylinux_2_6_x86_64",
    "py38-none-manylinux_2_5_x86_64",
    "py38-none-manylinux1_x86_64",
    "py38-none-linux_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-manylinux2014_x86_64",
    "py37-none-manylinux_2_16_x86_64",
    "py37-none-manylinux_2_15_x86_64",
    "py37-none-manylinux_2_14_x86_64",
    "py37-none-manylinux_2_13_x86_64",
    "py37-none-manylinux_2_12_x86_64",
    "py37-none-manylinux2010_x86_64",
    "py37-none-manylinux_2_11_x86_64",
    "py37-none-manylinux_2_10_x86_64",
    "py37-none-manylinux_2_9_x86_64",
    "py37-none-manylinux_2_8_x86_64",
    "py37-none-manylinux_2_7_x86_64",
    "py37-none-manylinux_2_6_x86_64",
    "py37-none-manylinux_2_5_x86_64",
    "py37-none-manylinux1_x86_64",
    "py37-none-linux_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-manylinux2014_x86_64",
    "py36-none-manylinux_2_16_x86_64",
    "py36-none-manylinux_2_15_x86_64",
    "py36-none-manylinux_2_14_x86_64",
    "py36-none-manylinux_2_13_x86_64",
    "py36-none-manylinux_2_12_x86_64",
    "py36-none-manylinux2010_x86_64",
    "py36-none-manylinux_2_11_x86_64",
    "py36-none-manylinux_2_10_x86_64",
    "py36-none-manylinux_2_9_x86_64",
    "py36-none-manylinux_2_8_x86_64",
    "py36-none-manylinux_2_7_x86_64",
    "py36-none-manylinux_2_6_x86_64",
    "py36-none-manylinux_2_5_x86_64",
    "py36-none-manylinux1_x86_64",
    "py36-none-linux_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-manylinux2014_x86_64",
    "py35-none-manylinux_2_16_x86_64",
    "py35-none-manylinux_2_15_x86_64",
    "py35-none-manylinux_2_14_x86_64",
    "py35-none-manylinux_2_13_x86_64",
    "py35-none-manylinux_2_12_x86_64",
    "py35-none-manylinux2010_x86_64",
    "py35-none-manylinux_2_11_x86_64",
    "py35-none-manylinux_2_10_x86_64",
    "py35-none-manylinux_2_9_x86_64",
    "py35-none-manylinux_2_8_x86_64",
    "py35-none-manylinux_2_7_x86_64",
    "py35-none-manylinux_2_6_x86_64",
    "py35-none-manylinux_2_5_x86_64",
    "py35-none-manylinux1_x86_64",
    "py35-none-linux_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-manylinux2014_x86_64",
    "py34-none-manylinux_2_16_x86_64",
    "py34-none-manylinux_2_15_x86_64",
    "py34-none-manylinux_2_14_x86_64",
    "py34-none-manylinux_2_13_x86_64",
    "py34-none-manylinux_2_12_x86_64",
    "py34-none-manylinux2010_x86_64",
    "py34-none-manylinux_2_11_x86_64",
    "py34-none-manylinux_2_10_x86_64",
    "py34-none-manylinux_2_9_x86_64",
    "py34-none-manylinux_2_8_x86_64",
    "py34-none-manylinux_2_7_x86_64",
    "py34-none-manylinux_2_6_x86_64",
    "py34-none-manylinux_2_5_x86_64",
    "py34-none-manylinux1_x86_64",
    "py34-none-linux_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-manylinux2014_x86_64",
    "py33-none-manylinux_2_16_x86_64",
    "py33-none-manylinux_2_15_x86_64",
    "py33-none-manylinux_2_14_x86_64",
    "py33-none-manylinux_2_13_x86_64",
    "py33-none-manylinux_2_12_x86_64",
    "py33-none-manylinux2010_x86_64",
    "py33-none-manylinux_2_11_x86_64",
    "py33-none-manylinux_2_10_x86_64",
    "py33-none-manylinux_2_9_x86_64",
    "py33-none-manylinux_2_8_x86_64",
    "py33-none-manylinux_2_7_x86_64",
    "py33-none-manylinux_2_6_x86_64",
    "py33-none-manylinux_2_5_x86_64",
    "py33-none-manylinux1_x86_64",
    "py33-none-linux_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-manylinux2014_x86_64",
    "py32-none-manylinux_2_16_x86_64",
    "py32-none-manylinux_2_15_x86_64",
    "py32-none-manylinux_2_14_x86_64",
    "py32-none-manylinux_2_13_x86_64",
    "py32-none-manylinux_2_12_x86_64",
    "py32-none-manylinux2010_x86_64",
    "py32-none-manylinux_2_11_x86_64",
    "py32-none-manylinux_2_10_x86_64",
    "py32-none-manylinux_2_9_x86_64",
    "py32-none-manylinux_2_8_x86_64",
    "py32-none-manylinux_2_7_x86_64",
    "py32-none-manylinux_2_6_x86_64",
    "py32-none-manylinux_2_5_x86_64",
    "py32-none-manylinux1_x86_64",
    "py32-none-linux_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-manylinux2014_x86_64",
    "py31-none-manylinux_2_16_x86_64",
    "py31-none-manylinux_2_15_x86_64",
    "py31-none-manylinux_2_14_x86_64",
    "py31-none-manylinux_2_13_x86_64",
    "py31-none-manylinux_2_12_x86_64",
    "py31-none-manylinux2010_x86_64",
    "py31-none-manylinux_2_11_x86_64",
    "py31-none-manylinux_2_10_x86_64",
    "py31-none-manylinux_2_9_x86_64",
    "py31-none-manylinux_2_8_x86_64",
    "py31-none-manylinux_2_7_x86_64",
    "py31-none-manylinux_2_6_x86_64",
    "py31-none-manylinux_2_5_x86_64",
    "py31-none-manylinux1_x86_64",
    "py31-none-linux_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-manylinux2014_x86_64",
    "py30-none-manylinux_2_16_x86_64",
    "py30-none-manylinux_2_15_x86_64",
    "py30-none-manylinux_2_14_x86_64",
    "py30-none-manylinux_2_13_x86_64",
    "py30-none-manylinux_2_12_x86_64",
    "py30-none-manylinux2010_x86_64",
    "py30-none-manylinux_2_11_x86_64",
    "py30-none-manylinux_2_10_x86_64",
    "py30-none-manylinux_2_9_x86_64",
    "py30-none-manylinux_2_8_x86_64",
    "py30-none-manylinux_2_7_x86_64",
    "py30-none-manylinux_2_6_x86_64",
    "py30-none-manylinux_2_5_x86_64",
    "py30-none-manylinux1_x86_64",
    "py30-none-linux_x86_64",
    "py39-none-any",
    "py3-none-any",
    "py38-none-any",
    "py37-none-any",
    "py36-none-any",
    "py35-none-any",
    "py34-none-any",
    "py33-none-any",
    "py32-none-any",
    "py31-none-any",
    "py30-none-any"
  ]
}

And, of course, that only works because the resolve was satisfiable purely by wheels for both platforms. That may not always be the case:

$ pex3 lock create --complete-platform cp39-cp39-macosx_12_0_x86_64.json --complete-platform cp39-cp39-manylinux_2_26_x86_64.json "psutil<=5" --indent 2
ERROR: Could not find a version that satisfies the requirement psutil<=5 (from versions: 5.8.0, 5.9.0)
ERROR: No matching distribution found for psutil<=5
ERROR: Could not find a version that satisfies the requirement psutil<=5 (from versions: 5.8.0, 5.9.0)
ERROR: No matching distribution found for psutil<=5
pid 9379 -> /home/jsirois/.pex/venvs/367ce6a7fea60dcc241fcd9bc7c8f1ed5731ea88/0c2af63c3815d1d03077ee9c1f2cbc64e6c7925d/pex --disable-pip-version-check --no-python-version-warning --exists-action a --use-deprecated legacy-resolver --isolated -q --cache-dir /home/jsirois/.pex --log /tmp/pex-pip-logqucj8abv/pip.log download --dest /tmp/tmppcx85r_4/cp39-cp39-macosx_12_0_x86_64 --only-binary :all: psutil<=5 --index-url https://pypi.org/simple --retries 5 --timeout 15 exited with 1 and STDERR:
None

@brettcannon
Copy link
Member

I'm willing to be the PEP author for this @brettcannon and write up a packaging PR for the reference implementation. I'll certainly need a bit of guidance, but as the primary Pex maintainer it's long past due I get more involved with the PyPA and chip in.

Great! I'm happy to sponsor your PEP. First step is probably coming up with the design you want and propose it for discussion at https://discuss.python.org/c/packaging/14 . Once general consensus is reached then you can start work on a PEP.

@pradyunsg pradyunsg changed the title Resolution for TargetPython != current python evaluates markers against current python. Markers, Dependency resolution and cross compiling Sep 23, 2022
@pradyunsg pradyunsg changed the title Markers, Dependency resolution and cross compiling Allow changing the entire dependency resolution “context” (Markers, dependency resolution and cross compiling) Sep 23, 2022
@pradyunsg
Copy link
Member

Consolidating this into #11664

@pradyunsg
Copy link
Member

I think enabling pip to install into an interpreter other than the one it's running on is a good idea. I

--python is a flag we've added since this discussion, FWIW.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jan 16, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants