在 pyinstaller 中包含 sqlite3

Mar*_*lle 4 python sqlite pyinstaller

我已经查看了有关此主题的其他主题,但到目前为止我还没有任何运气。

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

我收到以下错误:

文件“cold_call.py”,第 6 行,文件“/tmp/_MEIOlQDSM/mainFrame.py”,第 18 行,导入 userDefine 文件“/tmp/_MEIOlQDSM/userDefine.py”,第 20 行,导入 work_db_common 文件“/ tmp/_MEIOlQDSM/work_db_common.py”,第 4 行,在 import sqlite3 文件“/tmp/_MEIOlQDSM/sqlite3/ init .py”中,第 23 行,在 from sqlite3.dbapi2 import * 文件“/tmp/_MEIOlQDSM/sqlite3/dbapi2. py”,第 27 行,来自 _sqlite3 import * ImportError:没有名为“_sqlite3”的模块

但是当我运行 python3 my_file.py 时,它可以与 sqlite3 一起正常工作。

我在 opensuse 42.3 上使用 python3.4。

从 zypper 安装的 sqlite3 软件包

我+ | libsqlite3-0 | libsqlite3-0 可嵌入 SQL 数据库引擎的共享库 | 包裹

我+ | sqlite3 | 嵌入式 SQL 数据库引擎 | 包裹

我+ | sqlite3-开发 | 嵌入式 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) 
Run Code Online (Sandbox Code Playgroud)

没有成功!

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

PS这段代码

print('sqlite3_path = {}'.format(sqlite3_path))
Run Code Online (Sandbox Code Playgroud)

回报

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

Ahs*_*san 5

这个答案解决了这个问题。

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

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