2012-05-15 19 views
5

Próbuję spakować pakiet pychess do pliku zip i zaimportować go za pomocą Zipimport, ale działa w niektórych przypadkach.Zipimport z pakietami

ja pakuje go w na kartę SD z następującym skryptem, który działa:

#!/usr/bin/env python 
import zipfile 
zf = zipfile.PyZipFile('../pychess.zip.mod', mode='w') 
try: 
    zf.writepy('.') 
finally: 
    zf.close() 
for name in zf.namelist(): 
    print name 

Jednak jestem w stanie wykonać skomplikowane importu w moim kodu:

z = zipimport.zipimporter('./pychess.zip.mod') 
#z.load_module('pychess') # zipimport.ZipImportError: can't find module 'pychess' 
#z.load_module('Utils.lutils') # zipimport.ZipImportError: can't find module 'Utils.lutils' 
Utils = z.load_module('Utils') # seems to work, but... 
from Utils import lutils 
#from Utils.lutils import LBoard # ImportError: No module named pychess.Utils.const 


Jak mogę zaimportować, np. pychess.Utils.lutils.LBoard z pliku zip?

Oto pełna lista modułów muszę importować:

import pychess 
from pychess.Utils.lutils import LBoard 
from pychess.Utils.const import * 
from pychess.Utils.lutils import lmovegen 
from pychess.Utils.lutils import lmove 

Dzięki!

Odpowiedz

2

Zakładając, że masz rozpakowane pychess, co powoduje, że katalog pychess-0.10.1 w twoim aktualnym katalogu istnieje i że pychess-0.10.1/lib/pychess istnieje (mam ten katalog od unarring pychess-0.10.1.tar .gz).

Pierwszy bieg:

#!/usr/bin/env python 

import os 
import zipfile 

os.chdir('pychess-0.10.1/lib') 
zf = zipfile.PyZipFile('../../pychess.zip', mode='w') 
try: 
    zf.writepy('pychess') 
finally: 
    zf.close() 
for name in zf.namelist(): 
    print name 

potem, to działa:

#!/usr/bin/env python 

import sys 
sys.path.insert(0, 'pychess.zip') 

from pychess.Utils.lutils import LBoard 
+0

Zmiana mój skrypt kompilacji używać "zf.writepy ('pychess')" wystarczyły. Dzięki! – tba

Powiązane problemy