当我尝试在AWS Lambda上运行psycopg3时,我遇到了这个错误。
[ERROR] Runtime.ImportModuleError: Unable to import module 'function': no pq wrapper available.
Attempts made:
- couldn't import psycopg 'c' implementation: No module named 'psycopg_c'
- couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary'
- couldn't import psycopg 'python' implementation: libpq library not found
字符串
我在我的.venv
中引用它作为依赖项,基于我的setup.py
install_requires=[
'boto3',
'pydantic',
'python-dotenv',
'psycopg',
'twine',
'wheel',
'xlsxwriter'
],
extras_require={
'binary': ['psycopg-binary'],
},
型
我已经复制了安装过程作为官方网站。
2条答案
按热度按时间bkhjykvo1#
根据我的理解,你也需要一个二进制。
一些外部库,如GPG,psycopg 3,需要使用Amazon Linux 2 OS将它们静态编译为二进制文件,以便在Amazon lambda上运行。您可以使用Docker镜像构建它,然后将其压缩并作为lambda层推送,以便在lambda中使用。这个过程并不简单。
相反,我建议看看pg8000驱动程序。https://github.com/tlocke/pg8000
参考用途:https://stackoverflow.com/a/72571215/5235168
wqnecbli2#
因此,对我来说,解决方案是从主pypi存储库包中删除
psycopg[binary]
依赖项,并且仅在部署lambda时引用它,这需要通过docker完成(我认为一旦部署连接到AWS VM就会更好)。pypi包将仅将psycopg
作为requirements.txt
中的依赖项,并且还需要docker部署。下面是函数的最终部署代码:
字符串
然后,您可以将此压缩文件上传到AWS lambda。