[Distutils] zc.buildout: KeyError during "buildout init" with distribute 0.6.25

Felix Schwarz felix.schwarz at oss.schwarz.eu
Fri Apr 6 12:04:55 CEST 2012


I use Python 2.7 (Fedora 16). However zc.buildout (1.5.2) does not work for me:
$ buildout init
Creating '/home/fs/temp/buildout.cfg'.
Creating directory '/home/fs/temp/bin'.
Creating directory '/home/fs/temp/parts'.
Creating directory '/home/fs/temp/eggs'.
Creating directory '/home/fs/temp/develop-eggs'.
Getting distribution for 'distribute'.
Traceback (most recent call last):
    add_activation_listener(lambda dist: dist.activate())
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2230, in activate
    map(declare_namespace, self._get_metadata('namespace_packages.txt'))
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 1815, in
    path = sys.modules[parent].__path__
KeyError: 'peak'
An error occurred when trying to install distribute 0.6.25. Look above this
message for any errors that were output by easy_install.
  Getting distribution for 'distribute'.
Error: Couldn't install: distribute 0.6.25

The code which causes the exception is:
def declare_namespace(packageName):
        if '.' in packageName:
            parent = '.'.join(packageName.split('.')[:-1])
            if parent not in _namespace_packages:
                path = sys.modules[parent].__path__
            except AttributeError:
                raise TypeError("Not a package:", parent)

The package which triggers the bug is 'decoratortools' (python package
'peak.utils'). If I install other namespace packages (e.g. zope.interface)
everything works fine.

The error happens because 'peak' is not in sys.modules when buildout calls
it's easy_install implementation. If I add some code to ignore the keyerror,
everything works as expected though I'm not sure that this is the right fix.

Any idea how I can fix this? Pointers welcome.

More information about the Distutils-SIG mailing list