[Python-Dev] New and Improved Import Hooks

Just van Rossum just@letterror.com
Thu, 5 Dec 2002 14:22:44 +0100


--1439855-2295726080-3248086973=:9001
Content-Type: text/plain; Charset=US-ASCII
Content-Transfer-Encoding: 7bit

I've attached a newer version of the patch. It fixes two important issues:

  - fix the uncompressed .zip bug that /F pointed out

  - Avoid infinite recursion (and crash) if a *.zip file is on sys.path
    before the item that finds the zipimport and zlib modules. Thanks to
    Paul Moore for reporting this.

(Right now the zipimport module must initially be available on sys.path for the
first zip import to work; so you can only replace sys.path with
["myarchive.zip"] *after* you've done "import zipimporter". This could be fixed
by making zipimporter a builtin module.)

Just
--1439855-2295726080-3248086973=:9001
Content-Type: application/octet-stream; Name="zipper2.tgz"; X-Mac-Type="00000000"; X-Mac-Creator="00000000"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; Filename="zipper2.tgz"

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
--1439855-2295726080-3248086973=:9001--