Python 3: AttributeError: объект "module" не имеет атрибута "path" с помощью urllib в терминале

мой код отлично работает в PyCharm, но у меня есть сообщения об ошибках при попытке открыть его в терминале. Что не так с моим кодом, или где я допустил ошибки?

import urllib.request
with urllib.request.urlopen('http://python.org/') as response:
   html = response.read()
   print(html)

выход из терминала:

λ python Desktopurl1.py
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Desktopurl1.py", line 1, in <module>
    import urllib.request
  File "C:UsersPrzemekDesktopurllib.py", line 1, in <module>
    import urllib.request
ImportError: No module named 'urllib.request'; 'urllib' is not a package

3 ответов


вы назвали файл C:\Users\Przemek\Desktop\urllib.py, вам нужно переименовать ее. Вы импортируете из этого не фактический модуль. переименовать C:\Users\Przemek\Desktop\urllib.py и удалить все C:\Users\Przemek\Desktop\urllib.pyc.

это не файл, который вы используете, но у вас есть файл в том же каталоге, поэтому python сначала проверяет текущий каталог, следовательно, ошибка.


вы sare тени стандартный пакет библиотеки urllib назвав исходный файл urllib.py. Переименуйте его!

тот факт, что это работает вообще в Pycharm является удивительным подвигом инженерии на разработчиков PyCharm!

вы также можете использовать абсолютное импорт (from __future__ import absolute_import) здесь; но в этом случае я не думаю, что это поможет, так как ваше имя исходного кода запуска затеняет ту самую библиотеку/пакет, который вы пытаетесь использовать!


кроме того, это:

import urllib.request
with urllib.request.urlopen('http://python.org/') as response:

должно быть так:

import urllib
with urllib.urlopen('http://python.org/') as response: