From 83b879b1ece44406017c2a814bd0f57c2913a63f Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Tue, 16 Oct 2018 08:34:28 +0200 Subject: [PATCH] Improve PEP 518 build isolation (#5824) Handle .pth files, so namespace packages are correctly supported under Python 3.2 and earlier, and more. --- docs/html/reference/pip.rst | 2 ++ news/5656.bugfix | 1 + src/pip/_internal/build_env.py | 10 ++++++++++ .../simple_namespace-1.0-py2.py3-none-any.whl | Bin 0 -> 1985 bytes .../pep518_with_namespace_package.py | 0 .../pyproject.toml | 6 ++++++ .../pep518_with_namespace_package-1.0/setup.cfg | 2 ++ .../pep518_with_namespace_package-1.0/setup.py | 10 ++++++++++ tests/data/src/simple_namespace/setup.cfg | 2 ++ tests/data/src/simple_namespace/setup.py | 9 +++++++++ .../simple_namespace/__init__.py | 0 .../simple_namespace/module/__init__.py | 0 tests/functional/test_install.py | 10 ++++++++++ 13 files changed, 52 insertions(+) create mode 100644 news/5656.bugfix create mode 100644 tests/data/packages/simple_namespace-1.0-py2.py3-none-any.whl create mode 100644 tests/data/src/pep518_with_namespace_package-1.0/pep518_with_namespace_package.py create mode 100644 tests/data/src/pep518_with_namespace_package-1.0/pyproject.toml create mode 100644 tests/data/src/pep518_with_namespace_package-1.0/setup.cfg create mode 100644 tests/data/src/pep518_with_namespace_package-1.0/setup.py create mode 100644 tests/data/src/simple_namespace/setup.cfg create mode 100644 tests/data/src/simple_namespace/setup.py create mode 100644 tests/data/src/simple_namespace/simple_namespace/__init__.py create mode 100644 tests/data/src/simple_namespace/simple_namespace/module/__init__.py diff --git a/docs/html/reference/pip.rst b/docs/html/reference/pip.rst index 905be1ea611..fff2e652bbc 100644 --- a/docs/html/reference/pip.rst +++ b/docs/html/reference/pip.rst @@ -158,6 +158,8 @@ appropriately. does not support the use of environment markers and extras (only version specifiers are respected). +* ``pip<18.1``: build dependencies using .pth files are not properly supported; + as a result namespace packages do not work under Python 3.2 and earlier. Future Developments ~~~~~~~~~~~~~~~~~~~ diff --git a/news/5656.bugfix b/news/5656.bugfix new file mode 100644 index 00000000000..5bf365a8d5b --- /dev/null +++ b/news/5656.bugfix @@ -0,0 +1 @@ +- Improve PEP 518 build isolation: handle .pth files, so namespace packages are correctly supported under Python 3.2 and earlier. diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py index 673409d2645..409e01067ff 100644 --- a/src/pip/_internal/build_env.py +++ b/src/pip/_internal/build_env.py @@ -4,6 +4,7 @@ import logging import os import sys +import textwrap from distutils.sysconfig import get_python_lib from sysconfig import get_paths @@ -61,6 +62,15 @@ def __enter__(self): os.environ['PYTHONNOUSERSITE'] = '1' + # Ensure .pth files are honored. + with open(os.path.join(purelib, 'sitecustomize.py'), 'w') as fp: + fp.write(textwrap.dedent( + ''' + import site + site.addsitedir({!r}) + ''' + ).format(purelib)) + return self.path def __exit__(self, exc_type, exc_val, exc_tb): diff --git a/tests/data/packages/simple_namespace-1.0-py2.py3-none-any.whl b/tests/data/packages/simple_namespace-1.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..21d03a0df5020b8a54f73f68a217b15e8f2dee99 GIT binary patch literal 1985 zcmWIWW@Zs#U|`^2$X{jcJJ<8>KPg5A245xy1{I)aab|8oPHKE!Vs2`2L1J>MuA!cR zZb7B7p1E#baY1&vUO`F5)QP9PSPTVRzt_3GwVJ4=@MzV=rPc>qcc*D2Eq~uH4B3ioAYON`!@9!%i2`PTGnQA|wNi$%U4SRU22 zuv-?cUbZOW`rcnYdR={w*h6QRDio?ub)7Hv_Oy*i_{kkMZ`^i>z7@S8e5_6M8aMCa zDU+jnE56@L(SKZO(onHVq3dCLVEd~-3d{E&Trhoa_muu#zWqyfKb&ypU~pjTD#g|O z`|^G^zdrd~Z;K_Xj!*Xui4}3tM(6dUPMzBJm?f|C{B((Em%s5F?s!&yl2&;7Um~`A zMO@gAwRg=Ith+N^J?w3z`gMaQCzHI)kFmWDZ_Wv{Z)}{L(6O?qTj0l?V_wF=CTG8# zH4lJ?tqU-0fx*cD3|25u29oGutDl>nQks*hA0MBYmst`YuUAmX%z!Wg6g?|FZ7vA| zwF&~UDHbC@(W94=SzMx!gler#}12zzYT!jLohXUwOiH>b(BNuR7OwHFUks zp7hxiq@k(h`;^PmXM2#w3X@A`PoMX`>U(B&OQ(dg%MLW(|N5&QRSb08CLmS^V)ST2 z3u9l`5Jwls5Xac=jeLg`L|ngr7yZM~TbfdA9C-0a$n)vnR;k!1II#cU=XbPZ_wy%r zxV8LaBJC%1cOP6)dwp_hW8hKGPZu7ttA6B&n!WG##agk4e@wGBs8`oUS-Ca({c#I! z-&vP*Z&TZb&u8b|?FjgnXMX;x=w=h=*9%xt)5bRyi`rmd*3AQ^F;&9u4svz&4{}-B zZ(H2tAmaM_%#-;HO}q5OG#$bm1YHdb%&aw}9U|_WIKJV}uNj9#JQF8A6D_|tr#OFZ zaF|fc(J5DS?1Td+rcC_U$#Qg6nyc1EHQ`q}a?Lky_Z&(%?aJMo>5_7&eZ_OGw{wII zWeiGt-h5hjQnn;thSOp0{(V>WKTxjny#*{7&aK{aFe2&C!Ff*1m2VbB?UL`d*pR8w zbhT-V+)Z(j9n#yl`k$$MzWvm3!v9J8v%Njz%#-43W89@hGTOv4_;)>8MskG#VV{ySw=^xSB0oNCn-~SVGEk;t$)BV(ci+#Y<#KsSCY;MK%#zK>{(4fuW%>1{nY7CSoa8kPXCEtRM`WkHtW=41m3m!Dj`i zOo4%hMpj^YMRzlr6(}VPy2