IT Share you

ImportError : PIP를 사용하여 이름 HTTPSHandler를 가져올 수 없습니다.

shareyou 2020. 11. 30. 20:18
반응형

ImportError : PIP를 사용하여 이름 HTTPSHandler를 가져올 수 없습니다.


pip를 사용하여 Python 패키지를 설치하는 동안 HTTPSHandler 오류가 발생하면 다음은 스택 추적입니다.

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


OSX + 홈브류 사용자 :

레시피에 대한 최신 업데이트를 얻을 수 있습니다.

brew reinstall python

그러나 여전히 문제가 발생하면 (예 : OS를 업그레이드 한 경우) 먼저 최신 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

그런 다음 파이썬을 다시 컴파일하십시오.

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

또는 파이썬 3의 경우

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

SSL 지원이 필요한 경우 Python을 빌드하기 전에 OpenSSL 헤더 파일을 설치해야합니다. Debian 및 Ubuntu에서는 libssl-dev. 여기에 설명 된대로 더 많은 종속성이 필요할 수 있습니다 .


홈브류

이것은 아마도 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 재설치

파이썬 3

brew uninstall python3

brew install python3 --with-brewed-openssl

파이썬 2

brew uninstall python

brew install python --with-brewed-openssl

이 답변은 내가 찾은 모든 Stack Exchange 답변과 의견을 통합하며 대부분이 Apple Stack Exchange 답변을 기반으로합니다 .


내 PATH 등을 확인한 후에도 Mac OSX 에서이 문제가 발생했습니다.

했습니까; pip uninstall virtualenv 다음 virtualenv를 설치하면 지금 작동하는 것 같습니다.

당시 나는 brew가 openssl을 링크하도록 강요했고, 링크를 해제했고 virtualenv는 여전히 작동하는 것처럼 보이지만 아마도 다시 설치할 때 원래 링크 되었기 때문일 수 있습니다.


문제를 해결하려면 Python을 만들고 설치하기 전에 OpenSSl을 설치해야합니다.

Centos에서 :

yum install openssl openssl-devel -y

출처


이 문제의 또 다른 증상은 내 virtualenv의 파이썬 콘솔에 들어가서 import ssl오류가 발생하는 것입니다. 내 virtualenv가 brewPython 버전을 사용하지 않고 내 컴퓨터에 기본 설치되어 있음 이 밝혀졌습니다 . 기본 설치가 갑자기 작동을 멈춘 이유는 알 수 없지만 문제를 해결 한 방법은 다음과 같습니다.

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

도서관의 일부인 귀하의 pip요구 사항 HTTPSHandlerSSL있습니다.

OSX

OS X에서는 Python 설치 중에 OpenSSL을 연결해야합니다 (참조 : # 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*.


나는 Redhat을 사용하고 있으며 동일한 문제를 만났습니다.

내 솔루션은 다음과 같습니다.

  1. openssl 및 openssl-devel 설치 ---- yum install openssl openssl-devel -y
  2. krb5-devel 설치 ---- yum krb5-devel 설치
  3. 파이썬의 디렉토리로 변경하고 다시 컴파일하십시오 ---- make

두 번째 단계를 수행하지 않으면 python2.7을 다시 컴파일하면 로그에 "fail to build module _ssl"이 표시됩니다.


대부분의 경우 이는 오래된 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

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

I finally was able to get it working with:

  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

For Ubuntu

First check wheather install openssl-develop

sudo apt-get install libssl-dev

Try another way to reinstall pip

sudo apt-get install python-setuptools
sudo easy_install pip

use setuptools to install pip rather than install with source code may can solve the problem of dependency.

참고URL : https://stackoverflow.com/questions/20688034/importerror-cannot-import-name-httpshandler-using-pip

반응형