Zipimport包

时间:2012-05-15 05:10:24

标签: python import importerror

我正在尝试将pychess包打包成zip文件并使用zipimport导入它,但遇到了一些问题。

我使用以下脚本将其打包成zipfile:

#!/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

但是,我无法在我的代码中执行复杂的导入:

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


我如何导入,例如来自zip文件的pychess.Utils.lutils.LBoard?

以下是我需要导入的模块的完整列表:

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

谢谢!

1 个答案:

答案 0 :(得分:2)

假设你有一个解压缩的pychess,导致你当前目录中的pychess-0.10.1目录,并且pychess-0.10.1 / lib / pychess存在(我从untarring pychess-0.10.1.tar获得了该目录。 GZ)。

首先运行:

#!/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

之后,这有效:

#!/usr/bin/env python

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

from pychess.Utils.lutils import LBoard