【问题标题】:Apple M1: install psycopg2 package Symbol not found: _PQbackendPIDApple M1: install psycopg2 package Symbol not found: _PQbackendPID
【发布时间】:2022-05-06 03:31:02
【问题描述】:

pg_config

venv ❯ which pg_config

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

pip3 install -r requirements.txt

requirements.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

【问题讨论】:

  • 如何安装它 - pip3 install -r requirements.txt ?看看这是否有帮助 install Psycopg2 on mac osx 10.9.5 - 可能是您的操作系统中缺少一些库或其他软件,并且可以在 psychopg2psychopg2-binary 之间进行选择。
  • 类似(虽然很老)stackoverflow.com/questions/6999105/…
  • 我面临同样的问题。如果有人得到解决方案,请提供帮助。
  • 升级 python 3.9 解决了 psycopg2 包 Symbol not found: _PQbackendPID

标签: python psycopg2


【解决方案1】:

尝试通过自制软件安装 postgres:

brew install postgresql

出于某种原因,这似乎在正确的目录中安装了正确的库,以便您可以在 M1 Mac 上正确构建和导入 psycopg2-binary(无论如何在我的情况下工作)。

用brew安装postgres后,卸载再重新安装psycopg2,例如:

pip3.9 install psycopg2-binary --force-reinstall --no-cache-dir

请注意,即使这将安装新版本的 postgres,您也​​不需要实际使用新版本来使 psycopg2 导入工作。

【讨论】:

  • 在尝试运行 Odoo 14 后遇到了这个问题Symbol not found: _PQbackendPID,这很有效。谢谢
  • 在尝试了许多其他解决方案后,这对我有用。谢谢你!我有 M1 mac 并运行 python 3.9 供参考
  • 我在 M1 Mac 和 macOS 11.4 上也遇到了 Symbol not found: _PQbackendPID 问题,并且使用 Homebrew 安装 Postgres(即使我已经拥有 Postgres 应用程序)也能正常工作。
  • @Wlad 对我有用,但有一个错字,应该是 $ brew install libpq 。如您链接的 GitHub 问题中所述,我还必须手动添加到我的 .zshrc
  • brew install libpq 应该足够了,如 psycogp2 Github 问题 github.com/psycopg/psycopg2/issues/1200#issuecomment-934861409 中所述
【解决方案2】:

Miniconda(virtualenv 的替代品)有一个 Python 3.8 安装程序,可以在 M1 Mac 上与 psycopg2 一起使用,而不会出现 _PQbackendPID 错误: https://docs.conda.io/en/latest/miniconda.html

【讨论】:

  • 在 Python 3.9 上使用 Miniconda 也适用于我。谢谢!
【解决方案3】:
brew install libpq
brew install openssl

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

【讨论】:

    【解决方案4】:

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

    删除虚拟环境(如果已创建)

    按 ⌘ ,打开项目 Settings/Preferences 并转到 Project | Python 解释器。然后单击配置项目解释器图标并选择显示全部。然后点击'-'删除venv。

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

    python3 -m venv /path/to/venv
    

    激活虚拟 venv

    source venv/bin/activate
    

    安装psycopg2的二进制包

    pip3 install psycopg2-binary 
    

    【讨论】:

      【解决方案5】:

      在我的情况下,使用以下方法:

      1. 使用miniconda
      2. 使用psycopg2-binary

      【讨论】:

        【解决方案6】:

        至于使用诗歌的人。通过 homebrew 安装 postgres 后,(还要确保安装成功)

        brew install postgresql
        

        然后我按照这些步骤让它工作。

        首先我删除我当前的诗歌环境

        poetry env remove [your env]
        

        然后,清除诗歌缓存

        poetry cache clear --all [your cache]
        

        例如

        poetry cache clear --all .
        

        然后产生一个新的诗歌环境,你可以安装 psycopg2

        poetry add psycopg2-binary
        

        【讨论】:

          【解决方案7】:
          pip install psycopg2-binary --force-reinstall --no-cache-dir
          

          【讨论】:

          • 此解决方案已在此existing answer 中提出。在回答老问题时,请确保您的回答对问答提供了独特而有价值的贡献。
          猜你喜欢
          • 2020-09-24
          • 2020-06-18
          • 2021-06-13
          • 2016-06-29
          • 1970-01-01
          • 1970-01-01
          • 2016-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多