由于SSL错误,无法在Python 3.6中使用pip安装软件包。

10

我正在远程服务器上工作。当我尝试在虚拟环境中使用pip安装任何东西时,会出现错误:

(venv) [barta@bivoj program]$ pip install -r requirements.txt 
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting joblib==0.11 (from -r requirements.txt (line 1))
  Could not fetch URL https://pypi.python.org/simple/joblib/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping

Python 2.7运行良好,我没有root访问权限,我能自己解决这个问题吗?还是需要联系管理员?

当我在我的主目录中安装Python 3.6时,首先遇到了这个问题。我认为问题可能是因为它在我的主目录中,所以我请求干净地安装Python 3.6。

我考虑修改setup.py并在我的主目录中重新安装,正如Claudio在这里建议的那样:

pip3 installs inside virtual environment with python3.6 failing due to ssl module not available

但我没有找到任何openssl文件夹。 /usr/bin中有openssl,但那不是一个目录。我搜索了ssl.h文件,但没有在任何地方找到它。


你可以尝试使用本地openssl来构建本地Python 3。或者直接向管理员请求安装一份打包好的Python 3给你。 - pvg
5个回答

10

听起来你已经从源代码构建了Python,但没有安装libssl-dev

运行:

sudo apt-get install libssl-dev
sudo ./configure
sudo make altinstall

1
没有 root 访问权限的话,这将会很困难。 - pvg
哦,抱歉,在问题中跳过了那部分,我会更新答案。 - Igonato
@pvg 已更新。(请查看此答案 https://dev59.com/0G025IYBdhLWcg3wjGtO#5939170) - Igonato
1
我不是提问者,虽然问题涉及Python 3,但他们似乎已经有一个带有SSL的工作Python 2。最明智的做法是找到有特权的人并让他们使用软件包管理器安装Python 3。 - pvg

3

测试过在Ubuntu 16.04/18.04上可用。

在Python-3.6.4/Modules/Setup中取消以下行的注释:

#   SSL=/usr/local/ssl
#   _ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto

然后重新编译该软件包:

$ sudo ./configure --enable-optimizations
$ sudo make altinstall

同时确保已安装libssl-dev(无论如何,这是debian的软件包)。

对于Python-3.7.x同样适用。


很遗憾,这对我没有起作用。 sudo make altinstall 会出现以下错误。/usr/src/Python-3.7.0/./Modules/_ssl.c:3674: undefined reference to SSL_CTX_get_default_passwd_cb' /usr/src/Python-3.7.0/./Modules/_ssl.c:3675: undefined reference to SSL_CTX_get_default_passwd_cb_userdata' collect2: ld returned 1 exit status make: *** [python] Error 1 - Goutham Anush

2
这是我的做法:

最初的回答:

sudo apt-get install libssl-dev
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar -xvf Python-3.6.5.tgz
cd Python-3.6.5/

./configure
sudo make
sudo make install

字面上花了45分钟,然后在我的Ec2上安装了它。谢谢。 - Sundeep Pidugu

0

我遇到了同样的错误,但实际上我是使用最新版本的python2.7.13创建了Python环境,而这个Python版本是通过source安装的:

./configure --prefix /usr/bin/python2.7.13
make altinstall

然后创建 virtualenv

virtualenv --python=/usr/bin/python2.7.13/bin/python2.7 py2.7.13env

花了很多时间后,我发现一个名为libreadline6-dev的库缺失。于是我安装了它:

sudo apt-get install libreadline6-dev

按照上述步骤重复编译安装,然后再次创建虚拟环境。这次一切都很顺利!


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接