mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Added code to use Jim Ahlstrom's zipfile.py module if the external zip
command wasn't found or failed. (Code supplied by Thomas Heller <thomas.heller@ion-tof.com>.)
This commit is contained in:
parent
c8a95c8d5e
commit
cbeca7b408
1 changed files with 32 additions and 5 deletions
|
@ -435,12 +435,39 @@ class Dist (Command):
|
||||||
|
|
||||||
def make_zipfile (self, base_dir):
|
def make_zipfile (self, base_dir):
|
||||||
|
|
||||||
# This assumes the Unix 'zip' utility -- it could be easily recast
|
# This initially assumed the Unix 'zip' utility -- but
|
||||||
# to use pkzip (or whatever the command-line zip creation utility
|
# apparently InfoZIP's zip.exe works the same under Windows, so
|
||||||
# on Redmond's archaic CP/M knockoff is nowadays), but I'll let
|
# no changes needed!
|
||||||
# someone who can actually test it do that.
|
|
||||||
|
|
||||||
self.spawn (["zip", "-r", base_dir + ".zip", base_dir])
|
try:
|
||||||
|
self.spawn (["zip", "-r", base_dir + ".zip", base_dir])
|
||||||
|
except DistutilsExecError:
|
||||||
|
|
||||||
|
# XXX really should distinguish between "couldn't find
|
||||||
|
# external 'zip' command" and "zip failed" -- shouldn't try
|
||||||
|
# again in the latter case. (I think fixing this will
|
||||||
|
# require some cooperation from the spawn module -- perhaps
|
||||||
|
# a utility function to search the path, so we can fallback
|
||||||
|
# on zipfile.py without the failed spawn.)
|
||||||
|
try:
|
||||||
|
import zipfile
|
||||||
|
except ImportError:
|
||||||
|
raise DistutilsExecError, \
|
||||||
|
("unable to create zip file '%s.zip':" +
|
||||||
|
"could neither find a standalone zip utility nor " +
|
||||||
|
"import the 'zipfile' module") % base_dir
|
||||||
|
|
||||||
|
z = zipfile.ZipFile (base_dir + ".zip", "wb",
|
||||||
|
compression=zipfile.ZIP_DEFLATED)
|
||||||
|
|
||||||
|
def visit (z, dirname, names):
|
||||||
|
for name in names:
|
||||||
|
path = os.path.join (dirname, name)
|
||||||
|
if os.path.isfile (path):
|
||||||
|
z.write (path, path)
|
||||||
|
|
||||||
|
os.path.walk (base_dir, visit, z)
|
||||||
|
z.close()
|
||||||
|
|
||||||
|
|
||||||
def make_distribution (self):
|
def make_distribution (self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue