Konfrontiert man einen HTTPSHandler-Fehler beim Installieren von Python-Paketen mit pip, folgt der Stack-Trace.
--------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
Ich habe die Modules/setup.dist-Datei bearbeitet und die SSL-Codezeilen auskommentiert und mit Bezug auf den folgenden Thread neu erstellt: http://forums.opensuse.org/english/get-technical-help-here/applications/488962 -opensuse-python-openssl-2.html
Sie können die neuesten Updates für das Rezept erhalten:
brew reinstall python
Wenn Sie das Problem trotzdem noch erhalten, z. Vielleicht haben Sie Ihr Betriebssystem aufgerüstet, dann müssen Sie zuerst das neueste openssl herunterladen. Sie können prüfen, welche Version und wo sie verwendet wird:
openssl version -a
which openssl
Um das neueste openssl zu erhalten:
brew update
brew install openssl
brew link --overwrite --dry-run openssl # safety first.
brew link openssl --overwrite
Dies kann eine Warnung ausgeben:
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
Randbemerkung: Diese Warnung bedeutet, dass Sie für andere Apps möglicherweise verwenden möchten
export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
Dann kompilieren Sie Python neu:
brew uninstall python
brew install python --with-brewed-openssl
oder für Python 3
brew uninstall python3
brew install python3 --with-brewed-openssl
Sie müssen die OpenSSL-Headerdateien installieren, bevor Sie Python erstellen, wenn Sie SSL-Unterstützung benötigen. Unter Debian und Ubuntu befinden sie sich in einem Paket mit dem Namen libssl-dev
. Möglicherweise benötigen Sie weitere Abhängigkeiten, wie hier angegeben .
Dies wurde wahrscheinlich durch ein Upgrade auf Mavericks verursacht. So habe ich es behoben.
#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
Diese Antwort konsolidiert alle Antworten und Kommentare von Stack Exchange, die ich gefunden habe, und basiert hauptsächlich auf dieser Apple Stack Exchange-Antwort .
Ich hatte dieses Problem unter Mac OSX, auch nachdem ich meinen PFAD usw. bestätigt hatte.
Habe ein; pip uninstall virtualenv dann installiere virtualenv und es schien jetzt zu funktionieren.
Zu der Zeit, als ich Brew zum Linken von openssl gezwungen hatte, löste es die Verknüpfung und virtualenv scheint immer noch zu funktionieren, aber vielleicht liegt es daran, dass es ursprünglich verlinkt wurde, als ich es neu installierte.
Sie müssen OpenSSl installieren, bevor Sie Python erstellen und installieren können, um das Problem zu lösen.
Auf Centos:
yum install openssl openssl-devel -y
Ein anderes Symptom für dieses Problem war für mich, wenn ich in die Python-Konsole meiner Virtualenv ging und import ssl
tat, würde dies einen Fehler ergeben. Es stellte sich heraus, dass meine Virtualenv nicht die brew
-Version von Python verwendete, sondern nur die Standardinstallation auf meinem Computer. Keine Ahnung, warum die Standardinstallation plötzlich aufgehört hat zu arbeiten, aber hier habe ich das Problem behoben:
rmvirtualenv myvirtualenv
brew update
brew reinstall python
mkvirtualenv -p /usr/local/Cellar/python/whatever_version_number/bin/python myvirtualenv
Es scheint, dass Ihre pip
HTTPSHandler
benötigt, die Teil der SSL
-Bibliothek ist.
OSX
Unter OS X sollten Sie OpenSSL während der Python-Installation verknüpfen (Siehe: # 14497 ).
Für Python 2:
brew reinstall python --with-brewed-openssl
pip install --upgrade pip
Für Python 3:
brew reinstall python3 --with-brewed-openssl
pip3 install --upgrade pip
Sie könnten mehrere Python-Instanzen zusammen haben, um sie aufzulisten:
brew list | grep ^python
Oder listen Sie Ihre Version über ls -al /usr/local/lib/python*
auf.
Ich verwende Redhat und habe das gleiche Problem gefunden.
Meine Lösung ist:
Wenn ich den zweiten Schritt nicht ausführte, wenn ich meinen Python2.7 neu kompilierte, würde das Protokoll sagen: "Fehler beim Erstellen des Moduls _ssl".
Unter OSX weigerte sich brew mit diesem Fehler, eine Verknüpfung zu seinem openssl herzustellen:
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
Ich konnte es endlich schaffen mit:
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
In vielen Fällen wird dies durch eine veraltete virtualenv verursacht. Hier ist ein Skript zum Generieren Ihrer virtualenv (s): https://Gist.github.com/WoLpH/fb98f7dc6ba6f05da2b8
Kopieren Sie es einfach in eine Datei (Download-Link oben) und führen Sie es wie folgt aus: 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
Zuerst prüfen, ob OpenSL-Develop installiert ist
Sudo apt-get install libssl-dev
Versuchen Sie eine andere Möglichkeit, pip
erneut zu installieren.
Sudo apt-get install python-setuptools
Sudo easy_install pip
verwenden Sie setuptools
zur Installation von pip anstelle der Installation mit Quellcode, kann das Problem der Abhängigkeit gelöst werden.