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('.zi p')]
zips = [os.path.join(he re, z) for z in zips]
for z in zips:
print z
mod = os.path.split(z )[-1][:-4]
print mod
globals()[mod] = zipimport.zipim porter(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?
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('.zi p')]
zips = [os.path.join(he re, z) for z in zips]
for z in zips:
print z
mod = os.path.split(z )[-1][:-4]
print mod
globals()[mod] = zipimport.zipim porter(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?
Comment