ошибка импорта: невозможно импортировать имя 'HTTPError' из urllib3.exceptions - PullRequest
0 голосов
/ 27 февраля 2019

У меня был файл .py, который использовался для поиска в интернете цен на газ из gasbuddy с использованием селена и фантомов.Раньше работал, но внезапно прекратился.Поэтому я удалил и переустановил селен и фантом JS.Я удалил и переустановил Python 3, используя homebrew.Я даже стер свой MacBook, переустановил на нем Sierra и переустановил все остальное. Что для меня не имеет смысла, так это то, что я получаю ошибки при импорте модулей, которые я даже не импортирую.

import os
from selenium import webdriver
import warnings

warnings.filterwarnings("ignore")
driver = webdriver.PhantomJS(service_log_path=os.path.devnull)

driver.get('https://www.gasbuddy.com/station/155967')
price = driver.find_element_by_xpath('//*[@id="container"]/div/div[3]/div/div/div/div[1]/div[2]/div[1]/div/div/div/div/h1')
print(price.text)

иошибки, которые я получаю:

Traceback (most recent call last):
  File "/Users/igisan/Desktop/scripts/gas.py", line 2, in <module>
    from selenium import webdriver
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/__init__.py", line 18, in <module>
    from .firefox.webdriver import WebDriver as Firefox  # noqa
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 29, in <module>
    from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 27, in <module>
    from .remote_connection import RemoteConnection
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 24, in <module>
    import urllib3
  File "/usr/local/lib/python3.7/site-packages/urllib3/__init__.py", line 8, in <module>
    from .connectionpool import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 11, in <module>
    from .exceptions import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/exceptions.py", line 2, in <module>
    from .packages.six.moves.http_client import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_policybase.py", line 9, in <module>
    from email.utils import _has_surrogates
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/utils.py", line 33, in <module>
    from email._parseaddr import quote
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_parseaddr.py", line 16, in <module>
    import time, calendar
  File "/Users/igisan/Desktop/scripts/calendar.py", line 2, in <module>
    from pyicloud import PyiCloudService
  File "/usr/local/lib/python3.7/site-packages/pyicloud/__init__.py", line 2, in <module>
    from pyicloud.base import PyiCloudService
  File "/usr/local/lib/python3.7/site-packages/pyicloud/base.py", line 7, in <module>
    import requests
  File "/usr/local/lib/python3.7/site-packages/requests/__init__.py", line 46, in <module>
    from .exceptions import RequestsDependencyWarning
  File "/usr/local/lib/python3.7/site-packages/requests/exceptions.py", line 9, in <module>
    from urllib3.exceptions import HTTPError as BaseHTTPError
ImportError: cannot import name 'HTTPError' from 'urllib3.exceptions' (/usr/local/lib/python3.7/site-packages/urllib3/exceptions.py)

Я даже все обновил.Установка и переустановка urllib ничего не изменили.Я также пытался использовать другие методы веб-скрепинга (lxml и т. Д.), Но безрезультатно.Есть ответы?

1 Ответ

0 голосов
/ 27 февраля 2019

tl; др
У вас есть круговой импорт urllib3.exceptions./Users/igisan/Desktop/scripts/calendar.py затеняет модуль calendar стандартной библиотеки Python.Переименуйте этот модуль.

Ваш Python env выглядит довольно грязно.Импорт webdriver выглядит нормально до того момента, когда основной импорт urllib3.exceptions разрешает http.client не для пакетов сайтов этого локального интерпретатора Python 3.7, а для того, что выглядит как самодельная установка Python 3.7.2в /usr/local/Cellar.

  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 71, in <module>
    import email.parser

Оттуда у вас есть нормальная цепочка импорта в этом модуле домашнего варки, пока email._parseaddr не попытается импортировать calendar.
Этот импорт должен идти в модуль calendar.py в стандартной библиотеке Python, но, поскольку у вас есть calendar.py в папке /Users/igisan/Desktop/scripts, который, очевидно, добавляется в sys.path (предположительно через PYTHONPATH)интерпретатор разрешает ваш calendar.py.

  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_parseaddr.py", line 16, in <module>
    import time, calendar
  File "/Users/igisan/Desktop/scripts/calendar.py", line 2, in <module>
    from pyicloud import PyiCloudService

Ваш calendar.py импортирует некоторый класс из пакета pyicloud, что приводит к попытке импортаrequests, что приводит к попытке импорта urllib3.exceptions.
Это становится круговым импортом в этой точке.Импорт urllib3.exceptions приводит к импорту модуля, который пытается импортировать urllib3.exceptions.
Эта проблема должна быть решена путем переименования /Users/igisan/Desktop/scripts/calendar.py во что-то, что не скрывает модуль calendar из стандартной библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...