【问题标题】:Mac OS X Lion Psycopg2: Symbol not found: _PQbackendPIDMac OS X Lion Psycopg2:找不到符号:_PQbackendPID
【发布时间】:2011-10-23 08:50:43
【问题描述】:

我最近升级到 Mac OS X Lion 并试图让 psycopg2 再次与 python 2.6 一起工作。先前站点上强制 Python 以 32 位以上运行的说明(参见此处:http://favosdream.blogspot.com/2009/09/make-psycopg2-and-readline-work-in-snow.html)并没有带来任何运气。即使尝试使用 arch -i386 python 将 python 强制为 32 位,仍然给我错误:

symbol not found: _PQbackendPID
  Referenced from: /Library/Python/2.6/site-packages/psycopg2/_psycopg.so
  Expected in: flat namespace

【问题讨论】:

  • Lion 更多的是 64 位,所以为什么不这样做

标签: python macos psycopg2 osx-lion


【解决方案1】:

如果您在/usr/bin/python2.6 中使用Apple 提供的Python 2.6,您是否尝试过arch -i386 python2.6?但如果您仍在运行 32 位版本的 psycopg2 和 PostgreSQL 客户端库,则可能是安装更新的 64 位或 64 位/32 位通用版本的好时机。 MacPorts 可以提供帮助。

【讨论】:

  • 所以这里有一个更新:做 arch -i386 python 工作,我可以很好地导入 psycopg2。但是,当尝试通过键入“arch -i386 python manage.py runserver”来运行我的 django 服务器时,导入失败。尝试启动 django 时似乎没有采用 arch 参数
  • 可能是正在启动另一个 Python 子进程,默认为 64 位。如果您使用的是 Apple 提供的 Python 2.6,则可以通过设置特殊的 Apple 环境变量 export VERSIONER_PYTHON_VERSION=2.6 和 export VERSIONER_PYTHON_PREFER_32_BIT=yes(如果您使用 /usr/bin/python)来解决此问题。请参阅 Apple 的 Python 手册页 (man python)。但从长远来看,升级可能会更好。
  • 哦,该死!如果您在其他问题中确实遵循了其他人的建议,并通过用符号链接覆盖它来消除 /usr/bin/python,那么上面的 export 建议可能不起作用。我相信 Apple 的特殊 /usr/bin/python 程序可以处理魔法。
【解决方案2】:

我在 Snow Leopard/10.6.8 上也遇到了这个问题,并且在一份非常紧张的合同中失去了半天的时间。不好玩。我最终通过a)完全删除所有postgres版本并重新启动,b)完全删除我所有的psycopg2安装(使用定位并无情),c)将我的系统python升级到2.7,d)重新安装virtualenv和pip所以他们指出在正确的 python 版本中,然后 e) 按照此页面上的说明,从 dmg 安装程序安装 postgres 9.1 开始:

http://hardlifeofapo.com/psycopg2-and-postgresql-9-1-on-snow-leopard/

最终就是这么简单:

virtualenv your_virtual_env_name
. your_virtual_env_name/bin/activate
export ARCHFLAGS="-arch i386 -arch x86_64"
export PATH=$PATH:/Library/PostgreSQL/9.1/bin
pip install psycopg2

祝你好运!

【讨论】:

    【解决方案3】:

    最近在尝试将 psycopg2 (2.8.2) 导入 python3 (3.5.3) 项目时遇到此问题。运行 macOS Sierra (10.12.6),使用 PostgreSQL 9.6 + pgAdmin3。

    TLDR:安装 SQL 程序和安装程序创建的动态链接时要小心

    据我所知,与 psycopg2 (2.8.2) 兼容的所需 libpq 动态库 (libpq.5.dylib) 是 libpq 5.9+ (libpq.5.9.dylib)

    安装 postgres(或其他依赖 postgres 的程序)后,它们可能会在 /usr/lib 中创建指向新安装的 .dylib 文件的动态链接,不一定是您想要的。

    例如,/usr/lib/libpq.5.dylib 可能指向./Applications/pgAdmin3.app/Contents/Frameworks/libpq.5.dylib,即版本 5.6;在这种情况下,旧版本的 libpq 动态库可能不包含某些函数,例如 _PQsslAttribute。

    对我有用的解决方案:

    在$PATH 中向上移动/usr/local/lib(因为usr/lib 可能只能由root 写入),然后在/usr/local/lib 中创建一个动态链接以指向/Library/PostgreSQL/9.6/lib/libpq.5.9.dylib,如下所示:

    cd /usr/local/lib
    ln -s /Library/PostgreSQL/9.6/lib/libpq.5.9.dylib ./libpq.5.dylib
    

    【讨论】:

    • 谢谢!使用 Postgres.app 唯一对我有用的命令:ln -s /Applications/Postgres.app/Contents/Versions/latest/lib/libpq.5.dylib ./libpq.5.dylib
    • 这很有趣。我试图将我 PC 上的所有内容(postgred、redis 等)移动到 docker 容器中,结果出现了这样的错误。现在,通过brew 将它们返回,一切都很好。
    • 如何“在 $PATH 中移动 /usr/local/lib”?我对 OS11/Apple Silicon/Postgres13/Postgres.app/Python3.8 有同样的错误。
    【解决方案4】:

    找不到符号:_PQbackendPID 预期在:平面命名空间

    我在带有 Big Sur 的 Arm64 Mac 上遇到了同样的符号错误。

    我正在使用 Progressapp (x86_64) 和 psycopg2 v2.8.4 (Arm64)。由于 Progressapp Arm64 版本尚不可用,我决定检查 psycopg2 库的链接。

    我的解决方案是,首先卸载 Progressapp, 然后导出 PATH=/opt/local/lib/postgresql13/bin:$PATH 指向 Arm64 libpq.5.13.dylib, 最后重新安装 Pogressapp。所以 psycopg2 会加载所有需要的 Arm64 库。

    otool -E venv/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so outputs:
    
        /opt/local/lib/postgresql13/libpq.5.dylib (compatibility version 5.0.0, current version 5.13.0)
            /opt/local/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
            /opt/local/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
            /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
    

    【讨论】:

    • 你从哪里得到 Arm64 libpq.5.13.dylib ?
    • 嗨亚尼克。 Arm64 libpq.5.13.dylib 附带 (macports) 端口安装 postgresql13 @13.1_0 。
    • 如何执行导出命令?你能提供一个完整的sn-p吗?我是 mac 新手。谢谢!
    • 嗨,BastionW,打开一个终端并输入:export PATH=/opt/local/lib/postgresql13/bin:$PATH 或者最好将其添加到您的 .bashrc 或 .zshrc 以便自动加载每次打开新终端时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2012-05-30
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多