tba*_*tba 5 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
Run Code Online (Sandbox Code Playgroud)
但是,我无法在我的代码中执行复杂的导入:
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
Run Code Online (Sandbox Code Playgroud)
如何从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
Run Code Online (Sandbox Code Playgroud)
谢谢!
假设您有一个解压的 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
Run Code Online (Sandbox Code Playgroud)
之后,这有效:
#!/usr/bin/env python
import sys
sys.path.insert(0, 'pychess.zip')
from pychess.Utils.lutils import LBoard
Run Code Online (Sandbox Code Playgroud)