【问题标题】:What does Import Error: Symbol not found: _PQencryptPasswordConn mean and how do I fix it?Import Error: Symbol not found: _PQencryptPasswordConn 是什么意思,我该如何解决?
【发布时间】:2019-12-05 18:48:10
【问题描述】:

我正在尝试在 Flask_App 所在的下载目录中执行“flask run”。我的 Flask_App 是“applications.py”。当我在开发环境中执行“烧瓶运行”时,我得到了一个 URL。将 URL 粘贴到 Safari 后,我会收到此错误。


ImportError: dlopen(/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so, 2): Symbol not found: _PQencryptPasswordConn
  Referenced from: /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
  Expected in: /usr/lib/libpq.5.6.dylib
 in /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so

我使用的是 MacOSX High Sierra。我的 PostgreSQL 是 11 版。我的 python 更新到了 3.7 版。并且 pip 已升级,psycopg 版本为 2.8.3。 我尝试在各种目录上运行“flask run”,并尝试将“applications.py”移动到我当前所在的不同库和目录中。我曾尝试使用 sudo,但我意识到我不知道密码。过去,当我不小心删除了我的管理员帐户的管理员状态时,我强制创建了另一个管理员帐户……不知道这是否影响了 sudo,但它不接受我当前的管理员密码。我在安装 psycopg2 时也遇到了问题,但通过重新下载 PostgreSQL 11 解决了这个问题。我也使用 pip 成功安装了 SQLAlchemy 和 Flask-Session。

我尝试在代码中注释掉几行,并将其范围缩小到“create_engine”函数,因为“os.getenv("DATABASE_URL")' 按预期运行我的页面。

这是我的“applications.py”代码

import os

from flask import Flask, session
from flask_session import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

app = Flask(__name__)

# Check for environment variable
if not os.getenv("DATABASE_URL"):
    raise RuntimeError("DATABASE_URL is not set")

# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

# Set up database
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))


@app.route("/")
def index():
    return "Project 1: TODO"

粘贴 URL 后,我希望页面显示文本“项目 1:TODO” 但是,我收到此错误消息:

flask.cli.NoAppException: While importing "applications", an ImportError was raised:

Traceback (most recent call last):
  File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
  File "/Users/dhruvaiyer/Downloads/applications.py", line 20, in <module>
    engine = create_engine(os.getenv("DATABASE_URL"))
  File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/__init__.py", line 425, in create_engine
    return strategy.create(*args, **kwargs)
  File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 81, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 584, in dbapi
    import psycopg2
  File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: dlopen(/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so, 2): Symbol not found: _PQencryptPasswordConn
  Referenced from: /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
  Expected in: /usr/lib/libpq.5.6.dylib
 in /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 325, in __call__
self._flush_bg_loading_exception()
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 313, in _flush_bg_loading_exception
reraise(*exc_info)
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 302, in _load_app
self._load_unlocked()
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 317, in _load_unlocked
self._app = rv = self.loader()
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 372, in load_app
app = locate_app(self, import_name, name)
File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 242, in locate_app
'\n\n{tb}'.format(name=module_name, tb=traceback.format_exc())
flask.cli.NoAppException: While importing "applications", an ImportError was raised: Traceback (most recent call last): File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/flask/cli.py", line 235, in locate_app __import__(module_name) File "/Users/dhruvaiyer/Downloads/applications.py", line 20, in <module> engine = create_engine(os.getenv("DATABASE_URL")) File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/__init__.py", line 425, in create_engine return strategy.create(*args, **kwargs) File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 81, in create dbapi = dialect_cls.dbapi(**dbapi_args) File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 584, in dbapi import psycopg2 File "/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/__init__.py", line 50, in <module> from psycopg2._psycopg import ( # noqa ImportError: dlopen(/Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so, 2): Symbol not found: _PQencryptPasswordConn Referenced from: /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so Expected in: /usr/lib/libpq.5.6.dylib in /Users/dhruvaiyer/anaconda3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
#The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.

同样的代码也出现在我的终端窗口中。关于如何进行或如何解决此问题的任何建议?非常感谢您!

【问题讨论】:

  • 遇到了同样的问题。似乎与 psycopg 依赖有关:initd.org/psycopg/docs/install.html#build-prerequisites。我通过卸载,然后安装brew install postgresql 然后重新安装来解决这个问题。我还确保来自 Postgres.app 的二进制文件不在我的路径中。这似乎成功了。

标签: python postgresql flask-sqlalchemy psycopg2


【解决方案1】:

我在克隆并安装了一个 Django 项目后遇到了同样的错误。我通过卸载 psycopg2 然后重新安装它来解决它,所有这些都在虚拟环境中:

pip uninstall psycopg2 然后pip install psycopg2

【讨论】:

  • 我可以确认这在Pipenv 以及psycopg2psycopg2-binary 的相同场景中对我有用
【解决方案2】:

我遇到同样的错误,我的解决方案是在虚拟环境中安装与基础 Python 站点包中相同版本的 psycop2 和 psycopg2-binary

将版本设置为基本 python lib:在我的例子中是 2.7.7 /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/psycopg2-2.7.7.dist-info

背景详情: Mac OS Catalina 10.15,Python3.6.8,pipenv postgres 10。 Pycharm 2019.2.3 请求在虚拟环境上安装 psycopg2,尽管基础 Python3.6.8 中有一个副本。

我安装了最新版本:psycopg2 2.8.3 并运行到问题所在。我按照建议尝试了 psycopg2 2.6、2.6.1,但失败了。我尝试了其他一些解决方案,但都失败了。

我安装了与基础 Python 包中相同版本的 psycopg2,问题已解决。就我而言,2.7.7

pipenv install psycpg2==2.7.7
pipenv install psycopg2-binary==2.7.7

我不知道为什么要在虚拟环境中再次安装 psycopg2。

pipenv Pipfile 如下:

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "==1.0"
flask-sqlalchemy = "==2.3.2"
flask-wtf = "==0.14.2"
cymysql = "==0.9.1"
flask-cors = "==2.1.0"
flask-httpauth = "==2.7.0"
requests = "==2.18.4"
marshmallow = "*"
flask-marshmallow = "*"
marshmallow-sqlalchemy = "*"
connexion = {extras = ["swagger-ui"],version = "*"}
psycopg2 = "==2.7.7"
psycopg2-binary = "==2.7.7"

[dev-packages]

[requires]
python_version = "3.6"

【讨论】:

  • 安装 psycopg2-binary==2.7.7 实际上对我有用
【解决方案3】:

我在这里遇到了同样的错误:

导入错误: dlopen(/Users/johnndoe/dev/venv/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so, 2): 找不到符号:_PQencryptPasswordCon

我确认执行以下命令后问题不再存在:

pip uninstall psycopg2 
pip install psycopg2==2.7.7  
pip install psycopg2-binary==2.7.7

感谢@Yubo

【讨论】:

    【解决方案4】:

    在虚拟环境中,我做了这些改变:

    pip uninstall psycopg2 
    pip install psycopg2
    pip install psycopg2-binary
    

    对我来说效果很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2018-08-27
      • 2014-07-05
      • 2021-06-18
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多