我想在AWS Lambda上运行的python3.8代码上使用sqlite3上的Window函数。从3.25
版本开始提供。
不幸的是,在AWS Lambda Python3.8上,sqlite3库已经过时了:
>>> sqlite3.sqlite_version
'3.7.17'
而在本地,在我的Python 3.8的自制安装:(工作)
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.31.1'
如何在AWS Lambda Python 3.8上获取sqlite3版本> 3.25?
2条答案
按热度按时间7z5jn7bk1#
我找到了一个方法:我使用外部软件包
pysqlite3
,在二进制版本中。在我的requirements.txt
代码中
jm81lzqq2#
由于我使用的是新的arm 64 MacBook Pro,安装
pysqlite3-binary
的解决方案对我来说不是很可行。我还不得不使用一个只识别Pipfile.lock
而不识别Pipfile
的受控管道,所以其他解决方案也不适合我。相反,我找到了一种从源代码编译libsqlite3.so.0
的方法,并使用它来覆盖AWS Lambda上的默认值。首先,你需要从源代码编译sqlite amalgamation。我创建了这个
Dockerfile
,所以我们可以很容易地从arm 64机器上编译Linux/amd 64:现在我们可以使用
docker build --platform linux/amd64 -t sqlite3-builder -f Dockerfile .
命令构建Docker镜像最后一个
make
命令将把libsqlite3.so.0
放在目录/sqlite-autoconf/.libs
下。然后我们可以使用docker cp
来提取它:现在,我们可以将此
libsqlite3.so.0
文件与其他代码一起上传到AWS Lambda。最后一步是在AWS Lambda中设置一个覆盖系统SQLite3的环境变量。例如,
LD_PRELOAD=/var/task/lib/libsqlite3.so.0
。请注意,/var/task
是您的ZIP包解压缩到的位置。