【问题标题】:Can't install psycopg2 with pip in virtualenv on Mac OS X 10.7无法在 Mac OS X 10.7 上的 virtualenv 中使用 pip 安装 psycopg2
【发布时间】:2012-03-29 12:31:29
【问题描述】:

我正在按照 Heroku 的教程部署 Django 应用程序:http://devcenter.heroku.com/articles/django#prerequisites

在我进入这部分之前一切正常:

$ pip install Django psycopg2

我可以自己安装 Django,但问题是使用 psycopg2。

我不断收到此错误:

ld: library not found for -lpq

collect2: ld returned 1 exit status

ld: library not found for -lpq

collect2: ld returned 1 exit status

lipo: can't open input file: /var/folders/_4/p6l0y0t51hd4xbq7llbyshmw0000gn/T//cc0L10mI.out (No such file or directory)

error: command 'gcc-4.2' failed with exit status 1

我已经在我的机器上安装了 PostgreSQL 9.1。

另外,在输出中,有一堆这样的行:

gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.4.4 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x090004 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I. -I/usr/include -I/usr/include/postgresql/server -c psycopg/typecast.c -o build/temp.macosx-10.6-intel-2.7/psycopg/typecast.o

我不太确定它是什么意思,但我确实注意到其中包含“macosx-10.6”,所以我想知道这是否是问题所在?我在10.7。

提前感谢您的帮助。

【问题讨论】:

标签: python django heroku pip psycopg2


【解决方案1】:

只是想分享。以下代码对我有用:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2==2.5.2

我使用的是 macOS Sierra 和 psql 9.6.1。

我从pg_config 命令获得了库路径。

【讨论】:

  • 这是您对 SO 的第一个回答,效果很好。感谢您花时间把它放在这里。此解决方案可在 virtualenv 中安装 psycopg2,并使用 brew 安装 postgres 和依赖项。
  • pg_config --ldflags 将为您提供设置的具体路径。
  • 在 macos 10.14.4 上使用 python 3.7.2 和 postgres 11.2 为我工作。谢谢!
  • 此解决方案适用于 Mojave 10.14.3。谢谢!
  • 在最新版本的 MAC OS X (v10.15.4) 上使用最新版本的 psycopg2 (2.8.4) env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip install psycopg2==2.8.4
【解决方案2】:

我正在使用 MAC OS CATALINA 版本 10.15.5python3psql (PostgreSQL) 12.3。这对我有用:

尝试使用 brew 安装 openssl

brew install openssl

然后在终端中导出这些变量。

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

验证这些变量是否已由echo $LDFLAGS 导出,然后您可以通过键入来安装 psycopg2

pip3 install psycopg2

【讨论】:

  • LDFLAGS 环境变量对我来说已经足够了——我也不需要 CPPFLAGS 了。
【解决方案3】:

首先,下载Postgres.app

然后,在运行 pip install psycopg2 之前,将二进制文件放在你的路径中:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin

注意

9.3 代表版本,会随着时间而变化。

【讨论】:

  • 谢谢,我发现这个回复最有用,因为它不需要 MacPorts 或任何其他工具。
【解决方案4】:

通用 LDFLAGS 变量集

在安装之前导出 LDFLAGS,这里是适用于 OS X 的通用命令(我相信任何有相同错误的 LINUX 系统):

 LDFLAGS=`echo $(pg_config --ldflags)` pip install psycopg2

【讨论】:

    【解决方案5】:

    参考psycopg的official installation guide

    在 Mac OS X 上安装 作为第一个选项,请考虑使用 来自 Fink 或 MacPorts 的 Psycopg 的打包版本

    如果您仍想从源代码构建 Psycopg,请查看 these 文章。

    【讨论】:

    • 好的,我刚刚在 virtualenv 中使用 macports 安装了 psycopg2。我猜这和教程中的 pip install 做的一样吗?如,我只是替换这一步?我问的原因是因为应用程序在我启动时仍然失败。当我输入 Heroku Logs 时,这是我得到的行之一:raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
    • 使用 MacPorts 安装在 virtualenv 环境中不起作用。为了让您的应用程序正常运行,您应该查看有关从源代码构建的文章 :)
    • 好的,我按照其中一篇文章中的说明进行操作:blog.timc3.com/2010/08/20/psycopg2-os-x-_pqbackendpid,并在我的机器上安装了 psycopg2。但是,我在 virtualenv 环境中仍然遇到同样的错误。我不太确定如何在 virtualenv 中从源代码构建。
    • 你在运行最后一个命令python setup.py install之前激活了你的virtualenv吗?
    • 成功了!谢谢!对于那些想知道的人来说,一个更明确的版本:我重新创建了 hellodjango 目录并完成了这些步骤,而不是执行“pip install psycopg2”,我只是下载了 psycopg2-2.4.4.tar.gz 并使用“python setup.py”安装它安装”。
    【解决方案6】:

    解决方法是 intsall 'psycopg2-binary' 包

    【讨论】:

      【解决方案7】:

      brew安装postgres

      brew install postgres
      

      然后,在您的 virtualenv 中使用以下命令安装 psycopg2

      ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
      

      【讨论】:

      • 这些命令运行得很漂亮,但是python仍然找不到psycopg2。然后我不得不运行pip install psycopg2-binary,这终于奏效了。这里可能有一些冗余操作。我不在乎。终于成功了。
      【解决方案8】:

      关注这一行:ld: library not found for -lpq

      psycopg2 与大多数 3rd-party postgres 库一样,希望在您的路径中提供“pg_config”。我这是你的问题。

      在命令提示符下键入“pg_config”。我希望你看到它没有找到。如果没有,请执行:

      sudo find / -name pg_config

      要找到它的位置,然后将该位置添加到您的路径中,运行 'pg_config' 并看到它成功,然后最后重新运行 pip。

      find 命令从你的根目录开始搜索;这需要几分钟

      【讨论】:

      • 嘿,感谢您的回复。但是,当我输入“pg_config”时,它被找到并且没有问题。
      【解决方案9】:

      我尝试了很多东西,但没有任何效果。但是,如果您在 Mojave 上使用 Xcode CLI 工具并在安装 psycopg2 时遇到问题,请尝试以下命令并再次尝试安装 psycopg2。

      sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
      

      这被描述为 Mojave 问题:Pillowissue

      就我而言,这解决了问题。

      【讨论】:

      • 为我工作,在 virtualenv 之外运行该命令,再次激活 env,安装没有问题
      【解决方案10】:

      试试这个:

      pip install psycopg2-binary
      

      【讨论】:

        【解决方案11】:

        以下帖子帮助我让它工作:

        https://stackoverflow.com/a/10326004/1361851

        必须为 Xcode 安装“命令行工具”,然后我能够使用 virtualenv 进行 pip 安装,就像 heroku 教程一样。

        【讨论】:

          【解决方案12】:

          我尝试了上述所有解决方案,但唯一为我解决问题的方法是通过官方 App Store 更新 Xcode CLI 实用程序。

          【讨论】:

            【解决方案13】:

            首先是这个: pip install psycopg2-binary 然后: pip install psycopg2 工作。

            【讨论】:

              【解决方案14】:

              当我在 Mac 上也遇到同样的问题时,我发现 psycopg2 依赖于 GCC 库。

              导出 LDFLAGS="-L/usr/local/opt/openssl/lib"

              export CPPFLAGS="-I/usr/local/opt/openssl/include"

              只需运行此命令,然后尝试运行

              pip 安装 psycopg2

              希望这会奏效。

              【讨论】:

              • 嗨,Harsh,您能解释一下这是如何解决问题的吗?
              • @AnnaIraHurnaus 使用 export 命令,PATH 变量将保存新添加的目录。这设置了安装 psycopg2 所需的 GCC 的路径。希望你明白了。
              猜你喜欢
              • 2012-11-09
              • 2013-08-26
              • 2017-03-11
              • 1970-01-01
              • 2017-07-19
              • 1970-01-01
              • 2015-07-09
              • 2020-01-10
              • 2013-09-29
              相关资源
              最近更新 更多