<div class="gmail_extra"><div class="gmail_quote">On Thu, Dec 6, 2012 at 11:30 AM, Vinay Sajip <span dir="ltr"><<a href="mailto:vinay_sajip@yahoo.co.uk" target="_blank">vinay_sajip@yahoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Daniel Holth <dholth <at> <a href="http://gmail.com" target="_blank">gmail.com</a>> writes:<br>
<br>
</div><div class="im">> You have to make a maximum of 3 requests: one for the directory pointer, one<br>
> for the directory, and one for the file you want. It's not particularly<br>
> difficult to make an HTTP-backed seekable file object to pass to ZipFile() for<br>
> this purpose but I don't have an example. Normally the last few k of the file<br>
> will contain all 3 pieces. 8k or 16k would be a good guess.<br>
<br>
</div>I don't need an example for doing it with multiple HTTP requests. I only asked<br>
for an example because you said one could read the metadata "with a single<br>
HTTP partial request", and I couldn't see how it could always be done with a<br>
single request.<br>
<br>
PEP 427 is mute on the subject of zip file comments in a .whl, but perhaps it<br>
shouldn't be. IIUC, the directory of the zip file *could* be further from the end<br>
of the file by more than 16K, due to the possible presence of a pathologically<br>
large comment in the end record.</blockquote><div><br>It's just a "usually works" optimization that might be fun when bandwidth is more important than round trip times. The distance between the directory and the end of the file depends on the size of the directory. Django's is an extreme case at nearly half a meg; most are much smaller.<br>
<br>On many filesystems it is cheap to create a sparse file the size of the entire archive and write the partial requests into it. The OS doesn't actually store all the 0's.<br><br>The other reason wheel puts the metadata at the end is so the metadata can be re-written efficiently without re-writing the entire zipfile. The wheel project implements ZipFile.pop() which truncates the last file from a (normal) zip archive. This is especially useful when the last file is the attached digital signature.<br>
</div></div></div>