Python 3.7无法连接到HTTPS URL,因为SSL模块不可用

时间:2018-09-29 08:14:38

标签: python ssl pip

我正在在运行centos 6.10的专用服务器上安装Python 3.7 在跳了圈然后尝试执行此操作后,我遇到了另一个错误。使用Python 3.7尝试并保持最新状态,在pip安装中遇到SSL问题是一个相当普遍的问题。我得出的结论是,解决此问题的最佳方法是获取正确版本的OpenSSL。因此,我这样做了,然后编辑了我的python modules / Setup.dist文件,重新配置了它,重新运行了altinstall,尽管一切似乎还不错。出于某种原因,命令Python3.7是我以前运行此python时使用的命令,突然变得无法识别为命令,而在Python3.7目录中是一个文件夹python,现在该文件夹在执行时(在编辑完环境路径后,打开了Python3.7。以前不是这种情况,只是Python3.7,有人知道这里可能发生什么事吗?

此外,我对这整个SSL事情都精打细算,并且已经阅读了关于阳光下的每篇文章。这是我最近执行的一些命令的列表:

#Unpacked Python3.7 into /usr/src directory
./configure --enable-optimizations --enable-loadable-sqlite-extensions
make altinstall

#installation failed from no '_ctypes' module

yum install libffi-devel

#repeat configure above
#yaaay python
#Successfully installed pip-10.0.1 setuptools-39.0.1 was the final message of the installation

Python3.7 -m venv /my/project/directory/ENV
pip install {library}

#this is where my issues began with SSL

日志:

(ENV) [root@s1.1.1.1 ProjectDirectory]# pip3 install twisted
pip is configured with locations that require TLS/SSL, however, the SSL module in Python is not available.
Collecting twisted
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/twisted/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/twisted/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/twisted/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/twisted/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/twisted/
  Could not fetch URL https://pypi.org/simple/twisted/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/twisted/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
  Could not find a version that satisfies the requirement twisted (from versions: )
No matching distribution found for twisted
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSLmodule is not available.")) - skipping

所以我感觉很好。别担心。最新版本的Python甚至无法立即使用pip3。精彩。好吧,我像我们一样开始搜索google,得出的结论是,每个人都只是再次重新配置了python,它神奇地工作了。不知道为什么,但是还可以。我很喜欢它。我找到了这篇文章:

https://techglimpse.com/install-python-openssl-support-tutorial/

认为还可以。如果我可以获取python3.7 SSL,那么它应该可以使pip3正常工作?错误。不幸的是,如果我以上面提到的新奇怪的方式使用Python3.7,然后键入import ssl,则会出现此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/src/Python-3.7.0/Lib/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'

有人可以给我一些帮助吗?我有点迷失在海洋中,而且我不知道如何游泳……任何事情都很棒,但是我对这个服务器管理员一无所知,所以越简单越好:)谢谢前进。

编辑: 顺便说一句

yum install openssl

yum install openssl-devel

都导致“已经安装”标志...因此,我认为这不是另一种解决方案。但是,当我手动进行安装时,我使用的是1.1.1版本,因为我知道3.7出于某种原因放弃了对OpenSSL几个不同版本的支持。我认为已经安装了yum的是1.0.2。我不知道centos 6.10平台是否有容量,尽管就版本限制而言。

4 个答案:

答案 0 :(得分:0)

我不确定您是否已经解决了这个问题,但是您必须确保在构建python时可以找到openssl库。

因此具体来说:   如果您没有使用系统ssl库,或者它们不在您的路径中,则在--configure处需要指定它们的位置。我会给你确切的路线,但我本人最近没有这样做。   如果您已正确完成此操作,则在构建末尾将看不到python跳过构建'ssl'模块的报告。   当您看到上面关于(_ssl)的错误时,这特别意味着python不是使用它构建的。   如果在不更改--configure的情况下使用相同的步骤,则会在3.6中遇到相同的问题。

答案 1 :(得分:0)

在尝试为Ubuntu 18.04 LTS编译Python 3.7.2时遇到了这个问题

确保您具有构建Python内置模块所需的所有依赖项。在make 2>&1 | tee make.txt之后运行configure,并查找有关构建失败的模块的警告。如果模块无法构建,Python将不会安装失败,而不会构建那些导致您所看到的错误的模块。

安装依赖项后,请确保再次运行configure

答案 2 :(得分:0)

在我的 mac OS 上,我遇到了类似的问题,由于SSL问题,我无法在虚拟环境中安装任何东西甚至升级pip

对我有用的是在虚拟环境中执行以下

  1. sudo chown -R ${whoami} /usr/local/Cellar后跟

  2. brew install openssl

第一个命令中的${whoami}是什么?

它是一个占位符;运行命令时应放在此处的是实际的当前用户。

如果您不认识您的用户,请在命令行中输入

whoami

输出是您的用户。因此,如果您键入该命令并获得johnsmith作为输出,则在运行第一个命令时,将“ ${whoami}”替换为“ johnsmith”,如下所示:

sudo chown -R johnsmith /usr/local/Cellar

答案 3 :(得分:0)

配置选项“ --with-openssl”对我有用