postgresql Psycopg 3-没有可用的pq Package 器

uurv41yg  于 6个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(86)

当我尝试在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'],
    },


我已经复制了安装过程作为官方网站。

bkhjykvo

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

wqnecbli

wqnecbli2#

因此,对我来说,解决方案是从主pypi存储库包中删除psycopg[binary]依赖项,并且仅在部署lambda时引用它,这需要通过docker完成(我认为一旦部署连接到AWS VM就会更好)。pypi包将仅将psycopg作为requirements.txt中的依赖项,并且还需要docker部署。
下面是函数的最终部署代码:

mkdir ./lambda-code

cp -r function.py exception.py requirements.txt ./lambda-code

MSYS2_ARG_CONV_EXCL="*" docker run -u $(id -u):$(id -g) \
    -v "$(pwd)/lambda-code:/lambda-code" \
    -v "$(pwd)/requirements.txt:/requirements.txt" \
    -v "$(pwd)/function.py:/lambda-code/function.py" \
    -v "$(pwd)/exception.py:/lambda-code/exception.py" \
    -v "$HOME/.cache/pip:/.cache/pip" \
    python:3.10 sh -c "pip install -r /requirements.txt -t /lambda-code && \
                      pip install \
                      --platform manylinux2014_x86_64 \
                      --target=/lambda-code \
                      --implementation cp \
                      --python 3.10 \
                      --only-binary=:all: --upgrade \
                      'psycopg[binary]'"

cd lambda-code || exit
zip -r ../lambda_function.zip .

字符串
然后,您可以将此压缩文件上传到AWS lambda。

相关问题