我正在尝试使用pyinstaller来通过网络上安装的sqlite3版本而不是本地计算机来编译脚本。 (Linux)
可以使用以下脚本(testsql.py)轻松对其进行测试:
#!/usr/local/bin/python
import sqlite3
print("using",sqlite3.sqlite_version)
在我的本地计算机上:
$ sqlite3 -version
3.6.20
运行testsql.py:
$ testsql.py
使用3.6.20
我可以使用LD_LIBRARY_PATH更改版本:
export LD_LIBRARY_PATH = / depot / sqlite-3.11 / lib
testsql.py
使用3.11.1
但是要与pyinstaller一起运行(python安装也不是本地的,如果可能会导致问题,则pyinstaller不会在其中安装):
/ path / to / python /path/to/someother/PyInstaller-3.3.1/pyinstaller.py -y --add-binary“ /depot/sqlite-3.11/lib/libsqlite3.so.0:”。 testsql.py
$ dist / testsql / testsql
使用3.6.20
-add-binary选项不符合预期。实际上,.so文件不是我要指向的文件(显示日期):
ls -l /depot/sqlite-3.11/lib/libsqlite3.so.0
2016年3月20日/depot/sqlite-3.11/lib/libsqlite3.so.0
ls -l dist / testsql / libsqlite3.so.0
2010年8月17日dist / testsql / libsqlite3.so.0
我尝试了许多不同的操作,但是我从未获得所需的sqlite版本,当我将sqlite3添加到spec文件中的排除列表时,我能够在testsql目录中获得正确的.so文件但是程序随后无法运行。
$ dist / testsql / testsql
追溯(最近一次通话):文件“ testsql.py”,第3行,在 导入sqlite3 ModuleNotFoundError:没有名为“ sqlite3”的模块[19581]无法执行脚本testsql
我的目标是将程序冻结为特定版本的python和sqlite,这些版本与编译或运行该程序的计算机上安装的版本无关。