web-dev-qa-db-fra.com

ImportError: impossible d'importer le nom HTTPSHandler à l'aide de PIP

Face à une erreur HTTPSHandler lors de l’installation de packages Python à l’aide de pip, voici le tracé de la pile,

--------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

J'avais l'habitude d'éditer le fichier Modules/setup.dist, de commenter les lignes de code SSL et de le reconstruire, en référence au fil suivant: http://forums.opensuse.org/english/get-technical-help-here/applications/488962 -opensuse-python-openssl-2.html

59
user3016020

Utilisateurs OSX + homebrew:

Vous pouvez obtenir les dernières mises à jour de la recette:

brew reinstall python

Mais si vous avez toujours le problème, par exemple peut-être avez-vous mis à niveau votre système d'exploitation, vous devrez peut-être d'abord obtenir le dernier OpenSL. Vous pouvez vérifier quelle version et où il est utilisé:

openssl version -a
which openssl

Pour obtenir le dernier openssl:

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

Cela peut émettre un avertissement:

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

Note latérale: cet avertissement signifie que pour d'autres applications, vous pouvez utiliser

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

Recompilez ensuite python:

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

ou pour python 3

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

Vous devez installer les fichiers d’en-tête OpenSSL avant de construire Python si vous avez besoin de la prise en charge de SSL. Sur Debian et Ubuntu, ils sont dans un paquet appelé libssl-dev. Vous aurez peut-être besoin de plus de dépendances, comme indiqué ici .

22
sk1p

Homebrew

Cela était probablement dû à une mise à niveau de Mavericks. Voici comment je l'ai corrigé.

Mettre à jour 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

Réinstaller Python

Python 3

brew uninstall python3

brew install python3 --with-brewed-openssl

Python 2

brew uninstall python

brew install python --with-brewed-openssl

Cette réponse regroupe toutes les réponses et commentaires Stack Exchange que j'ai trouvés et est principalement basée sur ceci Réponse Apple Stack Exchange .

20
Waylon Flinn

J'avais ce problème sur Mac OSX, même après confirmation de mon chemin, etc.

A fait un; pip désinstallez virtualenv puis installez virtualenv et il semble que cela fonctionne maintenant.

À l’époque, j’avais forcé brassage de lier openssl, de le dissocier et virtualenv semble toujours fonctionner, mais c’est peut-être parce qu’il était lié lors de la réinstallation.

9
jay

Vous devez installer OpenSSl avant de créer et d’installer Python pour résoudre le problème.

Sur Centos:

yum install openssl openssl-devel -y

la source

9
leon

Un autre symptôme de ce problème pour moi a été que si je suis entré dans la console python de virtualenv et que j'ai import ssl, cela provoquerait une erreur. Il s'avère que mon virtualenv n'utilisait pas la version brew de python, mais uniquement l'installation par défaut sur ma machine. Aucune idée pourquoi l'installation par défaut a soudainement cessé de fonctionner, mais voici comment j'ai résolu le problème:

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

Il semble que votre pip nécessite HTTPSHandler qui fait partie de la bibliothèque SSL.

OSX

Sur OS X, vous devez relier OpenSSL pendant l’installation de Python (voir: # 14497 ).

Pour Python 2:

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

Pour Python 3:

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

Vous pouvez avoir plusieurs instances Python ensemble, pour les lister, exécutez:

brew list | grep ^python

Ou listez votre version via ls -al /usr/local/lib/python*.

4
kenorb

J'utilise Redhat et ai rencontré le même problème.

Ma solution est:

  1. installer openssl et openssl-devel ---- miam installer openssl openssl-devel -y
  2. installer krb5-devel ---- miam installer krb5-devel
  3. changez le répertoire de votre python et recompilez-le ---- make

Si je ne faisais pas la deuxième étape, lorsque je recompilais mon python2.7, le journal disait "échec du module _ssl".

3
April

Sur OSX, Brew a refusé de se lier contre son openssl avec cette erreur:

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

J'ai finalement réussi à le faire fonctionner avec:

  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

Dans de nombreux cas, cela est dû à un virtualenv obsolète. Voici un script pour régénérer votre ou vos virtualenv: https://Gist.github.com/WoLpH/fb98f7dc6ba6f05da2b8

Copiez-le simplement dans un fichier (lien téléchargeable ci-dessus) et exécutez-le comme suit: 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

Pour Ubuntu

Première vérification de l’installation de openssl-develop

Sudo apt-get install libssl-dev

Essayez une autre façon de réinstaller pip

Sudo apt-get install python-setuptools
Sudo easy_install pip

utiliser setuptools pour installer pip plutôt que d'installer avec du code source peut résoudre le problème de dépendance.

0
mymusise