【问题标题】:Unable to install psycopg2 (pip install psycopg2)无法安装 psycopg2 (pip install psycopg2)
【发布时间】:2018-09-23 12:22:58
【问题描述】:

我使用的是 MAC 和 python 版本 2.7.14

Collecting psycopg2
  Could not fetch URL https://pypi.python.org/simple/psycopg2/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661) - skipping
  Could not find a version that satisfies the requirement psycopg2 (from versions: )
No matching distribution found for psycopg2

【问题讨论】:

标签: python postgresql pip psycopg2


【解决方案1】:

我在 docker 设置中遇到了类似的问题。我使用了下面的包而不是psycopg2

pip install psycopg2-binary

【讨论】:

    【解决方案2】:

    当我在 Big Sur OS 上运行的全新 MacBook 上为正在进行的项目尝试“pip 安装”软件包时遇到了同样的问题。 经过一番研究,我遇到了对我有用的this solution。 步骤如下:

    1. 使用此命令安装 Homebrew:

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    2. brew install postgresql

    3. brew install openssl

    4. brew link openssl

    5. 设置以下环境变量(“标志”):

    export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"

    export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

    1. 最后使用以下命令安装 psycopg2:

    pip install psycopg2-binary

    结果如下:

    收集 psycopg2-binary 使用缓存的 psycopg2-binary-2.9.1.tar.gz (380 kB) 为收集的包构建轮子:psycopg2-binary psycopg2-binary (setup.py) 的构建轮...完成 为 psycopg2-binary 创建轮子:filename=psycopg2_binary-2.9.1-cp39-cp39-macosx_10_9_universal2.whl size=241235 sha256=e825a38765f20a331ef619e1368ee9d1a678f34969e3c467d94bc4122afac 存放在目录:/Users/me/Library/Caches/pip/wheels/4b/c8/c2/72089ea1a611c119754d513bd​​acea935cfeb19600d06d45b4b 成功构建 psycopg2-binary 安装收集的包:psycopg2-binary 成功安装 psycopg2-binary-2.9.1

    【讨论】:

    • 也在 Apple Silicon 上工作,谢谢!
    【解决方案3】:

    同样的问题,忘记安装 psql: https://wiki.postgresql.org/wiki/Homebrew

    所以我跑了:

    brew install postgresql
    brew services start postgresql
    

    【讨论】:

    【解决方案4】:

    *我使用 Process Monitor 进行了跟踪。 D:\Anaconda3\DLLs_ssl.pyd 搜索 OpenSSL DLL,但在错误/当前位置! 由于没有找到它们,因此搜索到 C:\Windows\System32,在那里我们有相同的 DLL,由其他应用程序安装,但版本不同。

    Anaconda3 提供的 DLL 位于此处: D:\Anaconda3\Library\bin

    分辨率

    我的解决方法: 我已经复制了以下文件

    libcrypto-1_1-x64.* libssl-1_1-x64.* 从 D:\Anaconda3\Library\bin D:\Anaconda3\DLLs.

    【讨论】:

      【解决方案5】:

      您使用的是较旧的 Python,但没有最安全的 TLS 实现,您需要对其进行升级。否则,您将无法从 PyPI 中“pip install”包。

      1) 要检查 Python 解释器的 TLS 版本,请安装“requests”包并运行命令。例如,对于 Python 2:

      python2 -m pip install --upgrade requests
      python2 -c "import requests;
      print(requests.get('https://www.howsmyssl.com/a/check',verify=False).json()['tls_version'])"
      

      或 Python 3:

      python3 -m pip install --upgrade requests
      python3 -c "import requests; 
      print(requests.get('https://www.howsmyssl.com/a/check',verify=False).json()['tls_version'])"
      

      如果您看到“TLS 1.2”,则说明您的解释器的 TLS 是最新的。如果您看到“TLS 1.0”或“tlsv1 alert protocol version”之类的错误,则必须升级。

      2) Python 的 TLS 实现在 macOS 上落后的原因是 Python 继续使用 OpenSSL,Apple 已停止在 macOS 上更新。在接下来的一年里,Python Packaging Authority 团队将研究将 pip 移植到 Apple 自己的“SecureTransport”库作为 OpenSSL 的替代方案,这将允许旧的 Python 解释器仅使用带有 pip 的现代 TLS。 “这是一项不小的努力,”Stufft 写道,“我不确定它是否会完成。”

      从长远来看,如果 Python 解释器在 macOS 和 Windows 等操作系统未附带 OpenSSL 的平台上不使用 OpenSSL,它本身将很容易跟上 TLS 版本。 Cory Benfield 和 Christian Heimes 提议重新设计标准库的 TLS 接口,以便更轻松地将 OpenSSL 与平台原生 TLS 实现交换。

      【讨论】:

        【解决方案6】:

        我有这个问题,在这里询问并成功回答:

        Cannot get psycopg2 to work, but installed correctly. Mac OS

        [节省您的点击次数]

        我已经安装了 anaconda2。安装更新了我的路径以包含 /anaconda/bin。

        然后使用导航器我安装了 pyscopg2。现在我可以在 shebang 中使用它,我的脚本执行得很好,我可以导入这个模块。

        Gurmokhs-MBP:rest Gurmokh$ python
        Python 2.7.12 |Anaconda 4.2.0 (x86_64)| (default, Jul  2 2016, 17:43:17) 
        [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        Anaconda is brought to you by Continuum Analytics.
        Please check out: http://continuum.io/thanks and https://anaconda.org
        >>> import psycopg2
        if psycopg2.connect("dbname='postgres' user='postgres' host='localhost'"):
        ...     print "connection made"
        ... 
        connection made
        >>> 
        

        【讨论】:

          【解决方案7】:

          试试这个:

          pip install psycopg2-binary
          

          【讨论】:

          • 首先是 pip uninstall psycopg2 psycopg2-binary 然后是 pip install psycopg2 。这样依赖就不会搞砸了
          • 根据pypi.org/project/psycopg2-binary“二进制包是开发和测试的实用选择,但在生产中建议使用源代码构建的包”
          猜你喜欢
          • 2020-07-05
          • 2012-07-17
          • 2017-02-07
          • 2015-09-18
          • 2016-04-07
          • 1970-01-01
          • 2013-12-08
          • 2015-01-03
          相关资源
          最近更新 更多