【问题标题】:pip3 installs inside virtual environment with python3.6 failing due to ssl module not availablepip3 安装在虚拟环境中,python3.6 由于 ssl 模块不可用而失败
【发布时间】:2017-05-20 06:09:07
【问题描述】:

(py36venv) vagrant@pvagrant-dev-vm:/vagrant/venvs$ pip3 install pep8

pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。

收集 pep8 无法获取 URL https://pypi.python.org/simple/pep8/: 确认有问题 ssl 证书:无法连接到 HTTPS URL,因为 SSL 模块 不可用。 - 跳过

找不到满足 pep8 要求的版本(来自 版本:) 没有找到 pep8 的匹配分布

背景信息 - 尝试迁移到 python 3.6。

使用以下命令安装python3.6:

wgethttps://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz

tar -xvf Python-3.6.0.tgz

cd Python-3.6.0
./configure --enable-optimizations
make -j8 须藤 make altinstall python3.6

由以下人员创建 virtualenv:

python3.6 -m venv py36venv

source py36venv/bin/activate

尝试安装 pep8

(py36venv) pip3 安装 pep8

pip 配置了需要 TLS/SSL 的位置,但是 ssl Python 中的模块不可用。 收集 pep8

无法获取 URL https://pypi.python.org/simple/pep8/:出现问题 确认 ssl 证书:无法连接到 HTTPS URL,因为

SSL 模块不可用。 - 跳过找不到版本 满足 pep8 要求(来自版本:)无匹配 找到 pep8 的分布

【问题讨论】:

  • 您是否安装了libssl-dev,Makefile 是否指向正确的 ssl,是否在 makefile 中启用?另见:stackoverflow.com/questions/5937337/…
  • 取消注释以下 - **SSL=/usr/local/ssl _ssl _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L $(SSL)/lib -lssl -lcrypto **
  • 如果您找到了解决方案,请随时回答您自己的问题。

标签: pip python-venv python-3.6


【解决方案1】:

我按照以下步骤在 ubuntu 14.04 中安装 python3.6 并且 virtualenv pip 安装工作正常。

Python 3.6 安装:

sudo apt-get install python3-dev libffi-dev libssl-dev
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz  
tar xvf Python-3.6.0.tgz
cd Python-3.6.0
./configure --enable-optimizations  
make -j8  
sudo make altinstall
python3.6

如果看到以下错误--

zipimport.ZipImportError: 无法解压数据; zlib 不可用 make: *** [altinstall] 错误 1

尝试:

sudo apt-get install zlib1g-dev

验证:

在python3.6中创建virtualenv:

python3.6 -m venv testenv
source testenv/bin/activate
pip install pep8

使用点子:

(testenv) vagrant@pvagrant-dev-vm:~$ pip install pep8
*Collecting pep8
  Downloading pep8-1.7.0-py2.py3-none-any.whl (41kB)
    100% |████████████████████████████████| 51kB 4.1MB/s
Installing collected packages: pep8
Successfully installed pep8-1.7.0*

(testenv) vagrant@pvagrant-dev-vm:~$ pip list

pep8 (1.7.0) 
pip (9.0.1)
setuptools (28.8.0)

【讨论】:

  • -j8 中的make -j8 有什么作用?
  • -j [jobs], --jobs[=jobs] 指定同时运行的作业(命令)的数量。如果有多个 -j 选项,则最后一个有效。如果 -j 选项不带参数给出,make 将不会限制可以同时运行的作业数。希望对您有所帮助,有关更多信息,请参阅 make 的手册页
  • 注意:编译和安装需要相当长的时间(当然取决于你的系统)。我花了大约 20 分钟,运行 AMD FX(tm)-9590 八核处理器,但它确实有效。
  • 你是说如果你编译没有libssl-dev,你需要重新安装吗?
  • @surfer190 没错!我忘记安装 libssl-dev 并遇到了 OP 中描述的错误。在安装libssl-dev、重新编译和重新安装后,pip 可以正常工作。
【解决方案2】:

当我尝试使用 python3.6.0 创建虚拟环境时,我偶然发现了同样的问题。这是我针对 Mac OS X 10.12.2 的解决方案(Py_minion 评论非常接近):

设置

我通过以下步骤创建了环境: 下载python3.6.0 运行

./configure --prefix=<some_path>`
make
make install
mkvirtualenv --python=<some_path/bin/python3.6> foo

所以基本上类似于:https://stackoverflow.com/a/11301911/1286093

运行make时,如果您遇到与我相同的问题,则会出现类似的提示

The necessary bits to build these optional modules were not found: _ssl

解决方案

安装openssl

brew install openssl
brew unlink openssl && brew link openssl --force

更改模块/Setup 或 Module/Setup.dist

您可以在下载的 Python 版本的目录中找到这些文件。

在第 209 - 211 行进行注释并在必要时进行更改(我必须将 SSL 变量更改为我的 openssl 位置)。

SSL=/usr/local/opt/openssl <---- THIS DEPENDS ON YOUR INSTALLATION
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

鉴于这是 openssl 的位置

设置环境变量

export CFLAGS="-I$(brew --prefix openssl)/include"
export LDFLAGS="-L$(brew --prefix openssl)/lib"

重新制作并安装

跑步

./configure --prefix=<some_path>`
make
make install
mkvirtualenv --python=<some_path/bin/python3.6> foo

再次为我做了诀窍

【讨论】:

  • 对于没有sudo和brew的:openssl可以从openssl.org获取
【解决方案3】:

运行 make 在 shell 输出中向我报告:

The necessary bits to build these optional modules were not found:
_bz2                  _dbm                  _gdbm              
_sqlite3              _ssl                  _tkinter           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

解决问题的方法在我的情况下(Linux Mint 18.1,openssl 已安装)正在编辑 Python-3.6.0 文件夹中的 setup.py 在那里添加openssl安装将我系统上的ssl.h文件放入(/usr/include/openssl/ssl.h)的路径。这里我添加了 '/usr/include' 行的部分:

    # Detect SSL support for the socket module (via _ssl)
    search_for_ssl_incs_in = [
                          '/usr/local/ssl/include/',
                          '/usr/contrib/ssl/include/',
                          '/usr/include/'
                         ]
    ssl_incs = find_file('openssl/ssl.h', inc_dirs,
                         search_for_ssl_incs_in
                         )

【讨论】:

  • 很高兴我找到了你的答案,它为我解决了这个问题(Ubuntu 16.04)
  • 这适用于我的 Ubuntu 16.04。应该是最受好评的答案。
【解决方案4】:

我在 CentOS 7 下从源代码构建 Python 3.6.1 时遇到了同样的错误。 对于 CentOS7,我必须首先:

sudo yum install openssl-dev

然后:

./configure --enable-optimizations
make altinstall

现在pip3.6 工作:-)

【讨论】:

  • 相同的配置:)
  • 工作,但对于 RHEL 7.3 它是 sudo yum install openssl-devel
【解决方案5】:

完整的脚本可以在HERE找到

安装先决条件

适用于 RHEL/CentOS

sudo yum -y install gcc gcc-c++ zlib zlib-devel libffi-devel openssl-devel wget

适用于 Ubuntu/Debian

sudo apt-get -y install build-essential python-dev python-setuptools python-pip python-smbus libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev wget

下载 Python

修改为你想要的python版本

Python Versions

cd /var/tmp sudo wget https://www.python.org/ftp/python/3.x.x/Python-x.x.x.tgz sudo tar xf Python-3.*.tgz cd Python-3*

配置/制作/安装

sudo ./configure --enable-optimizations --enable-shared --prefix=/usr/local sudo make && make altinstall

清理共享库并添加到路径

剥离调试符号的共享库可以在运行并行脚本时加快执行速度。

sudo make && make altinstall sudo strip /usr/local/lib/libpython3.7m.so.1.0 sudo echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib' >> /etc/profile.d/python.sh sudo echo 'export PATH=${PATH}:~/usr/local/bin/' >> /etc/profile.d/python.sh sudo echo '/usr/local/lib' >> /etc/ld.so.conf sudo ldconfig

参考

【讨论】:

    【解决方案6】:

    我已经在 Ubuntu-16.04.1 上解决了这个问题。 首先,您需要安装必要的库。要安装打开的终端(Ctrl+Alt+T),然后键入;

     sudo apt-get install build-essential checkinstall
     sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
    

    然后进入你的python文件所在的目录,然后重新配置并重新安装python3.6。

     cd /opt/Python3.6/
    ./configure
     make 
    sudo make install
    

    注意
    如果你是通过ppa安装的Python3.6,那么重新安装一次;

    sudo apt-get install python3.6
    

    现在你应该可以使用 pip3.6

    【讨论】:

    • 在 debian 上的工作就像一个魅力(我从源代码安装了 python3.6)。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2020-05-14
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多