Рейтинг:0

Почему и как отлаживать: следующие пакеты имеют неудовлетворенные зависимости, ... но они не будут установлены

флаг in
$ sudo apt установить cuda
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Не удалось установить некоторые пакеты. Это может означать, что у вас есть
запрошена невозможная ситуация или если вы используете нестабильную
дистрибутив, что некоторые необходимые пакеты еще не созданы
или был перемещен из входящих.
Следующая информация может помочь разрешить ситуацию:

Следующие пакеты имеют неудовлетворенные зависимости:
 cuda : зависит: cuda-11-4 (>= 11.4.2), но он не будет установлен
E: Невозможно исправить проблемы, у вас есть сломанные пакеты.

Что значит "не устанавливается"? Почему? Почему не устанавливаются зависимости? Как я могу узнать?

Что значит «у вас были сломанные пакеты»? Какие сломанные пакеты? Как я могу узнать?

Что значит «безвыходная ситуация»? Как я могу получить более подробную информацию об этом?

Связано это это Ранее аналогичное сообщение, которое также до сих пор остается без ответа. Но здесь он также печатает «у вас есть сломанные пакеты», и эта «невозможная ситуация», так что, возможно, это немного по-другому.

я не конкретно об этом спрашиваю Куда пакет здесь. Я также не спрашиваю о том, как решить или исправить что-либо здесь. я спрашиваю примерно как отлаживать и Понимаю и обращаться с такими подходящий (или же способный получить) сообщений вообще, для любого пакета.

флаг ru
Комментарии не для расширенного обсуждения; этот разговор был [перенесен в чат] (https://chat.stackexchange.com/rooms/130195/discussion-on-question-by-albert-why-and-how-to-debug-the-following-packages- час).
Рейтинг:1
флаг fr

Я полностью согласен с тем, что многие меткие сообщения гораздо более загадочны, чем хотелось бы, и часто даже вводят в заблуждение. Однако хорошо то, что при работе с apt некоторое время вы будете сталкиваться с сообщениями снова и снова и привыкнете к тому, как их исправлять.

В зависимости от того, что вы знаете о том, что apt делает за кулисами, может быть не так просто понять все детали. Я попробую, надеясь угадать ваш фон и правильно интерпретировать ваш вопрос. Пожалуйста, потерпите меня, если я ошибаюсь :-)

Как правило, сообщения, на которые вы ссылаетесь, «не будут установлены» или «невозможно» относятся к зависимостям, которые необходимы для вашего пакета, который вы устанавливаете, по сравнению с пакетами, уже установленными в вашей системе.

Чтобы понять это, вам нужно знать, что большинство пакетов поставляются не со всеми файлами, которые им действительно необходимы для запуска. Обычай Linux заключается в использовании программного обеспечения с открытым исходным кодом везде, где это возможно, поэтому каждый пакет использует множество библиотек. Это двоичные BLOB-объекты, заполненные функциями, которые исполняемый файл может использовать на лету. Проблема в том, что, с одной стороны, эти проекты с открытым исходным кодом все время меняются и получают очень частые обновления, а с другой стороны, программы закодированы для работы с определенной версией, т.е. версией, которую разработчик использовал во время компиляции. Так что вам нужна именно эта версия или совместимая версия. Было бы легко, если бы каждый разработчик, например. CUDA будет поставлять все библиотеки, которые они использовали во время компиляции.Это не так, потому что большинство из них являются стандартными библиотеками, которые, скорее всего, также используются другими программами, и это будет означать, что каждая программа будет огромной для загрузки и хранения всех этих дубликатов данных (кстати, Docker или AppImage как раз делают это для подскажите решение этой проблемы). Из-за этой проблемы в вашей системе обычно имеется несколько версий системных библиотек. Однако становится сложно, когда библиотеки несовместимы или конфликтуют друг с другом, например. потому что только одна библиотека может получить доступ к системному ресурсу одновременно. В этом случае вы должны найти версию библиотеки, совместимую со всеми установленными пакетами, которые их используют.

Это то, что apt пытается сделать для каждой установки, которую вы делаете. Это не ИИ, поэтому его возможности ограничены. Сообщение невозможной ситуации заключается в том, что у вас явно конфликт, когда нужны две абсолютно несовместимые версии библиотеки одновременно. Чаще всего речь идет не о непосредственно используемых библиотеках, а о библиотеках, которые должны запускаться библиотеками. Существует целая иерархия зависимостей. Очень поучительно зайти на github за любым приличным программным обеспечением и следовать инструкциям по компиляции. Компиляция в Linux очень проста. Но в большинстве случаев это кошмар, чтобы найти и установить все зависимости. И если вы используете не самые новые, а более старые версии, вы не можете использовать самые новые зависимости, но вам также нужно выяснить, какие версии исходного кода вам нужны для каждой из зависимостей. Это дает очень хорошее представление о том, с чем работает apt. Таким образом, сообщение «она не будет установлена» может быть вызвано тем, что требуемая библиотека доступна и будет работать нормально, но любая из их зависимостей имеет конфликт где-то в будущем.

Теперь, что вы можете сделать? Вы можете решить эту проблему лучше, чем apt, если отследите каждый конфликт, а затем выясните, какие другие приложения затронуты, а затем решите, какие из них важны, а какие нет.Например, вы можете узнать, что ваш блокировщик для установки CUDA является инструментом обмена сообщениями по умолчанию, который вы все равно не используете. Простое решение — удалить его и все его библиотеки (когда они больше нигде не используются, apt сделает это). После этого apt может установить его. К сожалению, я не знаю ни одного инструмента, который позволяет вам просматривать эти деревья зависимостей таким образом, чтобы легко понять и отследить эти связи.

У меня тоже есть такие случаи, и первым делом нужно попробовать Aptitude. Он не установлен по умолчанию:

  sudo установить aptitude

Aptitude в основном такой же, как и apt, но он больше и имеет гораздо больше логики для обработки таких случаев. В случае этих сообщений aptitude предложит вам варианты. Некоторые могут быть поддельными, просто скажите «нет», и вы получите еще один. Например, он предложит «понизить версию» пакета. Это означает, что нужно установить более старую версию. Он предложит «удалить» пакет или установить дополнительные пакеты в качестве обходного пути. Проблема в том, что он не говорит вам, каковы последствия, то есть он не говорит вам, что «если вы понизите это, приложение XYZ может больше не работать должным образом». Это просто дает вам варианты выхода из дилеммы, которую «способный» не смог решить.

Поэтому, глядя на предложения от Aptitude, было бы неплохо увидеть, какие пакеты всплывают, и можете ли вы установить соединения самостоятельно. Вы можете заметить, что есть инструмент, который вы недавно установили. Это может дать вам намек на то, что вы все равно не используете. Удалите его и повторите попытку. Также запустите виртуальную машину с пустой Ubuntu и попробуйте установить там свои вещи, это может быть очень полезно, потому что вы видите, есть ли конфликт в выпуске Ubuntu из коробки. Им пора добраться до таких мест и сделать пост как можно более конкретным.

Надеюсь, я не потерял вас и не утомил вас, и это немного нацелено на ваш вопрос.

Теперь apt за кулисами довольно сложен, потому что он написан на языке низкого уровня, и поэтому довольно сложно включить сложные или продвинутые алгоритмы обнаружения и разрешения. Это надежный и компактный инструмент, работающий в любой (даже минимальной) системе. И это так.

флаг in
Спасибо, это уже было очень полезно, чтобы объяснить «почему» часть моего вопроса. Так что есть некий конфликт. Но вы также говорите, что на самом деле невозможно легко увидеть, в чем конфликт на самом деле? Как это может быть? Почти любой другой инструмент и менеджер пакетов, которые я использовал, всегда печатал, какой конфликт существует, например. что lib-v1 и lib-v2 не могут быть установлены одновременно, но запрашиваются этим деревом зависимостей. Я почти уверен, что Gentoo Portage emerge напечатает что-то подобное.
CatMan avatar
флаг fr
Ну, я согласен, это звучит немного черно-белым. Часто мне следовало подчеркнуть «легко», например, легко с точки зрения пользователя. Разработчик узнает, каково назначение и функции пакета, и может легче оценить влияние изменения. Не разработчики не могут, но они также должны иметь возможность устанавливать вещи. Чтобы сделать технически сложные вещи «простыми», иногда требуется больше усилий, чем для самой основной функции. В случае с открытым исходным кодом я думаю, что это культурно самостоятельная вещь: люди знают, кто изобрел функцию, но никого не волнует, кто сделал ее простой в использовании. В любом случае, надеюсь, вы сможете решить свою проблему.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.