【问题标题】:Zipimport with packages带包的 Zipimport
【发布时间】:2012-05-15 05:10:24
【问题描述】:

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

我已使用以下脚本将其打包成一个 zip 文件,该脚本有效:

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


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

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

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

谢谢!

【问题讨论】:

    标签: python import importerror


    【解决方案1】:

    假设你有一个解压的 pychess,在你的当前目录中有一个 pychess-0.10.1 目录并且 pychess-0.10.1/lib/pychess 存在(我从解压 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
    

    【讨论】:

    • 将我的构建脚本更改为使用“zf.writepy('pychess')”就可以了。谢谢!
    猜你喜欢
    • 2013-10-20
    • 2015-07-02
    • 2016-12-11
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2021-09-22
    • 2013-08-12
    • 2012-01-14
    相关资源
    最近更新 更多