«Но упоминается другой пакет.» - Нахождение этого пакета


24

Для пользователя Ubuntu (или другого дистрибутива с управлением пакетами apt) нередко встречается ошибка:

user@box ~ $ sudo apt-get install x
[sudo] password for user: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package x is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'x' has no installation candidate

Было задано несколько вопросов по этому поводу на различных сайтах StackExchange, например, openvpn в AskUbuntu, но обычно они касаются того, как получить конкретный пакет, несмотря на ошибку.

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

Итак, мой вопрос носит более общий характер, и, хотя я предполагаю, что он имеет довольно простой и, следовательно, неинтересный ответ, я не могу придумать, как найти его обычными методами поисковой системы, поэтому я перехожу к AskUbuntu: есть ли команда или опция, которую я могу использовать, чтобы определить, какой пакет / какие пакеты ссылаются на отсутствующий пакет?

Ответы:


13

Вы можете искать пакет с помощью apt-cache:

apt-cache search x

Это выведет все пакеты, которые так или иначе ссылаются на x.


2
Ну, это звучит разумно ... за исключением того, что это не работает для меня. apt-get install libtinfo6отчеты недоступны, но ссылаются на другой пакет, но не apt-cache search libtinfo6дают результатов. Есть ли другой способ сделать подобное?
Эрханнис

@ Erhannis «terminfo» что-нибудь поднимает? Я думаю, что иногда эта ошибка возникает, когда пакет переименовывается.
Арло Джеймс Барнс

Я не уверен. Я обновился до следующей версии Debian, и этот пакет, по-видимому, больше не выдает эту ошибку. Я попробую terminfoв следующий раз, когда это произойдет; это случилось раньше, и, скорее всего, это случится снова.
Эрханнис

23

Иногда это происходит потому, что APT просто ничего не знает о том, о чем вы говорите, но это можно решить, выполнив:

sudo apt-get update

После выполнения этого, как правило , ошибка уходит , потому aptи apt-getзнают , как делать то , что я спрашиваю прямо сейчас.


4
Вы, вероятно, имели в виду, что apt-get updateследует, apt-get upgrade -yпотому что -yобходит подтверждение пользователя. Нет смысла использовать его с apt-get update. Тем не менее, это не отвечает на вопрос, вообще.

4
@CelticWarrior: Я согласен с этим ответом в принципе, потому что обновление информации о хранилище пакетов может решить эту проблему, если кто-то попытается установить пакет из недавно добавленного PPA и забыл запустить apt-get update.
Дэвид Фёрстер

7
@ user589808 Не думаю, что это очень хороший совет. Обновление apt-get не требуется, и вслепую ударить по всему можно сломать больше, чем исправить. так что Уэйн был правильным в привет синтаксисе.
безумно круто

1
apt-get updateотвечает на вопрос AB (пакет существует в репо , но apt-get installи apt-cacheне знают об этом.)
dcorking

1
Для последующих поступлений в комментариях выше обсуждается более старая версия этого ответа. Текущий ответ просто sudo apt-get updateсвободен от споров и был правильным решением для меня.
Дарин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.