[Python-Dev] New Import Hook & New Zip Importer
Moore, Paul
Paul.Moore@atosorigin.com
Thu, 5 Dec 2002 11:03:53 -0000
On Thu, 5 Dec 2002 02:00:23 +0100, in you wrote:
>Phew, it works.
>
>The attached tgz file contains:
> zipper.patch: patches setup.py, Python/import.c, Python/importdl.h
> zipimport.c: zipimport module, move to Modules/
>
>Do I need to mention it's a rough patch <wink>?
How do I build on Windows? I don't know what's needed to build the
zipimport module... (Sorry, I'm not being awkward here, I have no
idea how to set up the necessary Visual Studio stuff so that I can
build it - and someone will need to, before the patch is complete).
>import.c changes:
> - Allow arbitrary objects on sys.path.
I still have reservations about this. Code will break... (if you
mean "string subclasses", then I feel slightly better about it)
> - If a path entry ends in ".zip", replace that entry with
> a zipimporter instance. (obviously, the zipimport module
> must be available for this to work.)
This seems like a gross hack. How do I write a similar hook for
strings ending in ".tar"? This isn't a YAGNI, it's a design
constraint which I don't believe is reasonable.
> - The search algo is:
> [handle builtin modules and frozen]
> for p on sys.path:
> if hasattr(p, "find_module"):
> handler =3D p.find_module(name)
> if handler is None:
> continue
> if isinstance(p, str):
> [do builtin import]
Who handles checking for pyc/pyo, looking at timestamps,
saving compiled source (if possible) etc?
Note that Jim Ahlstrom's patch modified the search order
so that *both* of pyc and pyo were considered. (This is to
allow python -O runs to get compiled modules from a zipfile
when only .pyc were available in the zipfile. There was a
discussion at the time about why this was good - I can't
recall the details just now). Your hooks don't seem to
support modified search orders like this.
>import.c todo/notes:
> - clean up, refactor, debug, document
Too right! I don't see any benefits in terms of code
readability for this patch (compared to Jim's code). In
both cases, import.c is still pretty incomprehensible :-)
That's about all the comments I can make, without building
the code and trying it out.
As a point of reference, could you possibly try the benchmark
code I sent you? If for no other reason than to see if it
runs under your patch...
Paul.