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

Install manylinux wheel although it's not officially supported by the host #3969

Closed
aomader opened this issue Sep 15, 2016 · 9 comments
Closed
Labels
auto-locked Outdated issues that have been locked by automation

Comments

@aomader
Copy link

aomader commented Sep 15, 2016

  • Pip version: 8.1.2
  • Python version: 3.5.2
  • Operating System: alpine 3.4

Description:

Support the installation of manylinux wheels, although the host system doesn't officially support it.

For example, alpine officially uses musl, but one can install glibc and all other required libs flawlessly, which should enable the usage of manylinux wheels.

@RonnyPfannschmidt
Copy link
Contributor

uhm wouldn't the python on alpine by default break due to being linked to musl while the code is linked to glibc (i recall such issues due to glib symbol versioning)

also many linux support is enabled by default even on platforms that might not support it

so unless alpine opts out of it, pip will happily install such packages

@aomader
Copy link
Author

aomader commented Sep 15, 2016

Well, if in start a simple python:3.5.2-alpine Docker image, which has done nothing to prevent the installation of manylinux wheels, as one can see in the Dockerfile), pip still tries to install the source package.

@dstufft
Copy link
Member

dstufft commented Sep 15, 2016

manylinux1 support isn't globally enabled on all Linux instances. We do some checks to try and figure out if the platform is manylinux1 friendly or not (mostly related to checking glibc version) but those checks are not very strict. I think it's really just the glibc version check.

You can override our detection logic (assuming you're still on a Linux at all that is) by writing a _manylinux.py file somewhere on sys.path and adding a single variable to it:

# _manylinux.py

manylinux1_compatible = True  # or False if you want to disable it

I don't fully grok all of the ABI issues with libc, but I think the concern is not whether or not glibc is the "primary" libc but what version of libc Python itself is linked against. I don't know if that has to match what c-extensions are linked against or not.

Try the above though! It should allow installation of manylinux1 wheels, and if it seems to be working maybe we can explore better detection methods.

@aomader
Copy link
Author

aomader commented Sep 16, 2016

@dstufft Thanks, that addition indeed allows the installation of wheel binaries.

@aomader aomader closed this as completed Sep 16, 2016
@jbwdevries
Copy link

I'd like to report that, at least for typed_ast==1.3.1 (latest) on `alpine 3.9 (latest), the given method doesn't work. When importing, I get the following error:

ImportError: Error relocating /usr/lib/python3.6/site-packages/typed_ast/_ast3.cpython-36m-x86_64-linux-gnu.so: __rawmemchr: symbol not found

I couldn't really work around it, except for modifying python3 to run with the compatibility layer:

apk add gcompat patchelf
patchelf --set-interpreter /lib/ld-linux-x86-64.so.2 $(which python3)

@ihnorton
Copy link

ihnorton commented Apr 5, 2019

It's not a great idea, but in a pinch you can also manually specify -t /path/to/dist-packages (or wherever), which will override the compatibility check entirely.

@stdedos
Copy link

stdedos commented May 24, 2019

FYI for future readers: In Alpine, one of the packages definitely don't like one or more of these packets:

Requirement already satisfied: mako in ./venv-example/lib/python3.6/site-packages (from -r requirements.txt (line 1)) (1.0.10)
Requirement already satisfied: cherrypy in ./venv-example/lib/python3.6/site-packages (from -r requirements.txt (line 2)) (18.1.1)
Requirement already satisfied: pysaml2<5.0.0,>=4.7.0 in ./venv-example/lib/python3.6/site-packages (from -r requirements.txt (line 3)) (4.7.0)
Requirement already satisfied: MarkupSafe>=0.9.2 in ./venv-example/lib/python3.6/site-packages (from mako->-r requirements.txt (line 1)) (1.1.1)
Requirement already satisfied: cheroot>=6.2.4 in ./venv-example/lib/python3.6/site-packages (from cherrypy->-r requirements.txt (line 2)) (6.5.5)
Requirement already satisfied: zc.lockfile in ./venv-example/lib/python3.6/site-packages (from cherrypy->-r requirements.txt (line 2)) (1.4)
Requirement already satisfied: more-itertools in ./venv-example/lib/python3.6/site-packages (from cherrypy->-r requirements.txt (line 2)) (7.0.0)
Requirement already satisfied: portend>=2.1.1 in ./venv-example/lib/python3.6/site-packages (from cherrypy->-r requirements.txt (line 2)) (2.4)
Requirement already satisfied: defusedxml in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (0.6.0)
Requirement already satisfied: cryptography>=1.4 in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2.6.1)
Requirement already satisfied: six in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (1.12.0)
Requirement already satisfied: pytz in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2019.1)
Requirement already satisfied: requests>=1.0.0 in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2.22.0)
Requirement already satisfied: pyOpenSSL in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (19.0.0)
Requirement already satisfied: python-dateutil in ./venv-example/lib/python3.6/site-packages (from pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2.8.0)
Requirement already satisfied: backports.functools-lru-cache in ./venv-example/lib/python3.6/site-packages (from cheroot>=6.2.4->cherrypy->-r requirements.txt (line 2)) (1.5)
Requirement already satisfied: setuptools in ./venv-example/lib/python3.6/site-packages (from zc.lockfile->cherrypy->-r requirements.txt (line 2)) (39.1.0)
Requirement already satisfied: tempora>=1.8 in ./venv-example/lib/python3.6/site-packages (from portend>=2.1.1->cherrypy->-r requirements.txt (line 2)) (1.14.1)
Requirement already satisfied: asn1crypto>=0.21.0 in ./venv-example/lib/python3.6/site-packages (from cryptography>=1.4->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (0.24.0)
Requirement already satisfied: cffi!=1.11.3,>=1.8 in ./venv-example/lib/python3.6/site-packages (from cryptography>=1.4->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (1.12.3)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in ./venv-example/lib/python3.6/site-packages (from requests>=1.0.0->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (1.25.3)
Requirement already satisfied: certifi>=2017.4.17 in ./venv-example/lib/python3.6/site-packages (from requests>=1.0.0->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2019.3.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in ./venv-example/lib/python3.6/site-packages (from requests>=1.0.0->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in ./venv-example/lib/python3.6/site-packages (from requests>=1.0.0->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2.8)
Requirement already satisfied: jaraco.functools>=1.20 in ./venv-example/lib/python3.6/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy->-r requirements.txt (line 2)) (2.0)
Requirement already satisfied: pycparser in ./venv-example/lib/python3.6/site-packages (from cffi!=1.11.3,>=1.8->cryptography>=1.4->pysaml2<5.0.0,>=4.7.0->-r requirements.txt (line 3)) (2.19)

@Trollgeir
Copy link

Trollgeir commented May 26, 2019

Based on @dstufft I can confirm that this fixed it for my docker image running python:3.7-alpine for the packages I needed (catboost).

RUN echo 'manylinux1_compatible = True' > /usr/local/lib/python3.7/site-packages/_manylinux.py
RUN python -c 'import sys; sys.path.append(r"/_manylinux.py")'

@stdedos
Copy link

stdedos commented May 26, 2019

Yes; but beware that e.g. py3-cryptography and dependant packages won't like it

@lock lock bot added the auto-locked Outdated issues that have been locked by automation label Jul 18, 2019
@lock lock bot locked as resolved and limited conversation to collaborators Jul 18, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
auto-locked Outdated issues that have been locked by automation
Projects
None yet
Development

No branches or pull requests

7 participants