Как позволить `dpkg -i` установить для меня зависимости?

325

Скажем, у меня есть, foo-1.2.3.debчто зависит perlи python, тем не менее, от запуска команды:

dpkg -i ./foo-1.2.3.deb

не будет устанавливать эти зависимости. Так что я должен apt-get install perl pythonот руки.

Как заставить dpkg -iустановить эти зависимости для меня автоматически?

Xiè Jìléi
источник
5
@ pd12: Ура для круговых ссылок! :-D
Дэвид Фёрстер
хех, я решил связать оба и посмотреть, какой из модов выберет.
pd12

Ответы:

417

После использования dpkg, запустив следующую команду, я смог установить необходимые зависимости:

sudo apt-get -f install

В целом ваш терминал должен выглядеть так:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...

Обратите внимание на строку о Setting up package_with_unsatisfied_dependencies. Это исправляет (и завершает) установку package_with_unsatisfied_dependencies.deb.

Arindom
источник
8
Должен ли я sudo dpkg -i mypackage.debснова бежать ?
Мухаммед Гелбана
23
После запуска sudo apt-get -f installмоего пакета и его зависимостей все было установлено. Запуск sudo dpkg -i my_package.debне нужен и просто установит пакет снова.
Гас Э
5
После работы на Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. Первый dpkg -iзапуск помечает зависимости, apt-get -f installустанавливает необходимые зависимости, а второй dpkg -iуспешно устанавливает пакет. Обратите внимание, что apt-get install -fэто совершенно другая команда.
Микко Ранталайнен
1
@ да нет, не делай dpkg -i --force; это принудительно установит сломанный пакет! Запуск dpkg/ без / --forceсделает необходимую запись в базе данных пакетов, чтобы apt-get -f installвсе было правильно.
Брайан А. Хеннинг
@Lotharyx: Я не могу попробовать это прямо сейчас, но я не думаю , что DPKG без силы (которая не из - за отсутствие зависимостей) сделает запись в базе данных пакета
ysth
111

Вы можете установить gdebi-core, что является версией установщика пакета GDebi для командной строки с 10.04 и более ранних версий. В более новых версиях Ubuntu для установки дэбов используется Центр программного обеспечения, который не имеет эквивалента командной строки.

Чтобы установить пакет deb с помощью gdebi, просто запустите:

sudo gdebi my_package_1.0.deb
Эндрю Ганнерсон
источник
65

начиная с версии 1.1 (доступно в Xenial (16.04), stretch) apt installтакже разрешает локальные файлы:

sudo apt install ./foo-1.2.3.deb

Намного проще и чище.

Смотрите анонс релиза

textshell
источник
4
Это время, которое доступно
Майк
Это решение не сработало. Все, что произошло, было списком ошибок.
Билли С
@BillyS Жаль слышать, что это не сработало для вас, но без используемой вами версии дистрибутива и с какими ошибками вы не работаете вообще.
текстовая оболочка
Команда не работала для меня, но apt ./install foo-1.2.3.debработала.
Дженк Алти
1
Исправлена ​​команда, приведенные выше комментарии ссылались на предыдущую версию ответа, в которой пропущен необходимый ./или путь
Zanna
38

Gdebi

gdebiустанавливает пакет deb и его зависимости. Чтобы использовать это, запустите:

sudo gdebi package.deb

В более новых версиях Ubuntu он не устанавливается по умолчанию, поэтому вам нужно будет установить его из репозиториев.

Смотрите man gdebiполный список вариантов.

gdebiявляется командной строкой, эквивалентной графическому инструменту с тем же именем, который по умолчанию включался в Ubuntu. Команда для графического инструмента имеет gdebi-gtkи имеет похожую функциональность:

Gdebi-GTK

dv3500ea
источник
gdebi-gtk не будет показывать требуемый deps (по крайней мере, у меня есть версия, которая выглядит как ошибка), но командная строка будет! Если у нас есть другая машина с пакетами, мы можем использовать dpkg-repackее на основе такого списка deps :)
Aquarius Power
21

Бег

sudo apt-get install -f

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

Denwerko
источник
Должен ли я sudo dpkg -i mypackage.debснова бежать ?
Мухаммед Гелбана
3
apt-get -f installработает, но apt-get install -fне то же самое.
200_success
9

У dpkg нет поддержки зависимостей. Есть способ обойти это, но это потребует от вас создания локальной базы данных (и, таким образом, вы уже будете знать зависимости), и она считается устаревшей (...).

Это должна быть командная строка? (установка на сервер?) Если так, посмотрите также, apt-get -fно будьте осторожны: решение зависимостей после установки может привести к поломке системы.

Gdebi (интерфейс GUI) раньше мог это делать, но его заменили на USC.

Как ты скачал .deb. Некоторые из новых возможностей 11.04 - это обработка .deb, загруженного с веб-сайта: он становится открытым в USC, поэтому установщик разрешает зависимости.

РЕДАКТИРОВАТЬ на основе комментария Эндрю: sudo gdebi foo-1.2.3.deb сделал бы трюк!

Rinzwind
источник
Гдеби все еще может быть использован для этого. Центр программного обеспечения теперь просто приложение по умолчанию. Кроме того, как отмечает Чэнь Сяо-Лун, gdebi также можно использовать в командной строке.
Andrewsomething
прохладно! тогда на вопрос есть ответ, потому что gdebi тоже можно использовать в командной строке.
Rinzwind
Это должен быть принятый ответ.
прости
3

В качестве альтернативы gdebi-gtkвы можете использовать Ubuntu Software Center.

Дважды щелкните пакет, и кнопка установки должна быть доступна.

Henrique
источник
3

Вы можете создать файл dpkg-dep-instсо следующим содержанием.

#!/bin/bash

DEBIAN_FILE1=$1
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install

Я предполагаю, что вы создали файл в вашей домашней папке. Сделайте его исполняемым с chmod +x dpkg-dep-instи переместите его с /usr/local/binпомощью sudo cp dpkg-dep-inst /usr/local/bin.

Теперь вы можете установить пакет debian с зависимостями автоматически:

sudo dpkg-dep-inst foo-1.2.3.deb
Базз-DEE
источник
1
Используйте apt-get --yes --fix-broken installи сделайте фиксацию автоматической.
Лукас
@ Да нет, не в общем.
BuZZ-DEE
1

Я просто столкнулся с этой проблемой. Вызов apt-get install -fбудет не устанавливать рекомендуемую зависимость, хотя! Единственный обходной путь для этого - создать локальный репозиторий и добавить его /etc/apt/sources.list, то есть:

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update
Алекс Клезер
источник
0

На самом деле ответ заключается в том, что dpkgменеджер пакетов не может устанавливать зависимости из коробки. Вы сняли камеру man dpkgи выяснили это. Таким образом , вы должны использовать такие инструменты , как apt, apt-get, aptitude, ..., на основе dpkg.

Я бы сказал, что точно такой же случай для rpmменеджера пакетов в другом полушарии Linux. rmpне предназначен для установки на основе зависимостей. Он может устанавливать одиночные пакеты, а также для установки зависимостей , которые вы используете yum, urpmi, up2dateвсе они основаны на RPM.

Как уже отмечалось, существует небольшая опасность установки пакетов dpkgнапрямую, потому что последующее разрешение зависимостей может привести к поломке системы, как обрисовал @Rinzwind.

прости
источник