在前面让我说,请不要建议我切换到Python3。这不是这个问题的意思。另外,请注意,这个问题不是关于如何在Python构建过程中找到OpenSSL标头/库的。据我所知(见下文),我已经做到了。
我正在最近的GNU / Linux发行版上构建自己的Python 2.7副本(我已经尝试了2.7.15和2.7.16并获得了相同的结果)。我想将其链接到我自己的OpenSSL构建副本(我尝试过1.1.1a和1.1.1b)。请注意,我已将此OpenSSL库与其他应用程序一起使用,它似乎已正确构建。
编译,链接和安装都很好:我已经弄清了所有配置,设置了共享库路径,等等。编译并安装后,我可以毫无问题地加载ssl
模块:
$ python
Python 2.7.15 (default, Mar 24 2019, 14:08:05)
[GCC 8.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print(ssl.OPENSSL_VERSION)
OpenSSL 1.1.1b 26 Feb 2019
但是,当我尝试使用此python通过setup.py
安装一些需要下载文件的软件包时,它将无法下载。我提取了一个测试:
from setuptools.package_index import PackageIndex
PackageIndex().process_url(url='https://pypi.org/simple/backports.functools_lru_cache/',
retrieve=True)
给出此错误:
Download error on https://pypi.org/simple/backports.functools_lru_cache/: [X509] system lib (_ssl.c:3027) -- Some packages may not be found!
我不确定下一步该怎么做;错误消息指向X509,所以证书处理可能有问题吗?我在二进制文件上使用了strace,可以看到它正在 找到我的系统证书目录(/etc/ssl
)和CRT文件(/etc/ssl/certs/ca-certificates.crt
)。
也:如果我针对我的系统版本的OpenSSL进行编译,它将起作用。而且,如果我针对本地构建的LibreSSL实例进行编译,它也可以工作。
我不知道从这里去哪里,试图了解问题所在。帮助吗?