[Distutils] Installing namespace packages with pip inserts strange modules into sys.modules

Thomas Heller theller at ctypes.org
Fri Sep 12 21:34:37 CEST 2014


Am 12.09.2014 21:24, schrieb Eric V. Smith:
> [Oops, replying to the list this time. Sorry for the dupe, Thomas.]
>
> On 9/12/2014 3:14 PM, Thomas Heller wrote:
>> So it seems that it is a bug in setuptools:  It must not create or
>> install these pth files when installing in Python 3.3 or newer (which
>> implement PEP 420).
>
> PEP 420 goes out of its way to support pkgutil.extend_path():
> http://legacy.python.org/dev/peps/pep-0420/#migrating-from-legacy-namespace-packages
>
> So it should be possible for some cross-version code to work.

My point is that the source code for zope.interface (for example) has
the magic code in the zope/__init__.py file, right beneath the
zope/interface/ directory:

"""
try:
     import pkg_resources
     pkg_resources.declare_namespace(__name__)
except ImportError:
     import pkgutil
     __path__ = pkgutil.extend_path(__path__, __name__)
"""

IMO this is to support the legacy way.
See:
https://github.com/zopefoundation/zope.interface/blob/master/src/zope/__init__.py

However, when installing it in Python 3.4, this __init__.py file is NOT 
installed. Instead, the 'zope' directory ONLY contains the 'interface' 
subdirectory with all the code.  But a .pth file is installed that does
the strange things that I mentioned in the original post.

Thomas



More information about the Distutils-SIG mailing list