5

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


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

ありがとう!

4

1 に答える 1

2

アンパックされた 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
于 2012-05-17T06:30:40.177 に答える