अपनी निर्भरता को दूर किए बिना किसी बहस को कैसे हटाया जाए


43

मैं बोटो के सबसे हाल के संस्करण को स्थापित करना चाहूंगा , जो मैं करता हूं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

मैं बोटो को हटाने के लिए पैकेज मैनेजर को कैसे बता सकता हूं, और वे इसे बाहरी रूप से (या ऐसा कुछ) स्थापित करने के लिए चिह्नित करते हैं ताकि उपयुक्त लापता निर्भरता को ठीक करने की कोशिश न करें?

धन्यवाद,
मैक्सिम।


क्या आपने <code> sudo dpkg --remove python-boto </ code> आज़माया है?
dkuntz2

जवाबों:


16

आप equivsउपयोगिता का उपयोग करके एक डमी .deb पैकेज बना सकते हैं , यह किसी भी फाइल को स्थापित किए बिना निर्भरता प्रदान करेगा। तो बस वर्तमान में स्थापित पैकेज का उपयोग कर डमी संस्करण में बदलें dpkg -i fake.deb


60

सीधे dpkg का प्रयोग करें, एप्टीट्यूड या एप्टीट्यूड का नहीं:

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

1
ठीक है, लेकिन जब मैं कुछ स्थापित करने के लिए उपयुक्त का उपयोग करने की कोशिश करूंगा तो यह पता चलेगा कि मैंने dpkg के साथ जो पैकेज निकाला है वह गायब है और इसे फिर से इंस्टॉल करेगा। प्रश्न यह है कि मैं इसे कैसे स्थापित करना चाहता / चाहती हूँ, यह उसकी अवहेलना की स्थिति को अनदेखा नहीं करता है?
मैक्सिम वीक्स्लर

15

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन चूंकि मुझे हाल ही में इसी तरह की समस्या हुई थी, इसलिए मैं अपना समाधान इस उम्मीद में साझा करना चाहूंगा कि भविष्य में कोई इसे उपयोगी समझे।

यदि आपने एप्टीट्यूट के माध्यम से एक पैकेज स्थापित किया है तो यह स्वचालित रूप से निर्भरता (ऑटो) को झंडे सौंपता है और जब आप अपने पैकेज को फिर से निकालने की कोशिश करते हैं तो यह अपने सभी निर्भरता को दूर करने की कोशिश करता है जो ऑटो ध्वज अभी भी सेट है।

जैसा कि आप मेरे मामले में देख सकते हैं कि यह ज़ैबिक्स है जिसे मैं हटाना चाहता हूं:

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

और अगर हम अपाचे पैकेज को देखते हैं तो ऐसा दिखता है

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

पहला ध्वज "i" बताता है कि अपाचे स्थापित है
अगला ध्वज "A" स्वचालित रूप से स्थापित है

तो इसे ठीक करने के लिए और अपाचे, mysql और php को अनइंस्टॉल नहीं करने के लिए, हम बस इस तरह से एप्टीट्यूड वाले ऑटो फ्लैग को हटा सकते हैं:

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.

ज़ैबिक्स पैकेज को हटाते समय अब ​​ऐसा दिखता है:

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

कृपया अधिक जानकारी के लिए उपयुक्तता के लिए मैन पेज देखें


यह सभी का सबसे अच्छा जवाब (स्थिति पर निर्भर करता है) की तरह लगता है। एक कमांड बनाने के लिए बहुत कठिन नहीं होना चाहिए जो सभी आश्रितों को ढूंढता है और उन्हें unmarkauto को पाइप करता है।
जॉनी क्यों

13

वास्तव में यही apt-mark holdहै।

apt-mark hold package_name

प्रलेखन से:

होल्ड का उपयोग पैकेज को वापस रखने के लिए चिह्नित करने के लिए किया जाता है, जो पैकेज को स्वचालित रूप से स्थापित, अपग्रेड या हटाए जाने से रोक देगा। कमांड केवल dpkg --set-selections के आसपास एक आवरण है और इसलिए राज्य है

एक पैकेज को बंद करने के लिए:

apt-mark unhold package_name


1
मेरी स्थिति के लिए, यह अनुशंसित दृष्टिकोण है।
पाउलो कोगी

1
दुर्भाग्य से, यह निर्भरता रखने में विफल रहता है। यानी अगर मैं संकुल A और B को स्थापित करता हूं और वे एक सामान्य निर्भरता X साझा करते हैं, तो A पकड़कर X को पकड़ नहीं पाएगा, और B को हटाने से "E: त्रुटि, pkgProblemResolver :: विफल हो जाएगा।"
MSalters

मुझे ऐसा करते समय बस एक त्रुटि मिलती है: 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 15

3

AFAIK उन पैकेजों को हटाने के बिना APT का उपयोग करके एक पैकेज को हटाने का कोई तरीका नहीं है जो इस पर निर्भर करते हैं।

संदर्भ: http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html


नहीं, यह मेटा-पैकेज के लिए कई उद्देश्यों में से एक है
रोबॉटहैंस

0

जोआओ पिंटो के जवाब को पूरा करने के लिए, आप टूटी हुई पैकेज को ठीक करने के लिए मेरी छोटी स्क्रिप्ट का उपयोग कर सकते हैं, यह स्क्रिप्ट समानों के साथ डमी पैकेज बनाएगी और इसे स्थापित करेगी। आप मेरे ब्लॉग पर फ्रेंच में एक लेख पा सकते हैं ।

या सीधे जीएसटी कोड पर

इसके प्रयेाग के लिए:

$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.