2012-05-15 26 views
5

Tôi đang cố gắng đóng gói gói pychess vào tệp zip và nhập nó bằng zipimport, nhưng đang gặp phải một số sự cố.Zipimport với các gói

Tôi đã đóng gói nó thành một zipfile với kịch bản sau đây, mà làm việc:

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

Tuy nhiên, tôi không thể làm nhập khẩu phức tạp trong mã của tôi:

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 


Làm cách nào tôi có thể nhập, ví dụ: pychess.Utils.lutils.LBoard từ tệp zip?

Dưới đây là danh sách đầy đủ các module Tôi cần phải nhập khẩu:

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 

Cảm ơn!

Trả lời

2

Giả sử bạn có một pychess chưa giải nén, dẫn đến thư mục pychess-0.10.1 trong thư mục hiện tại của bạn và pychess-0.10.1/lib/pychess tồn tại (tôi nhận được thư mục đó từ untchring pychess-0.10.1.tar .gz).

chạy đầu tiên:

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

sau đó, công trình này:

#!/usr/bin/env python 

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

from pychess.Utils.lutils import LBoard 
+0

Thay đổi xây dựng kịch bản của tôi để sử dụng "zf.writepy ('pychess')" đã làm các trick. Cảm ơn! – tba

Các vấn đề liên quan