[Distutils] pypi and easy_install

Phillip J. Eby pje at telecommunity.com
Sat Jan 19 20:08:20 CET 2008


At 01:46 PM 1/19/2008 -0500, Phillip J. Eby wrote:
>At 04:44 AM 1/19/2008 +0100, Giampaolo Rodola' wrote:
> >Ok, I tried to implement this and it is seems I made it.
> >The change permit to use the distutils "--formats=tar,gztar,bztar"
> >option without need of having tar/gzip/bzip2 utilities installed on
> >the system.
> >Don't know if distutils test suite includes tests for the part of code
> >I modified but Lib/test/test_distutils.py run successfully on Python
> >2.5.1.
> >
> >The only compression format currently left out is ztar.
> >I may be wrong but I haven't seen modules able to work with that
> >format in the Python stdlib.
> >
> >I'll wait for your review.
> >Tell me if you want me to open a ticket on the Python bug tracker to
> >let also other users review the patch, modify something or throw the
> >whole thing away. :-)
>
>That would probably be a good idea.  In the meantime, my only comment
>is that for consistency with make_zipfile, the code should work even
>if gzip, tarfile, or bz2 aren't importable.  That is, falling back to
>the old spawn-based methods if the relevant library or libraries are
>not available.  The comment at the top, after all, says "This module
>should be kept compatible with Python 2.1," and the tarfile and bz2
>modules weren't added until 2.3.  (I'm not sure when gzip was added.)

Oh, and if tarfile is present, you can open a tarfile for writing 
with 'w:gz' or 'w:bz2' to have it apply the compression while 
building, which is probably more efficient.  However, if the 
appropriate module isn't available, it'll raise a 
tarfile.CompressionError at creation time.  So the code could be 
something like:

     try:
         import tarfile
     except ImportError:
         tarfile = None

     if tarfile is not None:
         ext = compress_ext.get(compress, '')
         try:
             tar = tarfile.open(archive_name+ext, "w"+ext.replace('.',':'))
         except tarfile.CompressionError:
             tar = tarfile.open(archive_name, "w")
         tar.add(base_dir)
         tar.close()
         if tar.name == archive_name+ext:
             return tar.name  # we're done
         # ... fall through to old compression code
     else:
         # old spawn() code to create tar

     # everything from here on is just the old archive_util code...

     if compress:
         ...



More information about the Distutils-SIG mailing list