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
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
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 .
Cela était probablement dû à une mise à niveau de Mavericks. Voici comment je l'ai corrigé.
#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
brew uninstall python3
brew install python3 --with-brewed-openssl
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 .
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.
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
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
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*
.
J'utilise Redhat et ai rencontré le même problème.
Ma solution est:
Si je ne faisais pas la deuxième étape, lorsque je recompilais mon python2.7, le journal disait "échec du module _ssl".
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
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
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.