468,765 Members | 1,090 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,765 developers. It's quick & easy.

zip files as nested modules?

Supposing that I have a directory tree like so:

a/
__init__.py
b/
__init__.py
c.py

and b.py has some method (let's call it d) within it. I can, from python, do:

from a.b.c import d
d()

And, that works. Now, suppose I want to have a zipped module under a,
called b.zip. Is there any way that I can accomplish the same thing,
but using the zip file as the inner module?

My directory layout is then

a/
__init__.py
b.zip

And b is a zipfile laid out like

b/
__init__.py
c.py

I tried populating a's __init__ with this:

import zipimport
import os
here = os.path.join(os.getcwd(), __path__[0])
zips = [f for f in os.listdir(here) if f.endswith('.zip')]
zips = [os.path.join(here, z) for z in zips]

for z in zips:
print z
mod = os.path.split(z)[-1][:-4]
print mod
globals()[mod] = zipimport.zipimporter(z).load_module(mod)

All the zip modules appear (I actually have a few zips, but that
shouldn't be important), but their contents do not seem to be
accessible in any way. I could probably put import statements in all
the __init__.py files to import everything in the level below, but I
am under the impression that relative imports are frowned upon, and it
seems pretty bug-prone anyhow.

Any pointers on how to accomplish zip modules being nested within normal ones?
Apr 1 '07 #1
1 1527
Importing modules from zip files was proposed in PEP-273 [1]

Here is how the spec of PEP-273 begins:

'''
Currently, sys.path is a list of directory names as strings. If this
PEP is implemented, an item of sys.path can be a string naming a zip
file archive.
'''

My interpretation of the above is that, to be importable, a zip file
must be explicitly named in sys.path.

So the mere fact that a zip file lies somewhere in a directory which
is part of the sys.path does not make it importable.

Cheers,

Luciano
[1] http://www.python.org/dev/peps/pep-0273/

Apr 6 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by TonyB | last post: by
2 posts views Thread by spike grobstein | last post: by
1 post views Thread by Yigit Ozgul | last post: by
37 posts views Thread by Tim N. van der Leeuw | last post: by
2 posts views Thread by webcm123 | last post: by
1 post views Thread by CARIGAR | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.