Вопрос или проблема
У меня работает 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 автоматически приводит систему в устойчивое состояние, обеспечивая совместимость между зависимостями.
Практическое применение
-
Проверка версии PyYAML: Узнайте, какая версия PyYAML установлена на вашем устройстве. Это можно сделать с помощью команды:
pip3 show pyyaml
Убедитесь, что версия PyYAML поддерживает необходимые функции для вашей версии Netplan.
-
Обновление системы: Всегда полезно держать вашу систему и пакеты в актуальном состоянии, особенно когда вы работаете с такими критическими компонентами как серверные настройки сети. Выполните:
sudo apt update sudo apt upgrade -y
-
Переустановка пакетов: Как было предложено, установка конкретной версии PyYAML иногда может решать проблему:
pip3 install --force-reinstall pyyaml==<соответствующая_версия>
Переустановите Netplan, чтобы убедиться, что все файлы правильно связаны:
sudo apt install --reinstall netplan.io
-
Редактирование кода (если применимо): Если после обновления проблема не исчезает, возможно, придется редактировать ваш собственный код (если вы его разрабатывали), чтобы заменить
yaml.CSafeLoader
наyaml.SafeLoader
. -
Использование виртуальной среды: Если ваше приложение использует другую версию PyYAML, нежели системная, создайте виртуальную среду:
python3 -m venv venv source venv/bin/activate pip3 install pyyaml
-
Общение с сообществом: Всегда стоит проверить, решалась ли уже данная проблема в сообществе пользователей и разработчиков, например, на форумах или в трекерах ошибок.
Надеюсь, данная информация будет полезной для устранения проблемы. Убедитесь, что все изменения вы сделали в тестовом окружении перед развертыванием их на продакшен.