it-swarm.com.ru

ImportError: невозможно импортировать имя HTTPSHandler с использованием PIP

Обнаружение ошибки HTTPSHandler при установке пакетов Python с использованием pip. Ниже приведена трассировка стека.

--------desktop:~$ pip install Django==1.3
Traceback (most recent call last):
  File "/home/env/.genv/bin/pip", line 9, in <module>
    load_entry_point('pip==1.4.1', 'console_scripts', 'pip')()
  File "/home/env/.genv/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/env/.genv/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/home/env/.genv/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/home/env/.genv/lib/python2.7/site-packages/pip/__init__.py", line 10, in <module>
    from pip.util import get_installed_distributions, get_prog
  File "/home/env/.genv/lib/python2.7/site-packages/pip/util.py", line 17, in <module>
    from pip.vendor.distlib import version
  File "/home/env/.genv/lib/python2.7/site-packages/pip/vendor/distlib/version.py", line 13, in <module>
    from .compat import string_types
  File "/home/env/.genv/lib/python2.7/site-packages/pip/vendor/distlib/compat.py", line 31, in <module>
    from urllib2 import (Request, urlopen, URLError, HTTPError,
ImportError: cannot import name HTTPSHandler

Я использовал для редактирования файла Modules/setup.dist и раскомментировал строки кода SSL и перестроил его со ссылкой на следующую ветку: http://forums.opensuse.org/english/get-technical-help-here/applications/488962 -opensuse-python-openssl-2.html

59
user3016020

OSX + доморощенные пользователи:

Вы можете получить последние обновления рецепта:

brew reinstall python

Но если проблема все еще возникает, например, возможно, вы обновили свою ОС, тогда вам может понадобиться сначала получить последнюю версию openssl. Вы можете проверить, какая версия и где она используется:

openssl version -a
which openssl

Чтобы получить последнюю версию openssl:

brew update
brew install openssl
brew link --overwrite --dry-run openssl  # safety first.
brew link openssl --overwrite

Это может выдать предупреждение:

bash-4.3$ brew link --overwrite --dry-run openssl
Warning: Refusing to link: openssl Linking keg-only openssl means you may end up linking against the insecure, deprecated system OpenSSL while using the headers from Homebrew's openssl. 
Instead, pass the full include/library paths to your compiler e.g.: 
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

Примечание: это предупреждение означает, что для других приложений вы можете использовать

export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include

Затем перекомпилируйте python:

brew uninstall python
brew install python --with-brewed-openssl

или для питона 3

brew uninstall python3
brew install python3 --with-brewed-openssl
47
dnozay

Вам необходимо установить заголовочные файлы OpenSSL перед сборкой Python, если вам нужна поддержка SSL. В Debian и Ubuntu они находятся в пакете с именем libssl-dev. Вам может понадобиться еще несколько зависимостей, как отмечено здесь .

22
sk1p

Homebrew

Вероятно, это было вызвано обновлением до Mavericks. Вот как я это исправил.

Обновление OpenSSL

#make a copy of the existing library, just in case
Sudo cp /usr/bin/openssl /usr/bin/openssl.Apple

# update openssl 
brew update
brew install openssl
brew link --force openssl

# reload terminal paths
hash -r

Переустановите Python

Python 3

brew uninstall python3

brew install python3 --with-brewed-openssl

Python 2

brew uninstall python

brew install python --with-brewed-openssl

Этот ответ объединяет все ответы и комментарии Stack Exchange, которые я нашел, и основан главным образом на этом ответе Apple Stack Exchange .

20
Waylon Flinn

У меня была эта проблема на Mac OSX, даже после подтверждения моего PATH и т.д.

Сделал; pip uninstall virtualenv, затем установите virtualenv, и теперь это работает.

В то время, когда я заставлял brew связывать openssl, не связывал его, и virtualenv по-прежнему работает, но, возможно, это потому, что он был изначально связан, когда я переустанавливал его.

9
jay

Вам нужно установить OpenSSl перед созданием и установкой Python, чтобы решить эту проблему.

На Centos:

yum install openssl openssl-devel -y

источник

9
leon

Другим симптомом этой проблемы для меня было то, что если я зашел в консоль python моего virtualenv и выполнил команду import ssl, это привело бы к ошибке. Оказывается, мой virtualenv не использовал версию python brew, а просто установку по умолчанию на моей машине. Понятия не имею, почему установка по умолчанию внезапно перестала работать, но вот как я исправил эту проблему:

  • rmvirtualenv myvirtualenv
  • brew update
  • brew reinstall python
  • mkvirtualenv -p /usr/local/Cellar/python/whatever_version_number/bin/python myvirtualenv
6
David Wright

Кажется, для вашего pip требуется HTTPSHandler, который является частью библиотеки SSL.

OSX

На OS X вы должны связать OpenSSL во время установки Python (см .: # 14497 ).

Для Python 2:

brew reinstall python --with-brewed-openssl
pip install --upgrade pip

Для Python 3:

brew reinstall python3 --with-brewed-openssl
pip3 install --upgrade pip

Вы могли бы иметь несколько экземпляров Python вместе, чтобы вывести их список:

brew list | grep ^python

Или перечислите свою версию с помощью ls -al /usr/local/lib/python*.

4
kenorb

Я использую Redhat и столкнулся с той же проблемой.

Мое решение:

  1. установить openssl и openssl-devel ---- yum установить openssl openssl-devel -y
  2. установить krb5-devel ---- ням установить krb5-devel
  3. перейдите в каталог вашего питона и перекомпилируйте его ---- сделайте

Если бы я не сделал 2-й шаг, когда я перекомпилировал мой python2.7, в журнале было бы сообщение «не удалось собрать модуль _ssl».

3
April

На OSX brew отказывался ссылаться на свой openssl с этой ошибкой:

15:27 $ brew link --force openssl
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

Я наконец смог заставить это работать с:

  brew remove openssl
  brew uninstall --force openssl
  brew install openssl
  export LDFLAGS=-L/usr/local/opt/openssl/lib
  export CPPFLAGS=-I/usr/local/opt/openssl/include
  brew remove python
  brew update
  brew install python
0
Brandon

Во многих случаях это вызвано устаревшей virtualenv, вот скрипт для восстановления ваших virtualenv: https://Gist.github.com/WoLpH/fb98f7dc6ba6f05da2b8

Просто скопируйте его в файл (ссылка на скачивание выше) и выполните его так: zsh -e recreate_virtualenvs.sh <project_name>

#!/bin/zsh -e

if [ ! -d "$PROJECT_HOME" ]; then
    echo 'Your $PROJECT_HOME needs to be defined'
    echo 'http://virtualenvwrapper.readthedocs.org/en/latest/install.html#location-of-project-directories'
    exit 1
fi

if [ "" = "$1" ]; then
    echo "Usage: $0 <project_name>"
    exit 1
fi

env="$1"
project_dir="$PROJECT_HOME/$1"
env_dir="$HOME/envs/$1"

function command_exists(){
    type $1 2>/dev/null | grep -vq ' not found'
}

if command_exists workon; then
    echo 'Getting virtualenvwrapper from environment'
    # Workon exists, nothing to do :)

Elif [ -x ~/bin/mount_workon ]; then
    echo 'Using mount workon'
    # Optional support for packaged project directories and virtualenvs using
    # https://github.com/WoLpH/dotfiles/blob/master/bin/mount_workon
    . ~/bin/mount_workon
    mount_file "$project_dir"
    mount_file "$env_dir"

Elif command_exists virtualenvwrapper.sh; then
    echo 'Using virtualenvwrapper'
    . $(which virtualenvwrapper.sh)
fi

if ! command_exists workon; then
    echo 'Virtualenvwrapper not found, please install it'
    exit 1
fi

rmvirtualenv $env || true

echo "Recreating $env"
mkvirtualenv $env || true
workon "$env" || true
pip install virtualenv{,wrapper}

cd $project_dir
setvirtualenvproject 

if [ -f setup.py ]; then
    echo "Installing local package"
    pip install -e .
fi

function install_requirements(){
    # Installing requirements from given file, if it exists
    if [ -f "$1" ]; then
        echo "Installing requirements from $1"
        pip install -r "$1"
    fi
}

install_requirements requirements_test.txt
install_requirements requirements-test.txt
install_requirements requirements.txt
install_requirements test_requirements.txt
install_requirements test-requirements.txt

if [ -d docs ]; then
    echo "Found docs, installing sphinx"
    pip install sphinx{,-pypi-upload} py
fi

echo "Installing ipython"
pip install ipython

if [ -f tox.ini ]; then
    deps=$(python -c "
parser=__import__('ConfigParser').ConfigParser();
parser.read('tox.ini');
print parser.get('testenv', 'deps').strip().replace('{toxinidir}/', '')")
    echo "Found deps from tox.ini: $deps"
    echo $deps | parallel -v --no-notice pip install {}
fi

if [ -f .travis.yml ]; then
    echo "Found deps from travis:"
    installs=$(grep 'pip install' .travis.yml | grep -v '\$' | sed -e 's/.*pip install/pip install/' | grep -v 'pip install . --use-mirrors' | sed -e 's/$/;/')
    echo $installs
    eval $installs
fi

deactivate
0
Wolph

Для Ubuntu

Сначала проверьте, установили ли openssl-Develop

Sudo apt-get install libssl-dev

Попробуйте другой способ переустановить pip

Sudo apt-get install python-setuptools
Sudo easy_install pip

использование setuptools для установки pip вместо установки с исходным кодом может решить проблему зависимости.

0
mymusise