【问题标题】:How to link python 2.7 with latest openssl version in MAC OS?如何在 MAC OS 中将 python 2.7 与最新的 openssl 版本链接?
【发布时间】:2018-10-30 15:14:43
【问题描述】:

当我跑步时:

$ openssl version -a

我得到 1.0.2k 作为版本:

OpenSSL 1.0.2k  26 Jan 2017
built on: reproducible build, date unspecified
platform: darwin64-x86_64-cc
options:  bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: cc -I. -I.. -I../include  -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/php5/ssl"

但是当我用python检查版本时:

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'

我得到:OpenSSL 0.9.8zg 14 July 2015

如何链接最新的 openssl 版本? 我的点子版本是;

pip 10.0.1 from /Library/Python/2.7/site-packages/pip (python 2.7)

当我尝试使用 PIP 安装一些模块时,我收到 [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 错误。所以尝试在 python 中升级我的 ssl 版本

以及如何使我的系统Openssl版本与virtualenv版本相同?

【问题讨论】:

  • 您是否还可以添加以下命令的输出(从 shell 启动):which opensslotool -L path/to/openssl(其中 path/to/openssl 由上一个命令输出)?
  • @martin-martin:(刚刚注意到这个问题有多老了)你能在评论中添加我之前评论中问题的答案吗?
  • Hei @CristiFati - 这不是我的问题,所以我不能在那里添加任何东西 - 但我同意这会有所帮助
  • @martin-martin:这就是我在评论中指定的原因::)
  • @hoefling 如果您想在答案中总结您的 cmets,我很乐意为您提供赏金。不过,它只剩下几个小时就会消失了。

标签: python macos python-2.7 openssl


【解决方案1】:

如何链接最新的 openssl 版本?

这只有在从源代码编译 Python 时才有可能; OpenSSL 头文件和库的位置通过CPPFLAGS/LDFLAGS/LD_LIBRARY_PATH 环境变量设置,如here 所述。但是,一旦编译完成,您就不能“重新链接”代码。

另一个问题是,如果不进行一些危险的系统修改,您将无法在 MacOS 中更改系统 Python。 MacOS 预装的 Python 位于/System/Library/Frameworks/Python.framework 下,如果不关闭系统完整性保护,您将无法修改或删除/System 下的任何内容(我强烈建议不要这样做)。

因此,建议的解决方案是让系统 Python 保持原样并安装另一个副本供自己使用。在 MacOS 上,您通常有两种选择:要么使用提供最新 Python 2 和 3 版本的 Homebrew,要么使用来自 https://www.python.org/downloads/ 的官方 .pkg 安装程序。两者都是针对最新版本的 OpenSSL 构建的。选择什么取决于您的用例;就个人而言,我不使用 brewed Python,因为它不提供多个版本的 Python 3 包(例如,我需要同时安装 3.5/3.6/3.7 来运行测试)。 .pkg 安装程序的主要缺点是已安装的 Python 安装在任何包管理器之外,并且不会自动更新,因此您有责任自己更新它。最坏的情况是,这意味着下载一个新的安装程序并重新安装,即使是在次要版本出现问题时。

安装后,为您的用户调整 PATH 变量,使新安装的 Python 位于系统之前。对于 brewed Python,打开 ~/.bash_profile 并附加

BREW_PREFIX=$(brew --prefix)
PATH="$BREW_PREFIX/bin:$BREW_PREFIX/sbin:$PATH"
export PATH

对于通过官方.pkg安装程序安装的Python:安装时应自动修改配置文件;尽管如此,仔细检查并没有什么坏处。打开~/.bash_profile查看是否有类似的行

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH

在场;如果没有,请将它们附加到您安装的 Python 版本。

【讨论】:

    【解决方案2】:

    您真的不想与系统 Python 混为一谈。它的构建是为了在需要时与您的操作系统一起使用。

    如果您需要使用 Python 构建更新的 OpenSSL,请使用诸如 brew 或 macports 或 python.org 包来安装 Python 2 或 3 的更新版本并使用它们。

    (作为参考,我的 brew Python 3.6 Python 是针对 OpenSSL 1.0.2o 构建的,作为示例)

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 2016-05-09
      • 1970-01-01
      • 2019-05-22
      • 2017-12-14
      • 2011-09-09
      • 2011-12-31
      • 2021-05-03
      • 2018-11-12
      相关资源
      最近更新 更多