GrahamDumpleton / wrapt

A Python module for decorators, wrappers and monkey patching.
BSD 2-Clause "Simplified" License
2.03k stars 231 forks source link

Wheel file for Python 3.11 not available via PyPi #228

Closed sxwebster closed 1 year ago

sxwebster commented 1 year ago

There is no wheel file available via PyPi for Python 3.11.

Importantly it's not possible to use pip install wrapt in an enterprise setting where SSL inspection is being used. Wrapt is a dependency of pip-system-certs, where the latter overcomes SSL breakages caused by custom root certificates / self signed certificates being present. Thus, it's necessary to download the first set of dependencies (wrapt and pip-system-certs) as wheel files and install in order to get pip working.

Without a build of wrapt available for Python 3.11 this setup is currently broken, leaving these sorts of users stuck. Those users are likely to come from government, academia, and the like. Basically places that can afford to provide devices to staff,students, volunteers, and who have any moderate sort of cybersecurity.

GrahamDumpleton commented 1 year ago

Try:

pip install wrapt==1.15.0rc1

and see if it solves your problems.

sxwebster commented 1 year ago

@GrahamDumpleton It does not. This is explained in the issue above.

GrahamDumpleton commented 1 year ago

No it isn't explained in the above. Unless pip-system-certs has specified a range which precludes it being installed, you should be able to pin wrapt to 1.15.0rc1 in a requirements.txt file or on pip command line. So if you are using requirements.txt file did you try:

wrapt==1.15.0rc1

If you did, what was the error from pip when trying to install it?

GrahamDumpleton commented 1 year ago

In other words, 1.15.0rc1 which is on PyPi includes Python 3.11 wheels. I have been waiting for a few people to test the release candidate before make official release.

sxwebster commented 1 year ago

Log below. It will not matter if pip is reading a requirements.txt, because pip refuses to connect due to custom certificates being in place. To resolve that, I'll need to grab a wheel file and install that manually, in order to install pip-system-certs, in order get pip to read the local certificate store.

When I'm looking at pypi under the downloads heading, there is no wheel file for 3.11, just 3.10 and prior from May 2, 2022. I can see there is a 1.15 rc in releases. Awesome. I literally cannot use pip to get it. If I could get a wheel file for it, then I could almost certainly get pip to work as I have with previous versions.

Is there any chance you could build a wheel file for it? I can then test it.

C:\Users\sxwebster\Downloads>pip install wrapt=1.15.0rc1 ERROR: Invalid requirement: 'wrapt=1.15.0rc1' Hint: = is not a valid operator. Did you mean == ?

C:\Users\sxwebster\Downloads>pip install wrapt==1.15.0rc1 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)'))': /simple/wrapt/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)'))': /simple/wrapt/

C:\Users\sxwebster\Downloads>python -m pip install "wrapt>=1.15.0rc1" WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)'))': /simple/wrapt/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)'))': /simple/wrapt/

GrahamDumpleton commented 1 year ago

All the wheel files for that release are on PyPi.

https://pypi.org/project/wrapt/1.15.0rc1/#files

Are you saying the specific platform wheel you need is not there.

I rely on the pypa/cibuildwheel GitHub action to build wheels so if they are not building the wheel you need am not sure what I can do.

sxwebster commented 1 year ago

This is clearly a me issue with navigating pypi. I was clicking download files from the main wrapt homepage. I had to enter the releases page, open the release, then click the same download files link to get to the wheels for 1.15.0rc1.

I'll try it and get back to you.

For a standard windows python install with python 3.11 is there a particular build you'd recommend? the 'any' build?

GrahamDumpleton commented 1 year ago

The any build is a fallback to a pure Python source code implementation. For 64bit Windows on Intel you would probably want wrapt-1.15.0rc1-cp311-cp311-win_amd64.whl. This has compiled C extensions so bit less overhead.

sxwebster commented 1 year ago

Thank you very much.

Whilst I can't attest to comprehensive testing, the following might help:

I downloaded https://files.pythonhosted.org/packages/f8/ec/ada95455e5d5e171057d6fa2966652e0ae79e04e54d4753b792d4ba1c097/wrapt-1.15.0rc1-cp311-cp311-win_amd64.whl and installed with pip install wrapt-1.15.0rc1-cp311-cp311-win_amd64.whl

Result:

C:\Users\sxwebster\Downloads>pip install wrapt-1.15.0rc1-cp311-cp311-win_amd64.whl
Processing c:\users\sxwebster\downloads\wrapt-1.15.0rc1-cp311-cp311-win_amd64.whl
Installing collected packages: wrapt
Successfully installed wrapt-1.15.0rc1

I subsequently grabbed the wheel file for pip-system-certs from here https://files.pythonhosted.org/packages/70/82/78c30a18858d484acd13a3aea22ead89c66f200e118d1aa4b4bae392efee/pip_system_certs-4.0-py2.py3-none-any.whl.

Using pip install pip_system_certs-4.0-py2.py3-none-any resulted in a successful install.

Follow up testing installing a never before installed package with a complex dependencies list, Ansible, was successful.

Thanks for your time, help, and advice. It's contributions like yours with wrapt that make the Python ecosystem tick!