Postgresql 如何停止';导入psycopg2';启动Azure容器时是否会导致异常?

Postgresql 如何停止';导入psycopg2';启动Azure容器时是否会导致异常?,postgresql,azure,psycopg2,Postgresql,Azure,Psycopg2,我正在尝试在Linux上使用Azure应用程序服务部署Django REST API。我正在使用postgresql数据库,并通过管道进行部署。Azure拥有postgresql 9.6。运行我的管道后,网站显示服务器错误(500)。 AppLogs显示,由于导入psycopg2失败,容器无法启动 [ERROR] Exception in worker process Traceback (most recent call last): File "/home/site/wwwroot/a

我正在尝试在Linux上使用Azure应用程序服务部署Django REST API。我正在使用postgresql数据库,并通过管道进行部署。Azure拥有postgresql 9.6。运行我的管道后,网站显示服务器错误(500)。 AppLogs显示,由于导入
psycopg2
失败,容器无法启动

[ERROR] Exception in worker process
Traceback (most recent call last):
   File "/home/site/wwwroot/antenv/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 25, in 
     import psycopg2 as Database
   File "/home/site/wwwroot/antenv/lib/python3.7/site-packages/psycopg2/__init__.py", line 50, in 
     from psycopg2._psycopg import (                     # noqa
ImportError: /home/site/wwwroot/antenv/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PQencryptPasswordConn
在管道的构建阶段,我将环境(python3.7)设置为:

- script: |
    python -m venv antenv
    source antenv/bin/activate
    python -m pip install --upgrade pip
    pip install setup
    pip install -r requirements.txt
Django==3.0.2
djangorestframework==3.11.0
psycopg2-binary==2.8.4
pandas==0.25.3
pytest==5.3.5
pytest-django==3.8.0
pytest-mock==2.0.0
python-dateutil==2.8.1
sqlparse==0.3.0
whitenoise==5.0.1
其中requirements.txt如下所示:

- script: |
    python -m venv antenv
    source antenv/bin/activate
    python -m pip install --upgrade pip
    pip install setup
    pip install -r requirements.txt
Django==3.0.2
djangorestframework==3.11.0
psycopg2-binary==2.8.4
pandas==0.25.3
pytest==5.3.5
pytest-django==3.8.0
pytest-mock==2.0.0
python-dateutil==2.8.1
sqlparse==0.3.0
whitenoise==5.0.1
BuildJob和DeploymentJob似乎运行得完美无缺。生成日志表明已正确下载并安装了
psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_x86_64.whl

此外,通过在settings.py中进行配置,在azure上使用数据库时,该应用程序在我的计算机上运行良好:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'databasename',
        'USER': 'user@postgresqlserver',
        'PASSWORD': 'Password',
        'HOST': 'postgresqlserver.postgres.database.azure.com',
        'PORT': '',
        'OPTIONS': {'sslmode': 'require'}
    }
}  # Of course the info is actually saved in environment variables
这给了我一种感觉,psycopg2安装的某些东西不起作用。。。对其他人来说,*psycopg2-二进制文件似乎起到了作用,但不幸的是,对我来说并非如此

我是否正确地假设在azure上我不能按照这里的建议安装postgresql10,也不能按照这里的建议从源代码安装

一定是我遗漏了什么,如果有任何建议,我将不胜感激

编辑: 查看库(如这里所建议的),我发现我没有PQencryptPasswordConn函数,只有PQencryptPasswordConn函数。我觉得这是Postgresql9.6()所期望的。 要检查libpq是否有多个版本:


遗憾的是,我无法在这里看到是否有多个libpq版本…

看起来
psycopg2 binary
包与您的旧PostgresQL版本不兼容;尝试安装
psycopg2
软件包。psycopg2文档中的说明:二进制软件包对于开发和测试来说是一个实用的选择,但在生产中建议使用从源代码构建的软件包。感谢您的建议!在没有深入理解的情况下,我一直在尝试这一点,并查看其他不同的变体(psycopg2和psycopg2二进制版本都是2.8.4版,并且没有指定的版本),但最终结果似乎没有任何不同。不幸的是,我找不到任何关于已知正在使用PostgreSQL9.6的特定版本的信息……我没有Azure(应用程序服务)的经验,但显然你可以在它上打开一个应用程序。从那里我可以试着帮助你进一步调试。是的,我可以,我将不胜感激!不幸的是,有一些限制,最明显的是不能从那里运行我的virtualenv。看起来
psycopg2 binary
包与您的旧PostgresQL版本不兼容;尝试安装
psycopg2
软件包。psycopg2文档中的说明:二进制软件包对于开发和测试来说是一个实用的选择,但在生产中建议使用从源代码构建的软件包。感谢您的建议!在没有深入理解的情况下,我一直在尝试这一点,并查看其他不同的变体(psycopg2和psycopg2二进制版本都是2.8.4版,并且没有指定的版本),但最终结果似乎没有任何不同。不幸的是,我找不到任何关于已知正在使用PostgreSQL9.6的特定版本的信息……我没有Azure(应用程序服务)的经验,但显然你可以在它上打开一个应用程序。从那里我可以试着帮助你进一步调试。是的,我可以,我将不胜感激!不幸的是,有一些限制,最明显的是不能从那里运行我的virtualenv