T
tsuraan
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?
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?