Apple M1:安装psycopg2包时出现Symbol not found: _PQbackendPID错误

18

输入图像描述

pg_config

venv ❯ which pg_config

/Applications/Postgres.app/Contents/Versions/latest/bin/pg_config

pip3 install -r requirements.txt

需求.txt

venv ❯ cat requirements.txt
-i https://mirrors.aliyun.com/pypi/simple/
alembic==1.4.2
amqp==2.6.0
billiard==3.6.3.0
celery==4.4.6
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
emoji==0.5.4
fastapi==0.59.0
future==0.18.2
h11==0.9.0
httptools==0.1.1 ; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
idna==2.10
kombu==4.6.11
mako==1.1.3
markupsafe==1.1.1
psycopg2-binary==2.8.5
pydantic==1.6
python-dateutil==2.8.1
python-editor==1.0.4
pytz==2020.1
redis==3.5.3
requests==2.24.0
six==1.15.0
sqlalchemy==1.3.18
starlette==0.13.4
tenacity==6.2.0
urllib3==1.25.9
uvicorn==0.11.5
uvloop==0.14.0 ; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
vine==1.3.0
websockets==8.1

完整错误信息

Process SpawnProcess-1:
Traceback (most recent call last):
  File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/subprocess.py", line 62, in subprocess_started
    target(sockets=sockets)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/main.py", line 382, in run
    loop.run_until_complete(self.serve(sockets=sockets))
  File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/main.py", line 389, in serve
    config.load()
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/config.py", line 288, in load
    self.loaded_app = import_from_string(self.app)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/importer.py", line 23, in import_from_string
    raise exc from None
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/uvicorn/importer.py", line 20, in import_from_string
    module = importlib.import_module(module_str)
  File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "./main.py", line 4, in <module>
    from api.api_v1.api import api_router
  File "./api/api_v1/api.py", line 4, in <module>
    from api.api_v1.endpoints import status
  File "./api/api_v1/endpoints/status.py", line 10, in <module>
    from db.session import Session
  File "./db/session.py", line 7, in <module>
    engine = create_engine(config.SQLALCHEMY_DATABASE_URI, pool_pre_ping=True)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/sqlalchemy/engine/__init__.py", line 500, in create_engine
    return strategy.create(*args, **kwargs)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 753, in dbapi
    import psycopg2
  File "/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/psycopg2/__init__.py", line 51, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: dlopen(/Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so, 2): Symbol not found: _PQbackendPID
  Referenced from: /Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so
  Expected in: flat namespace
 in /Users/lidashuang/Projects/starservices/venv/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so

4
如何安装 - pip3 install -r requirements.txt?查看这个链接在Mac OSX 10.9.5上安装Psycopg2 - 可能是您的操作系统缺少某些库或其他软件,而且需要选择 psychopg2psychopg2-binary 之间的一个。 - dmitryro
类似的(尽管相当古老)https://dev59.com/NVrUa4cB1Zd3GeqPghYP - snakecharmerb
升级Python 3.9解决了psycopg2包的问题,符号未找到:_PQbackendPID。 - lidashuang
8个回答

28

尝试通过 Homebrew 安装 Postgres:

brew install postgresql

由于某种原因,这似乎能够在正确的目录中安装所需的库,以便您可以在M1 Mac上正确地构建和导入psycopg2-binary(在我的情况下有效)。

在使用brew安装postgres之后,卸载并重新安装psycopg2,例如:

pip3.9 install psycopg2-binary --force-reinstall --no-cache-dir
请注意,尽管这将安装新版本的Postgres,但您不需要实际使用新版本才能使psycopg2导入正常工作。

1
在尝试运行Odoo 14时,遇到了“Symbol not found: _PQbackendPID”问题,这个方法解决了问题。谢谢。 - Leo Fisher
2
尝试了许多其他解决方案后,这个对我有用。谢谢!我的电脑是 M1 Mac,并且运行的是 Python 3.9 版本。 - ehka
2
我在M1 Mac和macOS 11.4上遇到了“Symbol not found: _PQbackendPID”问题,使用Homebrew安装Postgres(即使我已经有了Postgres应用程序)解决了这个问题。 - Jurie Horneman
1
@Wlad 对我有用,但是有一个错别字,应该是 $ brew install libpq。我还不得不手动添加到我的 .zshrc 中,就像你链接的 GitHub 问题中提到的那样。 - Willow
如此在 psycogp2 的 Github 问题 github.com/psycopg/psycopg2/issues/1200#issuecomment-934861409 中所述,brew install libpq 应该足够了。 - Wlad
显示剩余2条评论

5

1
使用Miniconda在Python 3.9上也适用于我。谢谢! - Juan García

1

关于使用诗歌的人。在通过Homebrew安装Postgres之后,(还要确保安装成功)

brew install postgresql

然后我按照以下步骤使其正常工作。
首先,我使用以下命令删除当前的poetry环境:
poetry env remove [your env]

接下来,清除诗歌缓存

poetry cache clear --all [your cache]

e.g.

poetry cache clear --all .

然后生成一个新的诗歌环境,您可以使用以下命令安装psycopg2:
poetry add psycopg2-binary

1

您是否正在使用pycharm创建虚拟环境?

如果已创建,请先删除虚拟环境

按 ⌘ , 打开项目设置/首选项,进入 Project | Python Interpreter。然后点击配置项目解释器图标并选择显示所有。再点击“-”以删除 venv。

使用以下命令手动创建虚拟环境

python3 -m venv /path/to/venv

启动虚拟环境

source venv/bin/activate

安装 psycopg2 的二进制包

pip3 install psycopg2-binary 

1
brew install libpq
brew install openssl

在brew两次完成后按照说明进行操作。


1
在我的情况下,使用以下方法有效:
  1. 使用 miniconda
  2. 使用 psycopg2-binary
这样做。

这是我的做法,从未使用过conda。谢谢。 - Yëco

1

这个问题已经在 psycopg2-binary==2.9.3 及以上版本中得到修复,所以只需要升级你的软件包即可。


0

使用确切的2.9.3版本解决了我的问题。MBP M1。

2.9.6版本也出现了相同的错误。 使用以下命令在虚拟环境中安装。

python -m pip install psycopg2-binary==2.9.3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接