我已经看过关于这个主题的其他主题,到目前为止我还没有运气。
我正在尝试使用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
答案 0 :(得分:0)
This answer解决了该问题。
在构建exe时添加--hidden-import=sqlite3
。
pyinstaller your_script.py --onefile --hidden-import = sqlite3