Это происходит потому, что ваш локальный модуль с именем requests.py
скрывает установленный модуль requests
, который вы пытаетесь использовать. Текущая директория добавляется к sys.path
, поэтому локальное имя имеет приоритет над установленным именем.
Дополнительная подсказка для отладки, когда это возникает, - это внимательно изучить Трейсбек и понять, что имя ваш скрипт соответствует вашему модулю, который вы пытаетесь импортировать:
Обратите внимание на имя, которое вы использовали в своем скрипте:
File "/Users/me/dev/rough/requests.py", line 1, in <module>
Модуль, который вы пытаетесь импортировать: requests
Переименуйте свой модуль во что-то еще, чтобы избежать столкновения имен.
Python может сгенерировать файл requests.pyc
рядом с вашим файлом requests.py
(в каталоге __pycache__
в Python 3). Удалите это также после переименования, поскольку интерпретатор все равно будет ссылаться на этот файл, повторно создавая ошибку. Однако файл pyc
в __pycache__
должен не влиять на ваш код, если файл py
удален.
В этом примере переименование файла на my_requests.py
, удалив requests.pyc
и снова выполнив успешную печать <Response [200]>
.
Для меня работал только апгрейд:
pip install --upgrade pip
У меня также был этот вопрос. Первоначально был установлен прокси-сервер и работал нормально. Затем я подключился к сети, где она не проходит через прокси. После сброса прокси-сервера снова получите работу.
unset http_proxy; unset http_prox; unset HTTP_PROXY; unset HTTPS_PROXY
Если вы находитесь за прокси-сервером, перед началом установки вы должны выполнить дополнительные шаги по настройке. Вы должны установить переменную окружения http_proxy на адрес прокси-сервера. Используя bash, это выполняется с помощью команды
export http_proxy="http://user:pass@my.site:port/"
. Вы также можете указать параметр
--proxy=[user:pass@]url:port
в pip. Часть [user:pass@]
не является обязательной.
порт 443 не открыт, просто разрешите пользовательский порт tcp 443, если на AWS еще открыть порт 443 для исходящих соединений ...
Необычно, если я удалю прокси из среды и добавлю его в командную строку, он работает для меня. Например, чтобы самому обновить pip
:
env http_proxy= https_proxy= pip install pip --upgrade --proxy 'http://proxy-url:80'
В моей проблеме был прокси-сервер в среде. Кажется, что пип только отличит аргумент.
Решение: 1. sudo apt remove python-pip
2. pip3 install pip
(или установите pip с помощью get-pip.py )
Почему: Эта ошибка произошла в pip 8.0.1 который установлен apt-get. И произошло, только когда ваша сеть нестабильна.
Если у вас есть pip, установленный с apt, он скрывает пип, который вы установили другими способами, поэтому сначала вы должны удалить apt one.
Я отключил сеть и протестировал 8.0.1, 9.0.3, 10.x 3 версии, установленные с pip3 или get-pip.py, при этом не было ошибок. & nbsp; & nbsp; Итак, я думаю, что только apt версия pip 8.0.1 имеет эту ошибку, другие - в порядке.
Что происходит здесь, так это то, что продаваемые версии запроса / urllib3 сталкиваются при импорте в двух разных местах (один и тот же код, но разные имена). Если у вас есть сетевая ошибка, она не будет пытаться получить колесо, но с ошибкой выше. См. здесь для более глубокого погружения в эту ошибку.
Для решения с системой pip см. выше .
Если вы есть эта проблема в virtualenv, созданная с помощью python -m venv
(которая все еще копирует колеса с /usr/share/python-wheels
, даже если у вас есть пипс отдельно), самый простой способ «исправить» выглядит следующим образом:
/usr/bin/python3.6 -m venv ...
requests
в среду (это может вызвать ошибку выше): <venv>/bin/pip install requests
requests
, который будет использоваться pip: rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl
Теперь в <venv>/bin/pip
используется установленная версия requests
, которая имеет urllib3 vendored.
/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl
, и теперь он исправлен (без virtualenv).
– krsoni
29 October 2017 в 13:59
/usr/share/python-wheels
, python -m venv
больше не будет использоваться для использования <venv>/bin/pip
. Поэтому, если вы удалите эти файлы, вы должны быть уверены, что вам это не нужно. Если вам нужен как системный пипс, так и узел venv, вам необходимо установить систему с помощью get-pip.py
(см. stackoverflow.com/a/37531821/1380673 ), и вам нужно удалить whl файлы в каждом venv.
– Jan Katins
6 November 2017 в 10:47
Это рабочее решение этой проблемы, которое я нашел.
sudo apt-get clean
cd /var/lib/apt
sudo mv lists lists.old
sudo mkdir -p lists/partial
sudo apt-get clean
sudo apt-get update
Я получал эту ошибку для любой установки пакета, используя pip
. Позже я обнаружил, что pip требует, чтобы переменная http_proxy
и https_proxy
запускалась за прокси. После установки этих двух переменных среды эта проблема исправлена.
export http_proxy=http://<username>:<passowrd>@<proxy_ip>:<proxy_port>/
export https_proxy=https://<username>:<passowrd>@<proxy_ip>:<proxy_port>/
Ubuntu поставляется с версией PIP от precambrian, и именно так вам нужно обновить ее, если вы не хотите тратить часы и часы на отладку связанных с пиком проблем.
apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py
Как вы заметили, я включил информация для Python 2.x и 3.x
Прежде всего, эта проблема существует из-за проблем с сетью, а удаление и повторная установка все не будет иметь большой поддержки. Вероятно, вы находитесь за прокси-сервером, и в этом случае вам нужно установить прокси.
Но в моем случае я столкнулся с проблемой, потому что я не был за прокси-сервером. Как правило, я работаю за прокси-сервером, но при работе на дому я устанавливаю прокси-сервер в None в настройках сети.
Но я все еще получал те же ошибки даже после удаления настроек прокси-сервера.
Итак, когда я набирал
env | grep proxy
, я нашел что-то вроде этого:
http_proxy=http://127.0.0.1:1234/
И именно по этой причине я все еще получал ту же ошибку, даже когда Я решил удалить настройки прокси.
Чтобы отключить этот прокси, введите
unset http_proxy
Следуйте тому же подходу для всех других записей, таких как https_proxy.
Я столкнулся с подобной проблемой при попытке установить awscli-инструмент на экземпляр ec2. Я изменил группу безопасности, чтобы разрешить входящий и исходящий доступ к порту 443, и это решило проблему для меня.
Я получил эту ошибку, когда пытался создать файл virtualenv
с командой virtualenv myVirtualEnv
. Я просто добавил sudo
перед командой; он решил все.