如何删除 deb 而不删除其依赖项

Max*_*ler 50 apt

我想安装最新版本的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
Run Code Online (Sandbox Code Playgroud)

我如何告诉包管理器删除 boto,并将其标记为外部安装(或类似的东西),以便 apt 不会尝试修复丢失的依赖项?

谢谢你,
马克西姆。

小智 70

直接使用 dpkg,而不是 apt-get 或 aptitude:

sudo dpkg -r --force-depends "packagename-version"
Run Code Online (Sandbox Code Playgroud)

或者

sudo dpkg -r --force-depends "packagename"
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是当我尝试使用 apt 安装某些东西时,它会检测到我用 dpkg 删除的包丢失了,并将重新安装它。问题如何让 apt 不想重新安装它/忽略它的一致性状态? (4认同)

Dav*_*kan 17

我知道这是一个旧帖子,但由于我最近遇到了类似的问题,我想分享我的解决方案,希望将来有人发现它有用。

如果你通过 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/?]
Run Code Online (Sandbox Code Playgroud)

如果我们查找 apache 包,它看起来像这样

uman@mango:~$ aptitude search ^apache2
i A apache2        - Apache HTTP Server metapackage
<snip>
Run Code Online (Sandbox Code Playgroud)

第一个标志“i”告诉我们已经安装了 apache
下一个标志“A”代表自动安装

因此,为了解决这个问题并且不卸载 apache、mysql 和 php,我们可以像这样删除带有 aptitude 的 auto 标志:

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.
Run Code Online (Sandbox Code Playgroud)

现在删除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/?] 
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看 aptitude 的手册页


小智 16

这正是apt-mark hold它的目的。

apt-mark hold package_name

从文档:

hold 用于将一个包标记为被阻止,这将阻止该包被自动安装、升级或删除。该命令只是 dpkg --set-selections 的包装器,因此状态为

取消保留包裹:

apt-mark unhold package_name

  • 我在尝试执行此操作时遇到错误:`以下软件包具有未满足的依赖项:mysql-server-5.7:取决于:apparmor(&gt; = 2.10)但不会安装E:错误,pkgProblemResolver :: Resolve生成中断,这可能是由保留的包裹引起的。` (2认同)

Joã*_*nto 15

您可以使用该equivs实用程序创建一个虚拟的 .deb 包,它将提供依赖项而无需安装任何文件。然后只需使用dpkg -i fake.deb.