<div dir="ltr">Sorry for lack of example, here it is:<div><a href="https://b702c277c3869af6f0a9-3df34f04e18be629eb587340c626577b.ssl.cf5.rackcdn.com/720754/3/check/openstack-tox-lower-constraints/9960fdf/tox/lower-constraints-1.log">https://b702c277c3869af6f0a9-3df34f04e18be629eb587340c626577b.ssl.cf5.rackcdn.com/720754/3/check/openstack-tox-lower-constraints/9960fdf/tox/lower-constraints-1.log</a> </div><div><br></div><pre style="color:rgb(0,0,0);white-space:pre-wrap">Collecting MarkupSafe==1.0
  Downloading <a href="http://mirror.bhs1.ovh.openstack.org/wheel/ubuntu-18.04-x86_64/markupsafe/MarkupSafe-1.0-cp36-cp36m-linux_x86_64.whl">http://mirror.bhs1.ovh.openstack.org/wheel/ubuntu-18.04-x86_64/markupsafe/MarkupSafe-1.0-cp36-cp36m-linux_x86_64.whl</a> (31 kB)
</pre><br class="gmail-Apple-interchange-newline"><div>-yoctozepto <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 17, 2020 at 7:43 PM Jeremy Stanley <<a href="mailto:fungi@yuggoth.org">fungi@yuggoth.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-04-17 19:00:31 +0200 (+0200), Radosław Piliszek wrote:<br>
> Thanks, Andreas, for analysis.<br>
> <br>
> I have more to add: in Zuul we rely on extra wheels. In the wild usually<br>
> only on PyPI ones.<br>
> This adds more flavour to lower-constraints breakage as py3 incompats make<br>
> their appearance in full, e.g.:<br>
> <br>
> Collecting MarkupSafe==1.0<br>
>   Using cached MarkupSafe-1.0.tar.gz (14 kB)<br>
>     ERROR: Command errored out with exit status 1:<br>
>     Complete output (5 lines):<br>
>     Traceback (most recent call last):<br>
>       File "<string>", line 1, in <module><br>
>       File "/tmp/pip-install-_vser3_6/MarkupSafe/setup.py", line 6, in<br>
> <module><br>
>         from setuptools import setup, Extension, Feature<br>
>     ImportError: cannot import name 'Feature'<br>
[...]<br>
<br>
I don't understand what you're trying to demonstrate here.<br>
MarkupSafe-1.0.tar.gz is an sdist, not a wheel. In our CI jobs we<br>
retrieve sdists from PyPI (via a caching proxy), and also do the<br>
same for any wheels which are published on PyPI. Some packages which<br>
aren't generally available as wheels for our target platforms are<br>
supplemented by sets we periodically pre-build and serve from a<br>
central wheelhouse, to save time so jobs don't have to redundantly<br>
rebuild them all from sdists themselves on every run.<br>
-- <br>
Jeremy Stanley<br>
</blockquote></div>