Bağımlılıklarını kaldırmadan bir borcun nasıl kaldırılacağı


43

Üzerinden yaptığım boto'nun en son sürümünü yüklemek istiyorum.python setup.py install

Ancak eski sürümü kaldırmaya çalıştığımda aşağıdaki paketler de kaldırılıyor:

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

Paket yöneticisine boto'yu kaldırmasını nasıl söylerim ve bunların harici olarak (veya buna benzer bir şey) kurulu olarak işaretlerler, böylece apt eksik bağımlılığı gidermeye çalışmaz?

Teşekkürler
Maxim.


<code> sudo dpkg - remove python-boto </code> denediniz mi?
dkuntz2

Yanıtlar:


16

Bu equivsyardımcı programı kullanarak boş bir .deb paketi oluşturabilirsiniz, herhangi bir dosya yüklemeden bağımlılığı sağlayacaktır. Ardından, şu anda kurulu olan paketi kullanarak sahte sürümle değiştirin dpkg -i fake.deb.


60

Apt-get veya yetenek değil, dpkg doğrudan kullanın:

sudo dpkg -r --force-depends "packagename-version"

1
Doğru ama bir şeyi yüklemek için apt kullanmaya çalıştığımda, dpkg ile kaldırdığım paketin eksik olduğunu ve yeniden yükleyeceğini belirleyecektir. Nasıl yeniden yapmak istemem / tutarlılık durumunu görmezden gelmeme sorusu nedir?
Maxim Veksler

15

Bunun eski bir gönderi olduğunu biliyorum, ancak son zamanlarda benzer bir sorun yaşadığımdan, çözümümüzü gelecekte birisinin yararlı bulması umuduyla paylaşmak istiyorum.

Bir paketi bir yetenek aracılığıyla kurduysanız otomatik olarak bayraklara bağımlılıklara (otomatik) atar ve paketinizi tekrar çıkarmaya çalıştığınızda otomatik bayrak işaretinin hala ayarlanmış olduğu tüm bağımlılıkları kaldırmaya çalışır.

Benim durumumda görebileceğiniz gibi, kaldırmak istediğim 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/?]

Ve eğer apache paketini ararsak, bunun gibi görünüyor.

uman@mango:~$ aptitude search ^apache2
i A apache2        - Apache HTTP Server metapackage
<snip>

apache yüklü olduğunu ilk bayrağı "i" söyler
sonraki bayrağı "A" otomatik olarak yüklenir açılımı

Bu nedenle, bunu düzeltmek ve apache, mysql ve php kaldırılmamak için otomatik bayrağı şu şekilde bir yetenekle kaldırabiliriz:

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.

Şimdi zabbix paketini çıkarırken şöyle görünüyor:

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/?] 

Daha fazla bilgi için lütfen yetenek sayfasına bakınız.


Bu, hepsinin en iyi cevabı gibi görünüyor (duruma bağlı olarak). Tüm bağımlıları bulan ve bunları unmarkauto'ya yönlendiren bir komut vermek çok zor olmamalı.
johny neden

13

Tam olarak apt-mark holdbunun için var.

apt-mark hold package_name

Belgelerden:

Bir paketi, paketin otomatik olarak kurulmasını, yükseltilmesini veya kaldırılmasını önleyecek şekilde, geri tutulduğu gibi işaretlemek için kullanılır. Komut sadece dpkg --set-selection etrafında bir sarıcıdır ve bu nedenle durum

Bir paketi kaldırmak için:

apt-mark unhold package_name


1
Benim durumum için önerilen yaklaşım budur.
Paulo Coghi,

1
Maalesef, bu bağımlılığı koruyamıyor. Yani, A ve B paketlerini kurarsam ve ortak bir X bağımlılığını paylaşırlarsa, A'yı tutmak X'i tutmaz ve B'yi kaldırmak başarısız olur "E: Hata, pkgProblemResolver :: Üretilen sonları çöz, bu paketlerden kaynaklanıyor olabilir."
MSalters

Bunu yapmaya çalışırken sadece bir hata alıyorum: The following packages have unmet dependencies: mysql-server-5.7 : Depends: apparmor (>= 2.10) but it is not going to be installed E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
frogstarr78


0

João Pinto'nın cevabını tamamlamak için, kırılmış paketi düzeltmek için benim küçük betiğimi kullanabilirsiniz, bu betiğin eşdeğeri kukla bir paket oluşturacak ve onu kuracaksınız. Blogumda bir makaleyi fransızca olarak bulabilirsiniz .

Veya doğrudan öz kod üzerinde .

Kullanmak için:

$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.