4

I'm trying to build my legacy project with the pypy-2.7-buster Docker image. Some requirements need to be built in the install process inside the container.

Problem arises when one of my dependencies needs setuptools to build itself, their specified version in the pyproject.toml or setup.py is too loose and it fetches setuptools-57.something which is not compatible with Python 2.7.

requirements.txt

setuptools==44.1.1
numpy==1.16.6
cryptography==3.3.1

Here's a case when it happens with cryptography-3.3.1 (lines 15 and 16 give it away):


1   Requirement already satisfied: setuptools==44.1.1 in /opt/pypy/site-packages (from -c constraints.txt (line 1)) (44.1.1)
2   Collecting numpy==1.16.6
3    Downloading .../numpy-1.16.6.zip (5.1 MB)
4   Collecting cryptography==3.3.1
5     Downloading ...cryptography-3.3.1.tar.gz (539 kB)
6     Installing build dependencies: started
7     Installing build dependencies: finished with status 'error'
8     ERROR: Command errored out with exit status 1:
9      command: /opt/pypy/bin/pypy /opt/pypy/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-rDC5lF/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i repo --trusted-host host -- 'setuptools>=40.6.0' wheel 'cffi>=1.12; platform_python_implementation != '"'"'PyPy'"'"''
10         cwd: None
11    Complete output (34 lines):
12     DEPRECATION: pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
13    Looking in indexes: repo
14    Ignoring cffi: markers 'platform_python_implementation != "PyPy"' don't match your environment
15    Collecting setuptools>=40.6.0
16      Downloading repo/setuptools-57.4.0.tar.gz (2.1 MB)
17      Installing build dependencies: started
18      Installing build dependencies: finished with status 'done'
19      Getting requirements to build wheel: started
20      Getting requirements to build wheel: finished with status 'error'
21      ERROR: Command errored out with exit status 1:
22       command: /opt/pypy/bin/pypy /opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpXomGVX
23           cwd: /tmp/pip-install-8S7wKA/setuptools
24      Complete output (19 lines):
25      Traceback (most recent call last):
26        File "/opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py", line 280, in <module>
27          main()
28        File "/opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py", line 263, in main
29          json_out['return_val'] = hook(**hook_input['kwargs'])
30        File "/opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py", line 108, in get_requires_for_build_wheel
31          backend = _build_backend()
32        File "/opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py", line 86, in _build_backend
33          obj = import_module(mod_path)
34        File "/opt/pypy/lib-python/2.7/importlib/__init__.py", line 37, in import_module
35          __import__(name)
36        File "/tmp/pip-install-8S7wKA/setuptools/setuptools/__init__.py", line 16, in <module>
37          import setuptools.version
38        File "/tmp/pip-install-8S7wKA/setuptools/setuptools/version.py", line 1, in <module>
39          import pkg_resources
40        File "/tmp/pip-install-8S7wKA/setuptools/pkg_resources/__init__.py", line 1367
41          raise SyntaxError(e) from e
42                               ^
43      SyntaxError: invalid syntax
44      ----------------------------------------
45    ERROR: Command errored out with exit status 1: /opt/pypy/bin/pypy /opt/pypy/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpXomGVX Check the logs for full command output.
46    ----------------------------------------
47w  ERROR: Command errored out with exit status 1: /opt/pypy/bin/pypy /opt/pypy/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-rDC5lF/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i repo --trusted-host host -- 'setuptools>=40.6.0' wheel 'cffi>=1.12; platform_python_implementation != '"'"'PyPy'"'"'' Check the logs for full command output.

In the pyproject.toml of cryptography-3.3.1 source, there is this:

requires = ["setuptools>=40.6.0"...

so it ignores the setuptools-44.1.1 it already installed and goes to get the latest one which is not Python 2.7 compatible.

I see that the command it runs when installing build dependencies has a --ignore-installed flag, could that be overridden?

I tried changing the source, PKG-INFO, uploading this custom version to my repo and it worked. The thing is, it happens in multiple places (pandas, PyYAML...) and it feels hacky to do custom versions for each requirement. :(

Also tried some pip flags to override this, nothing helped.

Thanks!

0 Answers0