Я хотел бы установить самую последнюю версию boto , которую я делаю через python setup.py install
. Однако, когда я пытаюсь удалить старую версию, следующие пакеты также удаляются:
apt-get remove python-boto
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
cloud-init cloud-utils euca2ools python-boto
Как я могу сказать менеджеру пакетов удалить boto, и они помечают его как установленный снаружи (или что-то в этом роде), чтобы apt не попыталась исправить отсутствующую зависимость? 117] Спасибо,
Максим.
Вы можете создать фиктивный .deb пакет, используя утилиту equivs
, она обеспечит зависимость без установки файлов. Затем просто замените текущий установленный пакет на фиктивную версию, используя dpkg -i fake.deb
.
Именно для этого и предназначена apt-mark hold
.
apt-mark hold package_name
Из документации:
hold используется для маркировки пакета как удерживаемого, что предотвратит автоматическую установку, обновление или удаление пакета. Команда представляет собой только обертку вокруг dpkg --set-selections, поэтому состояние:
чтобы удержать пакет:
apt-mark удерживает имя_пакета
Используйте dpkg напрямую, а не apt-get или aptitude:
sudo dpkg -r --force-depends "packagename-version"
или
sudo dpkg -r --force-depends "packagename"
Для завершения ответа João Pinto, вы можете использовать мой маленький скрипт, чтобы исправить сломанный пакет, этот скрипт создаст фиктивный пакет с эквивами и установить его. Вы можете найти статью в моем блоге на французском.
или непосредственно в gist code .
Чтобы использовать его:
$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
Я знаю, что это старый пост, но, поскольку недавно у меня была похожая проблема, я хотел бы поделиться своим решением в надежде, что кто-то в будущем сочтет его полезным .
Если вы установили пакет с помощью aptitude, он автоматически присваивает флажки зависимостям (автоматически), и когда вы снова пытаетесь удалить свой пакет, он пытается удалить все его зависимости, для которых установлен флажок auto.
Как вы в моем случае я вижу, что это zabbix, который я хочу удалить:
uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:
apache2{u} dbconfig-common{u} fping{u} javascript-common{u} libhtml-template-perl{u} libiksemel3{u} libjs-prototype{u}
libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u} mysql-server{u} mysql-server-5.1{u} mysql-server-core-5.1{u} php5{u} php5-gd{u}
php5-mysql{u} snmpd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p}
0 packages upgraded, 0 newly installed, 20 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 44.9 MB will be freed.
Do you want to continue? [Y/n/?]
И если мы посмотрим на пакет apache, он будет выглядеть так
uman@mango:~$ aptitude search ^apache2
i A apache2 - Apache HTTP Server metapackage
<snip>
, первый флаг «i» сообщает нам, что apache установлен
Следующий флаг «A» означает автоматически установленный
. Итак, чтобы исправить это и не удалять apache, mysql и php, мы можем просто удалить автоматический флаг с помощью aptitude следующим образом:
uman@mango:~$ sudo aptitude unmarkauto apache2 mysql-server php5
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
Теперь это выглядит так, когда удаление пакета zabbix:
uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:
dbconfig-common{u} fping{u} javascript-common{u} libiksemel3{u} libjs-prototype{u} libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u}
php5-gd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p}
0 packages upgraded, 0 newly installed, 12 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 16.6 MB will be freed.
Do you want to continue? [Y/n/?]
Пожалуйста, ознакомьтесь с man-страницей для получения более подробной информации
AFAIK невозможно удалить пакет, использующий APT, не удалив при этом зависящие от него пакеты.
Ссылка: http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html