2015-11-05 96 views
0

我正在使用shove模块进行对象持久化。它工作正常,但是当我尝试使用py2app构建应用程序时,它停止工作。下面的代码工作正常,除了冻结使用py2app后:py2app建立在mac上后,Python推送模块不工作

import os 
from shove import Shove 

if __name__ == '__main__': 
    home=os.path.expanduser("~") 
    path = os.path.join(home, 'testdb') 
    uri = 'file://{0}'.format(path) 
    print path 
    print uri 

    db = Shove(uri) 
    print db.keys() 

    db['1'] = 'dog' 
    db['2'] = 'cat' 
    db.sync() 
    db.close() 

的setup.py文件包含以下内容:

from setuptools import setup 

OPTIONS = dict(
argv_emulation = True, 
includes=['future_builtins','concurrent.futures'] 
) 

DATA_FILES = [] 


setup(
    app='highlightdb.py', 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS}, 
    setup_requires=['py2app'], 
) 

我得到的回溯是:

highlightdb[68150]:  db = Shove(uri) 
highlightdb[68150]: File "shove/core.pyc", line 23, in __init__ 
highlightdb[68150]: File "shove/_imports.pyc", line 46, in store_backend 
highlightdb[68150]: KeyError: 'file' 

有什么事情问题是?

回答

0

我发现问题在于shove功能主要是使用插件来实现的,这些插件使用pkg_resources.iter_entry_points加载。不幸的是py2app不支持iter_entry_points。不过,我发现this,这可能是一种可能的解决方法。

0

安装Shove后,您是否重新启动了Python?

同样KeyError异常:“文件”,如果你不重新启动发生了:你可以导入库,但肖夫不能加载任何模块