Ошибка при импорте asyncio - PullRequest
0 голосов
/ 19 мая 2018

В моем терминале я хотел что-то протестировать с помощью asyncio.Вот что я сделал:

$ python3.6
Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio

И это выдало ошибку следующим образом:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/__init__.py", line 42, in <module>
tasks.__all__ +
AttributeError: module 'asyncio.tasks' has no attribute '__all__'

Почему выдается эта ошибка и как я могу ее исправить?(Я проверил в моем интерпретаторе python 3.5 таким же образом и не получил ошибки, так что, возможно, библиотека была повреждена?)

Я запустил Python с переключателем -v, вывод, полученный после выполнения import asyncioв приглашении довольно большой, поэтому он доступен в этом GitHub gist .

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Ваша локальная установка была повреждена.Из вывода python -v вы указали:

# bytecode is stale for 'asyncio.tasks'
# code object from /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/tasks.py
import 'asyncio.tasks' # <_frozen_importlib_external.SourceFileLoader object at 0x104cf7860>

Байт-код устарел означает, что файл asyncio/tasks.py на новее , чем сопровождающий файл asyncio/__pycache__/tasks.cpython-36.pyc,Это указывает на то, что что-то изменило файл tasks.py, что привело к тому, что его содержимое отличалось от того, что было поставлено с вашим двоичным файлом Python.

Для сравнения, родственный модуль asyncio.events был загружен из кэша байт-кода, которыйбыл предоставлен установщиком Python во время установки:

# code object from '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/__pycache__/events.cpython-36.pyc'
import 'asyncio.events' # <_frozen_importlib_external.SourceFileLoader object at 0x104ccf4e0>

Объект кода для этого модуля был загружен из файла asyncio/__pycache__/events.cpython-36.pyc.

Вы можете переустановить Python из Установщик OS X , но в этот момент я бы просто взял вместо более новую версию 3.6.5 .

Вы также можете попробовать восстановить исходное содержимое, загрузивисходный код из тега v3.6.2 , но тогда вам нужно будет убедиться, что байт-код регенерирован (запустите sudo python -m compileall /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/tasks.py), и вам нужно будет проверить наличие других таких измененных файлов (попробуйтеfind /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 -name \*.py -newer /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/__init__.py)

0 голосов
/ 19 мая 2018

Кажется, что это ошибка

Попробуйте обновить ваш Python с помощью brew

brew upgrade python3

В настоящее время доступен Python 3.6.5, и такой проблемы нет

...