在pyinstaller

时间:2017-12-25 10:06:38

标签: python sqlite pyinstaller

我已经看过关于这个主题的其他主题,到目前为止我还没有运气。

我正在尝试使用pyinstaller来创建验证数据的.exe。我可以成功创建一个可执行文件,它将运行,但代码的sqlite3部分不起作用。

我收到以下错误:

  

文件" cold_call.py",第6行,在文件中   " /tmp/_MEIOlQDSM/mainFrame.py" ;,第18行,在       import userDefine File" /tmp/_MEIOlQDSM/userDefine.py" ;,第20行,in       import work_db_common File" /tmp/_MEIOlQDSM/work_db_common.py" ;,第4行,在       import sqlite3 File" / tmp / _MEIOlQDSM / sqlite3 / init .py",第23行,in       来自sqlite3.dbapi2 import * File" /tmp/_MEIOlQDSM/sqlite3/dbapi2.py" ;,第27行,in       来自_sqlite3 import * ImportError:没有名为' _sqlite3'

的模块

但是当我运行python3 my_file.py时,它可以正常使用sqlite3。

我在opensuse 42.3上使用python3.4。

从zypper安装的sqlite3包

  

i + | libsqlite3-0 |可嵌入SQL数据库引擎的共享库封装

     

i + | sqlite3 |可嵌入的SQL数据库引擎|包

     

i + | sqlite3-devel |可嵌入的SQL数据库引擎|封装

我曾尝试重新安装python3,但它仍然无法正常工作。

然后,在* .spec文件中我编写了以下脚本:

def get_sqlite3_path():                                                                 
    import sqlite3                                                                  
    sqlite3_path = sqlite3.__path__[0]                                              
    print('sqlite3_path = {}'.format(sqlite3_path))                                 
    return sqlite3_path 
...
dict_tree = Tree(get_sqlite3_path(), prefix='sqlite3', excludes=["*.pyc"])              
a.datas += dict_tree                                                                    
a.binaries = filter(lambda x: 'sqlite3' not in x[0], a.binaries) 

没有成功!

知道如何解决这个问题吗?

P.S 这段代码

print('sqlite3_path = {}'.format(sqlite3_path))

返回

  

sqlite3_path = /usr/lib64/python3.4/sqlite3

1 个答案:

答案 0 :(得分:0)

This answer解决了该问题。

在构建exe时添加--hidden-import=sqlite3

  
    

pyinstaller your_script.py --onefile --hidden-import = sqlite3