ESP8266 - ошибка после обновления платы до 3.1.1

Я использую Ubuntu 22.04 и Arduino IDE 1.8.19 для своих проектов ESP8266.

Вчера я обновился до 3.1.1 (используя менеджер библиотек плат), и сразу после этого я получил следующее сообщение (через несколько секунд после начала компиляции):

Traceback (most recent call last):
  File "/home/guy/snap/arduino/85/.arduino15/packages/esp8266/hardware/esp8266/3.1.1/tools/mkbuildoptglobals.py", line 846, in <module>
    sys.exit(main())
  File "/home/guy/snap/arduino/85/.arduino15/packages/esp8266/hardware/esp8266/3.1.1/tools/mkbuildoptglobals.py", line 759, in main
    if time.time_ns() < os.stat(commonhfile_fqfn).st_mtime_ns:
AttributeError: module 'time' has no attribute 'time_ns'
exit status 1
Error compiling for board LOLIN(WEMOS) D1 R2 & mini.

Действия, предпринятые для поиска причины:

  1. Пустой скетч — происходит.
  2. Любая другая плата ESP8266 — встречается.
  3. Возврат к предыдущей версии, 3.1.0 - происходит.
  4. Вернуться к версии 3.0.2 — ОК!
  5. Проверка версии 3.1.1 на Mac, та же версия IDE — ОК!

Есть идеи, почему? Я один?

Парень

, 👍2

Обсуждение

Ошибка сообщает вам, что функция python time.time_ns() не существует. Эта функция была добавлена в библиотеку времени Python с версией Python3 3.7. Наиболее вероятным сценарием, который я могу себе представить, является то, что на вашей Ubuntu установлена версия python 3.6 или ниже, и поэтому программное обеспечение платы не находит требуемую функцию. Откройте терминал и введите python --version или python3 --version и убедитесь, что у вас установлен как минимум python V 3.7. Я бы порекомендовал установить 3.10+, чтобы иметь самую новую версию и не пропустить другие библиотеки и языковые функции., @Peter Paul Kiefer

@PeterPaulKiefer Ввод guy@linux:~$ python3 --version возвращен Питон 3.10.6, @Guy . D

У меня такая же проблема Убунту 22.04 IDE 1.8.19 Питон 3.10.6 Ошибка возникает после обновления платы esp8266 до 3.1.1, @Michael Tresp

Прости за мой запоздалый ответ. Вы установили Arduino IDE с оснасткой?! Возможно, у Snap есть свои зависимости от Python. У меня часто возникали такие проблемы при использовании snap вместо установки программного обеспечения с помощью apt или вручную с помощью tarball. Теперь я всегда устанавливаю Arduino с помощью архива. В Интернете есть много документов, вот один из примеров: https://linuxopsys.com/topics/install-arduino-ide-on-ubuntu-20-04., @Peter Paul Kiefer

@PeterPaulKiefer да, из Snap, @Guy . D

У меня была такая же проблема, хотя у меня был установлен python 3.8, и я также установил Arduino через Snap. После удаления установки Snap и установки с сайта arduino (файл .AppImage) проблема с time_ns исчезла. Tnx@PeterPaulKiefer. Вы превращаете свой комментарий в ответ, и я с удовольствием проголосую за него., @userfuser

@PeterPaulKiefer, пожалуйста, опубликуйте это как ответ, @Guy . D


2 ответа


Лучший ответ:

2

Ошибка сообщает вам, что функция python time.time_ns() не существует. Эта функция была добавлена в библиотеку времени Python версии 3.7 Python3.

Наиболее вероятным сценарием, который я могу здесь представить, является то, что на вашей Ubuntu установлен Python 3.6 или более ранней версии, и поэтому программное обеспечение платы не находит требуемую функцию.

В зависимости от того, как настроена IDE ARDUINO, используется глобально установленный Python или специальная установка Python. Мы обсудили эти две возможности в чате и поняли, что в вашем случае snap устанавливает свою собственную зависимость от python. Я предполагаю, что версия этого питона была ниже 3.7 и поэтому плагин не смог найти нужную функцию времени.

Если бы Arduino IDE зависела от глобальной установки Python, было бы достаточно установить более новый Python (например, 3.10+) глобально.

В вашем случае (зависимость определяется привязкой) единственное решение, которое у меня есть, — установить IDE не при помощи привязки, а вручную или с помощью apt. В Интернете есть инструкции, такие как https://www. computerpost.com/how-to-install-arduino-ide-on-ubuntu-22-04-lts/.

Пожалуйста, ознакомьтесь с комментарием @userfuser (об использовании файла .AppImage) в обсуждении под вопросом.

,

2

У меня точно такие же симптомы.

После использования snap для установки или Arduino 1.8.19, я обнаружил snap core, недавно обновленный core-18 из Ubuntu 22.04. Последствия были радикальными, начиная только с Python 3.10, все почти работало, но я нашел ошибку внутри mkbuildoptglobals.py внутри вывода Arduino IDE:

-----------------------
*** Traceback (most recent call last):
  File "/home/maxiste/snap/arduino/71/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/mkbuildoptglobals.py", line 831, in <module>
    rc = main()
  File "/home/maxiste/snap/arduino/71/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/mkbuildoptglobals.py", line 744, in main
    from time import time_ns
ImportError: cannot import name 'time_ns'
-----------------------

Добавляю несколько строк в код Python, чтобы можно было увидеть вывод. Сюрприз говорит о том, что Python 3.6, а не 3.10, поэтому mkbuildoptglobals.py останавливается.

Вот пример стартовой строки 200:

if PYTHON_REQUIRES[0] < int(sys.version_info[0]) :
    raise SystemExit(f"{__file__}\nMinimal supported version of Python is {PYTHON_REQUIRES[0]}")
elif PYTHON_REQUIRES[1] > int(sys.version_info[1]) :
    raise SystemExit(f"{__file__}\nMajor version of Python required is {PYTHON_REQUIRES[0]}.{PYTHON_REQUIRES[1]}, your version {sys.version_info[0]}.{sys.version_info[1]}.\n")
else:
    from sys import stdout 
    sys.stdout.write(f"\nArduino Board project use Python version {sys.version_info[0]}.{sys.version_info[1]}\n\n") 
    pass

И он также показывает мне Python 3.6 и, просматривая внутри пути snap вашего дома, вы должны найти:

/snap/gnome-3-28-1804/199/usr/bin/python3.6
/snap/gnome-3-28-1804/199/usr/share/binfmts/python3.6
/snap/gnome-3-28-1804/199/usr/share/lintian/overrides/python3.6
/snap/core18/2810/usr/bin/python3.6
/snap/core18/2810/usr/share/binfmts/python3.6
/snap/core18/2810/usr/share/lintian/overrides/python3.6

В моем случае это обновление gnome-3-28 и обновление core18 из snap, которые push и ниже версии Python для Arduino.

И что еще хуже, для всех тех, кто пробует Ubuntu 22.04, он автоматически обновляет компоненты в snap, не трогая его. У меня даже Chromium обновляется до версии автоматически и оставлена совместимость с TASMOTA и пакет для esp-s2/s3, rsp-c3 и esp32 тоже.

Чтобы помочь сдать таблетку, мне нужно изменить platform.txt следующим хаком:

  • В одной строке рецепта содержится информация об использовании Python, которую следует изменить, чтобы вернуться к точке на вашем Python3.10.
recipe.hooks.sketch.prebuild.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h" 

и где вы нашли

{runtime.tools.python3.path}/python3

Вы меняете это на

{runtime.tools.python3.path}/../../../../../usr/bin/python3.10

Где находится мой snap root: /snap/gnome-3-28-1804/199/usr/bin и все исполняемые приложения из Arduino перемещены сюда.

Так что это вопрос рецепта и неправильного возврата к Ubuntu.

,