Netplan apply выдает ошибку AttributeError: module ‘yaml’ has no attribute ‘CSafeLoader’

Вопрос или проблема

У меня работает DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION=”Ubuntu 18.04.6 LTS”

который изначально был создан Hetzner

netplan info показывает:

netplan.io:
возможности:

  • auth-phase2
  • dhcp-use-domains
  • ipv6-mtu
  • generated-supplicant
    веб-сайт: https://netplan.io/

apt list:

netplan.io/bionic-updates,bionic-updates, now 0.99-0ubuntu3~18.04.5 amd64 [установлен]

Кто-нибудь нашел решение этой проблемы?

Большое спасибо!!!

$pip3 install pyyaml
$sudo apt install --reinstall netplan
работало без ошибок для меня

Ответ или решение

Ошибка, связанная с AttributeError: module 'yaml' has no attribute 'CSafeLoader', которую вы встретили при использовании Netplan, часто случается по причине несовместимости пакетов Python или несоответствующих версий библиотек. Поскольку вы используете Ubuntu 18.04 "Bionic", вероятно, проблема связана с версией установленной библиотеки PyYAML, которая обновилась и теперь требует изменений в коде, использующем её.

Теоретическая часть

Netplan — это утилита для конфигурации сетевых интерфейсов в операционных системах на базе Linux. Основной подход Netplan заключается в использовании YAML-файлов для описания конфигурации сети, которые затем обрабатываются и применяются соответствующими бэкендами, такими как NetworkManager или systemd-networkd.

PyYAML — это модуль Python для работы с файлами формата YAML. В последнем обновлении PyYAML произошли изменения, касающиеся загрузчиков YAML, что и может вызвать AttributeError. Ранее CSafeLoader был стандартным методом для загрузки и парсинга файлов YAML, он обеспечивал более быструю обработку за счёт использования C-расширений. Однако в некоторых обновлениях или сборках библиотеки данный метод мог быть изменён или удалён, за чем следует проблема с кодом, ожидающем его наличие.

Пример

Вы упомянули, что используете Ubuntu 18.04.6 LTS, и ваша установка Netplan находится на версии 0.99-0ubuntu3~18.04.5. Проблема возникает из-за того, что эта версия Netplan может потребовать более старую или, наоборот, более новую версию PyYAML, которая поддерживает или не поддерживает CSafeLoader.

Пользовательский фрагмент команд свидетельствует о том, как была решена проблема:

$ pip3 install pyyaml
$ sudo apt install --reinstall netplan

Эта последовательность действий может помочь, так как переустановка PyYAML и Netplan автоматически приводит систему в устойчивое состояние, обеспечивая совместимость между зависимостями.

Практическое применение

  1. Проверка версии PyYAML: Узнайте, какая версия PyYAML установлена на вашем устройстве. Это можно сделать с помощью команды:

    pip3 show pyyaml

    Убедитесь, что версия PyYAML поддерживает необходимые функции для вашей версии Netplan.

  2. Обновление системы: Всегда полезно держать вашу систему и пакеты в актуальном состоянии, особенно когда вы работаете с такими критическими компонентами как серверные настройки сети. Выполните:

    sudo apt update
    sudo apt upgrade -y
  3. Переустановка пакетов: Как было предложено, установка конкретной версии PyYAML иногда может решать проблему:

    pip3 install --force-reinstall pyyaml==<соответствующая_версия>

    Переустановите Netplan, чтобы убедиться, что все файлы правильно связаны:

    sudo apt install --reinstall netplan.io
  4. Редактирование кода (если применимо): Если после обновления проблема не исчезает, возможно, придется редактировать ваш собственный код (если вы его разрабатывали), чтобы заменить yaml.CSafeLoader на yaml.SafeLoader.

  5. Использование виртуальной среды: Если ваше приложение использует другую версию PyYAML, нежели системная, создайте виртуальную среду:

    python3 -m venv venv
    source venv/bin/activate
    pip3 install pyyaml
  6. Общение с сообществом: Всегда стоит проверить, решалась ли уже данная проблема в сообществе пользователей и разработчиков, например, на форумах или в трекерах ошибок.

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

Оцените материал
Добавить комментарий

Капча загружается...