[Distutils] setuptools fails to install package data from ZIP distribution

Phillip J. Eby pje at telecommunity.com
Wed Sep 26 19:13:39 CEST 2007


At 03:39 PM 9/26/2007 +0200, Philipp von Weitershausen wrote:
>Packages with Zope software typically contain lots of package data
>(templates, resources, translations, configuration files). Last night we
>had somebody with a Windows machine make distributions of some of our
>eggs (using python setup.py sdist) for the first time. It turns out,
>'sdist' on Windows creates a ZIP file while on other platforms it
>creates a gzipped tarball. I find that difference in behaviour a bit
>disturbing.
>
>That behaviour isn't the actual root of the problem we experienced,
>however. These ZIP distributions were then uploaded to PyPI and other
>people happily started installing them. The only problem was that on
>Linux and MacOSX, the installed eggs no longer contained any of the
>package data. The distributions (the ZIP files) do contain it, but
>somehow setuptools fails to install it properly.
>
>Is this a known bug?

It is now.  :)


>Is there a reason for the different default behaviour of 'sdist' on the
>different platforms?

The Windows-created SOURCES.txt contains \r characters, which when 
read on non-Windows platforms causes setuptools to look for files 
with a '\r' on the end, due to this piece of code in the distutils 
"sdist" command (which is reused by setuptools):

     def read_manifest (self):
         """Read the manifest file (named by 'self.manifest') and use it to
         fill in 'self.filelist', the list of files to include in the source
         distribution.
         """
         log.info("reading manifest file '%s'", self.manifest)
         manifest = open(self.manifest)
         while 1:
             line = manifest.readline()
             if line == '':              # end of file
                 break
             if line[-1] == '\n':
                 line = line[0:-1]
             self.filelist.append(line)

This code was apparently a platform-safety issue with the distutils 
all along, but it only affects setuptools because we actually ship 
and use the manifest (as SOURCES.txt) with the source distribution.

I've checked in a fix for both the 0.7 trunk and the 0.6 branch; you 
can update with "easy_install setuptools==dev" or "easy_install 
setuptools==dev06".

The fix is a "belt and braces" one; it ensures that Windows will now 
write SOURCES.txt in a way that unfixed setuptools can read it, AND 
it ensures that non-Windows setuptools can read SOURCES.txt written 
by an unfixed setuptools on Windows.  In other words, as long as 
either the sdist creator or the person installing the sdist have the 
fix, it will work.



More information about the Distutils-SIG mailing list