Jak rozwiązać niezaspokojone zależności po dodaniu PPA?

540

Czasami podczas instalowania różnych rzeczy pojawia się błąd:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 package1 : Depends: package2 (>= 1.8) but 1.7.5-1ubuntu1 is to be installed
E: Unable to correct problems, you have held broken packages.

Jak mogę to rozwiązać?

jrg
źródło
33
Zapomnij dokładną nazwę pakietu. To pytanie nie ma znaczenia. Próbuję stworzyć kanoniczne pytanie . W związku z tym dokładny pakiet nie jest istotny w tym konkretnym przypadku.
jrg
33
W rzeczywistości „dokładna nazwa paczki”, choć nie ma znaczenia w pytaniu, jest niezwykle istotna w odniesieniu do każdego problemu w tym zakresie. Zwykle najlepszym pierwszym krokiem do rozwiązania tego problemu jest zidentyfikowanie źródła pkg1 i pkg2. Wydaje się, że zostało to pominięte w odpowiedziach, z których większość jest całkiem dobra. Dodatkowo nie zauważono, że w wielu, jeśli nie w większości przypadków, „<wszystko> ma być zainstalowane” naprawdę oznacza „<wszystko> jest zainstalowane”. Jest to coś, co może dezorientować wielu użytkowników stojących przed tym problemem i powinno również zostać uwzględnione w odpowiedzi poniżej
doug
5
@doug Dodaj to jako odpowiedź, a nie komentarz, jest całkiem niezłe! :)
jrg
1
@Braiam Whaaaat ma jednak rację, pytanie nie jest specyficzne dla umowy PPA i nie ma też wielu odpowiedzi. Wiem, że dwie pierwsze odpowiedzi nieco przytłaczają pozostałe, ale nie jestem pewien, czy zmiana charakteru pytania jest właściwym rozwiązaniem, zwłaszcza że anulujesz pozostałe odpowiedzi. Na razie zostawiam to, ponieważ nie mam lepszej odpowiedzi, ale jest coś do przemyślenia.
Seth
2
Aha, a gdzie jest moje pytanie dotyczące rozwiązywania problemów? : D
Seth

Odpowiedzi:

561

APT to system zarządzania pakietami dla Debiana i innych opartych na nim dystrybucji Linuksa, takich jak Ubuntu. W większości przypadków APT jest łatwy w użyciu do instalowania, usuwania i aktualizowania pakietów. W rzadkich przypadkach, często w przypadku mieszania się z zależnościami innych firm, apt-getmoże się zdarzyć, że pojawi się błąd informujący, że nie można ukończyć instalacji pakietu.

Rozwiązania:

Zawsze dobrym pomysłem jest tworzenie kopii zapasowych plików konfiguracyjnych /etc/apt/sources.list, aby w razie potrzeby móc cofnąć zmiany.

  • Jeśli errorpokazuje coś takiego:

    <some-package>: Depends: <other-package> (= version) but this-version is to be installed

    Następnie upewnij się, że repozytoria restrictedi universesą włączone. Naciśnij Alt+ F2, wpisz software-properties-gtki naciśnij Enter.

    W Ubuntu Softwarezakładce włącz wszystkie repozytoria.

  • Jedną z możliwych przyczyn niezaspokojonych zależności może być uszkodzona baza danych pakietów i / lub niektóre pakiety nie zostały poprawnie zainstalowane. Aby rozwiązać ten problem, naciśnij Alt+ Ctrl+, Taby otworzyć terminal i spróbuj uruchomić jedno z następujących poleceń:

    sudo apt-get clean

    lub,

    sudo apt-get autoclean

    apt-get cleanusuwa lokalne repozytorium pobranych plików pakietów (pliki .deb). Usuwa wszystko oprócz pliku blokady z / var / cache / apt / archives / i / var / cache / apt / archives / częściowo /. apt-get autocleanusuwa lokalne repozytorium pobranych plików pakietów, ale w przeciwieństwie do apt-get cleannich usuwa tylko pliki pakietów, których nie można już pobrać i są w dużej mierze bezużyteczne.

  • Jedną z najbardziej podstawowych poprawek w celu rozwiązania problemów z zależnościami jest uruchomienie:

    sudo apt-get -f install

    -fOznacza tu „naprawić zepsuty”. Aptspróbuje naprawić zepsute zależności. Jeśli ręcznie zainstalowałeś pakiet, który miał niezaspokojone zależności, apt-getzainstaluje te zależności, jeśli to możliwe, w przeciwnym razie może po prostu usunąć zainstalowany pakiet, aby rozwiązać problem.

    Następnie uruchomić:

    sudo dpkg --configure -a

    Następnie uruchom to ponownie:

    sudo apt-get -f install

    Jeśli dane wyjściowe to:

    0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

    To znaczy, że się nie udało.

  • Następnym rozwiązaniem jest uruchomienie:

    sudo apt-get -u dist-upgrade

    Jeśli pokazuje jakiekolwiek wstrzymane pakiety, najlepiej je wyeliminować. Pakiety są wstrzymywane z powodu konfliktów zależności, aptktórych nie można rozwiązać. Wypróbuj to polecenie, aby znaleźć i naprawić konflikty:

    sudo apt-get -o Debug :: pkgProblemResolver = tak dist-upgrade

    Jeśli nie będzie w stanie naprawić konfliktów, zakończy działanie za pomocą:

    0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.

    Usuń wstrzymane pakiety jeden po drugim, uruchamiane za dist-upgradekażdym razem, aż nie będzie już wstrzymanych pakietów. Następnie zainstaluj ponownie wszystkie potrzebne pakiety. Skorzystaj z tej --dry-runopcji, aby uzyskać pełną informację o konsekwencjach:

    sudo apt-get remove --dry-run nazwa-pakietu

    Ponieważ usunięcie pakietu, który próbujesz zainstalować, może nie być idealne, możesz również spróbować znaleźć repozytorium, które zawiera pakiety potrzebne do spełnienia zależności.

Wreszcie, jeśli wszystko inne zawiedzie, możesz spróbować samodzielnie zaspokoić zależności, albo znajdując i instalując niezbędne pakiety, lub instalując je ze źródła, a następnie tworząc dla nich pakiety „ deb ”.

Wyłącz / Usuń / Wyczyść PPA:

PPA (Personal Package Archive) to repozytoria hostowane na Launchpadzie . Możesz użyć PPA do instalacji lub aktualizacji pakietów, które nie są dostępne w oficjalnych repozytoriach Ubuntu.

Jedną z najczęstszych przyczyn niezaspokojonych zależności są umowy PPA, zwłaszcza w przypadku aktualizacji istniejącego pakietu w repozytoriach Ubuntu. Aby rozwiązać problem, masz trzy opcje: wyłącz, wyczyść (przywróć oryginalny pakiet w repozytoriach Ubuntu) lub usuń PPA.

  • Wyłączyć:

    Wyłączenie PPA oznacza, że ​​nie będzie więcej aktualizacji pakietów zainstalowanych z tego PPA. Aby wyłączyć PPA: Otwórz Software Center > Edit > Software Sourceslub,

    Naciśnij Alt+ F2i biegnij software-properties-gtk.

    Kliknij Other Softwarezakładkę, zobaczysz, że każdy PPA ma tutaj dwie linie, jedną dla skompilowanych pakietów i jedną dla źródła, Uncheckobie linie do wyłączenia PPA. Tutaj możesz także dodawać i usuwać umowy PPA.

  • Oczyścić:

    Usunięcie PPA oznacza obniżenie pakietów wybranego PPA do wersji w oficjalnych repozytoriach Ubuntu i wyłączenie tej PPA. PPA Purge robi dokładnie to. Aby zainstalować PPA Purge, uruchom następujące polecenie:

    sudo apt-get install ppa-purge

Ale biorąc pod uwagę, że pytanie aptjest zepsute, powyższe polecenie nie powiedzie się. Więc użyj tego polecenia

mkdir ppa-purge && cd ppa-purge && wget http://mirror.pnl.gov/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget http://mirror.pnl.gov/ubuntu//pool/main/a/aptitude/aptitude_0.6.6-1ubuntu1_i386.deb && sudo dpkg -i ./*.deb

Aby użyć PPA Purge:

sudo ppa-purge ppa: someppa / ppa

Jeśli polecenie „ppa-purge” z jakiegoś powodu nie powiedzie się, nie można ponownie uruchomić polecenia „ppa-purge”, chyba że ponownie włączysz PPA (Aby włączyć PPA, wykonaj te same kroki, co wyłączenie PPA i Checkobu linii określonego PPA, aby ją włączyć).

Uwaga: PPA Purgenie usuwa PPA ( może być w przyszłości ), więc musisz ręcznie usunąć PPA.

  • Usunąć:

    Jeśli pakiet zainstalowany z PPA nie istnieje w oficjalnych repozytoriach Ubuntu, to używanie PPA Purgenie jest zalecane, ponieważ nie ma nic do obniżenia i PPA Purgenie usunęłoby go. Aby usunąć PPA i zainstalowane pakiety, uruchom następujące polecenia: (Zignoruj ​​pierwsze polecenie, jeśli nie chcesz usuwać zainstalowanych pakietów)

    sudo apt-get autorove --purge nazwa-pakietu
    sudo add-apt-repository --remove ppa: someppa / ppa
    sudo apt-get autoclean
    

Alternatywnie można użyć Y PPA Managerdo wyłączenia / usunięcia / wyczyszczenia PPA (Szczegóły na końcu odpowiedzi).

Środki zapobiegawcze:

Jak więc w pierwszej kolejności uniknąć tego zjawiska?

  • Aktualizuj Ubuntu. Ubuntu automatycznie powiadamia o dostępności aktualizacji, możesz też sprawdzić dostępność aktualizacji, klikając Session Indicatorw panelu Unity:

    Lub Hit Alt+ Ctrl+ T, aby otworzyć zacisk i uruchomić następujące polecenia:

    sudo apt-get update
    sudo apt-get upgrade

    Aktualizacja: synchronizuje listę dostępnych pakietów z serwerami w repozytoriach źródłowych. Uaktualnienie: pobiera i instaluje wszystkie nowsze wersje zainstalowanych pakietów.

  • Jeśli zdecydujesz się dodać inne repozytoria do sources.list, upewnij się, że repozytorium ma działać (i znane z pracy) z Ubuntu. Repozytoria, które nie są zaprojektowane do pracy z twoją wersją Ubuntu, mogą wprowadzać niespójności w twoim systemie i mogą zmusić cię do ponownej instalacji. Upewnij się także, że naprawdę musisz dodać zewnętrzne repozytoria, ponieważ poszukiwany pakiet oprogramowania mógł już zostać wprowadzony do oficjalnych repozytoriów! Źródło
  • Usuń zduplikowane umowy PPA. Y PPA Manager(instrukcja instalacji na końcu odpowiedzi) może łatwo skanować i usuwać duplikaty plików PPA.

    • Naciśnij Alt+ F2i uruchom, y-ppa-manageraby otworzyć Y PPA Manager.
    • Po otwarciu podwójnym kliknięciem lub uderzyć Enterna Advanced.
    • W wyświetlonym oknie wybierz Scan and remove duplicate PPAsi kliknij OK.

wprowadź opis zdjęcia tutaj

Otrzymywać pomoc:

Prosząc o pomoc na Askubuntu lub innym forum pomocy, w odpowiedzi na pytanie należy podać wyniki następujących poleceń:

  • Wynik rzeczywistego błędu:

    sudo apt-get install nazwa-pakietu
  • Spowoduje to wyświetlenie źródeł.list:

    cat /etc/apt/sources.list
  • Spowoduje to wyświetlenie listy umów PPA (jeśli istnieją):

    cat /etc/apt/sources.list.d/*

Dodatkowe źródła:


Y PPA Manager : Y PPA Manager to kompleksowe centrum obsługi dla wszystkich twoich potrzeb PPA.

kierownik ppa

Oto niektóre z jego funkcji:

  • wyszukaj pakiety we wszystkich PPA Launchpad
  • wyświetlać i pobierać pakiety w PPA
  • dodaj / usuń / wyczyść PPA
  • tworzenie kopii zapasowych i przywracanie źródeł PPA
  • usuń zduplikowane źródła PPA

Aby zainstalować Y PPA Manager, otwórz terminal, naciskając Alt+ Ctrl+ Ti uruchom następujące polecenia:

sudo add-apt-repository ppa: webupd8team / y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

Biorąc pod uwagę pytanie, aptjest zepsuty, więc zamiast tego użyj tych poleceń

sudo su

i

32-bitowy:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_i386.deb && dpkg -i ./*.deb

64-bitowy:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_amd64.deb && dpkg -i ./*.deb
Basharat Sialvi
źródło
3
Jak zainstalować niespełnione depandancje, jeśli apt jest zepsuty?
Tachyons
4
To była dla mnie ogromna pomoc ... świeża instalacja Lubuntu 12.04 i nie mogłem zainstalować podstawowych rzeczy, takich jak gvim (vim-gtk) lub openssh-server. Próbowałem wszelkiego rodzaju opcji wiersza poleceń, w tym dosłownie robiąc różnicę /etc/apt/sources.list z tej maszyny i innej (która działała poprawnie, uruchamiając Xubuntu). Po wykonaniu tego przewodnika okazało się, że w jakiś sposób w software-properties-gtk pole repozytoriów „głównych” zostało odznaczone! Problem rozwiązany!
memilanuk
1
Kiedyś naprawdę trzymałeś zepsute paczki ... Więc najlepszą rzeczą jest ich zatrzymanie i usunięcie. Zobacz askubuntu.com/a/363244/16395
Rmano
3
Nikt tak naprawdę nie odpowiedział, jak zainstalować te pakiety z niespełnionymi wersjami zależności. Bóg! Chcę tylko wymusić instalację starszych wersji pakietów.
marines
3
To mi nie zadziałało: S
AlvaroAV,
87

Uwaga: Wszystkie polecenia wymagane do uruchomienia muszą być uruchomione w terminalu, który można otworzyć za pomocą Ctrl+ Alt+ Tlub wyszukując terminal w myślniku.

Czy to naprawdę zepsute?

Spróbuj uruchomić następujące polecenie i spróbuj ponownie zainstalować oprogramowanie, które próbujesz zainstalować

sudo apt-get update

Kroki przed występami

Tworzenie kopii zapasowej

Wykonaj kopię zapasową następujących plików:

  • /etc/apt/sources.list
  • /var/lib/dpkg/status

Aby to zrobić, użyj tych poleceń

sudo cp /etc/apt/sources.list /etc/apt/sources.list.original

i

sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.original

Czyszczenie pamięci podręcznej apt-cache

aptprzechowuje pamięć podręczną ostatnio pobranych pakietów, aby zaoszczędzić przepustowość, gdy jest wymagana instalacja. W niektórych przypadkach może to przynieść efekt przeciwny do zamierzonego

Teraz, aby go wyczyścić, masz dwie opcje

sudo apt-get clean 

Spowoduje to usunięcie wszystkich buforowanych pakietów należących do folderu, /var/cache/apt/archives/a /var/cache/apt/archives/partialoprócz plików .lock. To jest zalecane

sudo apt-get autoclean

To skanuje foldery /var/cache/apt/archives/i /var/cache/apt/archives/partialsprawdza, czy pakiet nadal znajduje się w repozytoriach i usuwa te, których nie ma


Naprawianie zależności

Używanie trybu apt-broken

sudo apt-get -f install

Spowoduje to, że apt będzie skanować w poszukiwaniu brakujących zależności i naprawi je z repozytoriów

Jeśli dane wyjściowe stwierdzają, że nic nowego nie zostało zainstalowane ani zaktualizowane, oznacza to, że nie powiodło się.


Sprawdzanie, czy wszystkie wymagane źródła są włączone

Wpisz, gksu software-properties-gtka dostaniesz to okno

Upewnij się, że wszystkie źródła są włączone.

następnie przejdź do zakładki Inne oprogramowanie i sprawdź, czy wymagane są umowy PPA dla oprogramowania, które ma zostać zainstalowane, i czy są włączone. Spróbuj także wyłączyć niektóre PPA, które mogą mieć uszkodzone pakiety

teraz biegnij sudo apt-get update

Spróbuj zainstalować oprogramowanie teraz

Wybór lepszego serwera do pobrania

Wpisz, gksu software-properties-gtka dostaniesz to okno

Kliknij Pobierz z pola rozwijanego i wybierz inne

Kliknij Wybierz najlepszy serwer

Biegać sudo apt-get update

Spróbuj zainstalować oprogramowanie

spróbuj także użyć sudo apt-get install -f


PPA Purge

Jest to narzędzie używane do usuwania uszkodzonych / niechcianych ppa i ich aplikacji wraz z nim

Aby go zainstalować, uruchom

sudo apt-get install ppa-purge

Ale biorąc pod uwagę, że pytanie aptjest zepsute, powyższe polecenie nie powiedzie się. Więc użyj tego polecenia

mkdir ppa-purge && cd ppa-purge && wget http://mirror.pnl.gov/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget http://mirror.pnl.gov/ubuntu//pool/main/a/aptitude/aptitude_0.6.6-1ubuntu1_i386.deb && sudo dpkg -i ./*.deb

Teraz użyj ppa purge

sudo ppa-purge ppa:someppa/ppa  

Menedżer Y-PPA

Y-PPA Manager to aplikacja GUI, która pomaga zarządzać PPA i różnymi związanymi z tym problemami

Aby go zainstalować

sudo add-apt-repository ppa:webupd8team/y-ppa-manager

i

sudo apt-get update

i

sudo apt-get install y-ppa-manager

Biorąc pod uwagę pytanie, aptjest zepsuty, więc użyj tych poleceń

sudo su

i

32-bitowy:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_i386.deb && dpkg -i ./*.deb

64-bitowy:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_amd64.deb && dpkg -i ./*.deb

Teraz wpisz y-ppa-manager

Zostanie wyświetlone to okno

Kliknij dwukrotnie zaawansowane, a otrzymasz to okno

Wykonaj następujące zadania opisane w kolorze czarnym


Lepiej zapobiegać niż leczyć

Lepiej jest zapobiegać niż szukać tego pytania na AskUbuntu: D

Oto więc wskazówki, które zapewnią ci bezpieczeństwo

Aktualizuj swój system

zawsze uruchamiaj następujące polecenie regularnie

sudo apt-get update&&sudo apt-get upgrade

lub zawsze możesz użyć Menedżera aktualizacji z tym poleceniem

gksu update-manager

Używanie tylko zaufanych umów PPA

Używaj tylko PPA przeznaczonych do użytku na Ubuntu, używaj tylko PPA z zaufanymi źródłami. Rzeczywiście, pakiet może już znajdować się w repozytoriach ubuntu

Tworzenie kopii zapasowej, gdy wszystko jest w porządku, i przywracanie jej później

Do tego potrzebny jest Y-PPA-Manager. Kroki instalacji to podane powyżej.

Uruchom to polecenie, aby otworzyć Menedżera Y-PPA

y-ppa-manager

Zostanie wyświetlone to okno

Kliknij dwukrotnie zaawansowane, a otrzymasz to okno

Uruchomić to:

Zostaniesz poproszony o zapisanie pliku tar.gz w oknie dialogowym podobnym do tego poniżej. Zapisz go w innej partycji lub w bezpiecznym miejscu

Później, gdy trzeba go przywrócić, wykonaj podobne kroki, a po przejściu do zaawansowanego okna dialogowego kliknij:

Zostaniesz poproszony o przywrócenie z poprzedniej kopii zapasowej, którą wcześniej zapisałeś, za pomocą okna dialogowego podobnego do tego poniżej


Wciąż nie działa?

Błędy zależności pakietu nie zawsze są ogólne i zależą od pakietu, który ma zostać zainstalowany.

Jeśli wykonanie wszystkich kroków podanych w celu naprawienia błędu nie działa, zawsze możesz zapytać w Ubuntu

Oto kilka poleceń, które musisz opublikować

sudo apt-get install packagename

i

cat /etc/apt/sources.list

i

cat /etc/apt/sources.list.d/*

(Dzięki Basharat Sial )

Są też inne pliki / polecenia, których wyjście może być specyficzne dla błędu, a użytkownicy prawdopodobnie podpowiedzą w komentarzach o opublikowaniu pliku / polecenia.

Amith KK
źródło
Chciałbym umieścić apt-get updatena górze listy. Czasami twój system dokonał aktualizacji, w której jeden nowszy pakiet został zaktualizowany zdalnie, ale ten, na którym zależy, jeszcze się nie zakończył. Lub wersja, którą masz w lokalnej pamięci podręcznej, została zaktualizowana. W takich przypadkach prosty apt-get updateaktualizuje lokalną pamięć podręczną i możesz kontynuować.
Hamish Downer
1
Najlepsza odpowiedź! To sprawia, że ​​żałuję, że i / lub dpkg miał lepszą ochronę, aby mieć pewność, że nie dostaną się do tych zablokowanych stanów, lub lepiej je rozwiążą. Miałem już ten problem i byłem całkiem sfrustrowany, gdy apt-get install -fgo nie naprawiłem.
Jeff Welling
Możesz także dołączyć to ostrzeżenie: „Nigdy nie aktualizuj systemu, gdy PPA jest włączony, wyłącz je najpierw, a następnie uaktualnij” Ponieważ, jeśli uaktualnisz do wersji PPA, a następnie ta PPA straci ważność, w końcu oznacza to, że nie żyjesz . Nie można obniżyć wersji całego systemu na niższe numery wersji i nie można zainstalować czegoś ze standardowego repozytorium, ponieważ pakiet ze standardowego repo ma konflikt z zainstalowanym pakietem PPA.
Anwar
2
Wybierz lepszy serwer to dla mnie naprawiło. Dziękuję Ci!
Hoang Huynh
Myślałem, że -fflaga oznacza siłę i zawsze unikałem jej użycia
user907860
38

Dotychczasowe odpowiedzi koncentrują się na automatycznym rozwiązaniu takiego problemu, głównie w nadziei, że sam się rozwiąże, ale nie na zrozumieniu, jak badać zależności. Ważne jest, aby wypróbować takie rzeczy, jak upewnienie się, że listy pakietów są aktualne, ponieważ musisz się upewnić, że prosta aktualizacja lub wyczyszczenie pamięci podręcznej nie rozwiąże problemu przed głębszym kopaniem. Jeśli wszystko za kulisami działa tak, jak powinno, należy jednak przede wszystkim nauczyć się rozumieć zależności. Czasami warstwy zależności mogą wydawać się przytłaczające, ale koncepcja jest prosta i kluczem do zrozumienia, w jaki sposób oprogramowanie jest instalowane / odinstalowywane w systemie Ubuntu.

Gorąco polecam aptitude każdemu, kto używa systemu opartego na .deb, takiego jak Ubuntu. Jego struktura drzewa pozwala łatwo przeglądać zależności, w tym zalecane i sugerowane pakiety, a także wizualizować konflikty i niezaspokojone zależności. Jest to nieocenione narzędzie, gdy apt-get nie oferuje prostego rozwiązania, i ogólnie do wizualizacji zależności. ( Synaptic jest również dostępny w Ubuntu, ale nie uważam tego za intuicyjne).

Aptitude oferuje również program do rozwiązywania konfliktów, który przeprowadzi Cię przez wszystkie możliwe kombinacje zainstalowanych / usuniętych / zaktualizowanych pakietów itp., Aby spełnić wszystkie wymagania bez konfliktów i problemów. Może się to udać, nawet jeśli apt nie jest w stanie znaleźć rozwiązania. Jako użytkownik Ubuntu zwykle nie zdarzają się sytuacje, które wymagają zbadania, dlaczego ten konkretny pakiet jest instalowany, ale jest to prawie nieuniknione, gdy częściej używasz systemu.

przesadnie przepisane
źródło
3
Zagłosowano za wzmianką o rozwiązaniu konfliktu Aptitude. Są chwile, kiedy konieczne jest użycie zaawansowanych narzędzi takich jak ten, aby określić, jakie są możliwości i wskazać podstawowy konflikt.
John S Gruber,
3
To może być najlepsza odpowiedź w tym wątku. Można go nawet ulepszyć dzięki samouczkowi na aptitudetemat rozwiązywania konfliktów.
Luís de Sousa
2
ten link, chociaż nie wyjaśnia zależności, ani ich ogólnej koncepcji, pokazuje szybki samouczek interaktywnego resolvera: aptitude.alioth.debian.org/doc/en/ch02s03s03.html
przesadnie
1
Umiejętność +1 właśnie uratowała mój bekon w obliczu konfliktu GTK3. apt-get nie pomógł wcale.
Chris Laplante,
1
To co lubię to sudo aptitude --full-resolver my_package. To zwykle daje The following packages have unmet dependenciesi listę, z której 7) <my_package> [Not Installed](7 to tylko przykład). Na każdym kroku aptitude oferuje nowe możliwości. To, co zadziałało dla mnie, to najpierw wybrać 7, a następnie r 7(co odpowiada opisowi Rejecting the removal of my_package), a następnie n (w przypadku NIE), ponieważ wcześniej nie były to wybory , których nie chciałem: ale potem nowe możliwości zaoferowały obniżenie niektórych pakietów wraz z instalacją my_package; więc na koniec Y(dla TAK)
24

pakiet 1: Zależy: pakiet 2 (> = 1,8), ale należy zainstalować 1.7.5-1ubuntu1

Objaśnienie komunikatu:

  1. Aby instalacja została zakończona, pakiet 1 potrzebuje pakietu 2.
  2. pakiet2 musi być dostępny w wersji> = 1.8
  3. Menedżer pakietów sprawdził wszystkie repozytoria i znalazł tylko wersję 1.7.5-1ubuntu1, którą można zainstalować, czego nie zrobi, ponieważ jest <1.8

Naprawić

Nie ma jednej właściwej odpowiedzi na to pytanie i NIE ma prostej odpowiedzi.

Istnieje wiele scenariuszy, dlaczego tak się dzieje i należy zbadać wszystkie opcje i spróbować rozwiązać warunki wstępne, które prowadzą do tego błędu.

Scenariusz A:

Wszystkie repozytoria, do których masz dostęp, nie mają pakietu2 w wersji> = 1.8, więc będziesz musiał znaleźć repozytorium, które ma. Jeśli nie możesz znaleźć repozytorium z wersjami> = 1.8, być może będziesz musiał skompilować i zainstalować pakiet 2 ze źródła. A następnie spróbuj zainstalować pakiet 1.

Jeśli chcesz wiedzieć, jak zbudować pakiet ze źródła, sprawdź inne pytania / odpowiedzi lub opublikuj nowe.

Scenariusz B:

Repozytoria zawierają pakiet2 w wersji> = 1.8, ale menedżer pakietów nadal chce zainstalować starszą wersję (1.7.5).

Powodem tego może być to, że późniejsze wersje pakietu 2 zostały zbudowane przy użyciu nowszej technologii, która nie jest obsługiwana przez inne pakiety, które zostały już zainstalowane.

W ogóle może to nie być możliwe. Możesz spróbować użyć apt lub synaptic i poszukać wszystkich wersji pakietu2, które są dostępne w repozytoriach, i spróbować zainstalować określoną wersję> = 1.8

Jeśli masz inne niekompatybilne pakiety i to zrobisz, otrzymasz listę podobnych komunikatów o błędach dla wszystkich innych pakietów, które uniemożliwiają instalację pakietu2> = 1.8.

W takim przypadku masz większy problem. Chciałeś zainstalować pakiet 1, który wymaga pakietu 2 => 1,8, ale pakiet 2 w wersji> = 1.8 wymaga pakietu 3 w wersji> = 6.7 i masz pakiet 3 w wersji 6.3

Chodzi o to, że menedżer pakietów (APT) próbuje automatycznie rozwiązać wszystkie te zależności, jeśli jest to możliwe. Kiedy powie, że nie jest to możliwe (i wyda komunikat taki jak w pytaniu), należy mu zaufać.

Jeśli zdecydujesz się nie ufać menedżerowi pakietów i masz pewność, że nie będziesz mieć problemów, możesz spróbować wymusić instalację konkretnych potrzebnych wersji wszystkich pakietów, jeden po drugim, i mam nadzieję, że wszystko będzie w porządku.

Uwaga, robienie tego dla pakietów systemowych może powodować poważne problemy. Możesz zablokować się w systemie, zablokować krytyczne usługi itp.

Scenariusz C:

Bez względu na przyczyny problemu, zawsze możesz skonfigurować ręczną kompilację i zbudować potrzebny pakiet oraz wszystkie jego zależności w dokładnie potrzebnych wersjach ze źródła. Dzięki tej opcji możesz zachować to, co zbudowałeś, w osobnym katalogu i poza ścieżką systemową, aby nie powodowało to konfliktów z systemem. Jest to prawdopodobnie najczystsze rozwiązanie, a czasem może być szybsze.

Scenariusz D:

Menedżer pakietów ma dostęp do przestarzałych informacji o pakietach i dlatego nie może znaleźć rozwiązania. Spójrz na inne odpowiedzi.

Scenariusz E:

Menedżer pakietów ma błąd w kodzie rozwiązywania zależności.

Musisz zbadać, czy tak jest naprawdę, a następnie wysłać prośbę o błąd.

...

Scenariusz Z:

Mogą istnieć inne scenariusze.

Na przykład opiekunowie pakietów mogli się mylić i nie sprawdzali, czy pakiet1 będzie działał nawet z wersją pakietu2 <1.8, aw specyfikacji ustawiali nieprawidłowe zależności.

Vangel V. Ajanovski
źródło
17

Tych metod należy przestrzegać za każdym razem, gdy pojawi się błąd dotyczący niezaspokojonych zależności

Po wykonaniu instrukcji spróbuj zainstalować oprogramowanie. Przynajmniej jedna z tych metod powinna Ci pomóc

1 . Przed wypróbowaniem nowego polecenia lub dodaniem nowego ppa spróbuj tego

Czyszczenie pamięci podręcznej apt:

sudo apt-get clean

Usuwanie wszelkich nieużywanych zależności:

sudo apt-get autoremove

Aktualizowanie apt-cache

sudo apt-get update

Spowoduje to usunięcie całej pamięci podręcznej i pobranie nowej pamięci podręcznej. Należy to zrobić, aby uzyskać świeże pakiety pamięci podręcznej i nowsze aktualizacje.

2 . Spróbować sudo apt-get install -f.

Prawdopodobnie da jakieś sugestie dotyczące usuwania i instalowania pakietów, rób to, co wydaje się rozsądne.

3 . Zmień Download Serverz Software SourcesPonieważ czasami pliki na serwerze są uszkodzone.

wprowadź opis zdjęcia tutaj
wprowadź opis zdjęcia tutaj
wprowadź opis zdjęcia tutaj

4 . Dzieje się tak również wtedy, gdy wcześniej dodałeś zewnętrzny ppa dla uszkodzonej zależności. Spróbuj usunąć to ppa przez

  • albo wpisując, sudo add-apt-repository --remove ppa:someppa/ppaa następnie ręcznie usuwając pliki / biblioteki zainstalowane w ppa

lub

  • czyszczenie ppa (usuwa to również zainstalowane pliki)

    sudo apt-get install ppa-purge   #a one time install 
    sudo ppa-purge ppa:someppa/ppa  
    

5 . Jeśli nr 4 nie jest twoim przypadkiem, przynajmniej spróbuj usunąć pakiet, który jest wyświetlany jako zepsuta zależność. Następnie spróbuj ponownie zainstalować. Zgłoszono, że działał on dla wielu osób.

6 . Zawsze dodawaj stabilną wersję repozytorium / PPA.

wprowadź opis zdjęcia tutaj

7 Upewnij się także, że masz włączone wszystkie oficjalne repozytoria (In Software Sources)

wprowadź opis zdjęcia tutaj

Nie włączaj, Proposed Updatesponieważ są one przeznaczone do testowania / programistów.

wprowadź opis zdjęcia tutaj


Jak powiedział doug:

Zwykle najlepszym pierwszym krokiem do rozwiązania tego problemu jest zidentyfikowanie źródła <pkg1>& <pkg2>.

Dodatkowo nie zauważono, że w wielu, jeśli nie w większości przypadków, „<cokolwiek> ma być zainstalowane” tak naprawdę oznacza „<cokolwiek> jest zainstalowane” i powinno się go spróbować usunąć, jeśli nic więcej nie działa (jak w punkcie 5).


Będę dodawać kolejne rzeczy, których nie mogę znaleźć unmet dependencies.

Ashu
źródło
3
@Ashu Jedna rzecz może chcesz fix-- apt-get updatema nie aktualizuje apt cache (który składa się z pobranych .debplików i pliku, który przechowuje informacje o których .debpliki zapisane). Aktualizuje pliki indeksu pakietów (które zawierają informacje o tym, jakie pakiety są dostępne do pobrania i zainstalowania z każdego dostępnego źródła oprogramowania). Jak powiedziałem wcześniej, apt-get cleannie usuwa tego samego, co apt-get updateaktualizacje. Zobacz man apt-getszczegóły.
Eliah Kagan
16

W większości przypadków zainstalowanie pakietu przez aptituderozwiąże niezaspokojone zależności. Domyślny aptitudepakiet nie został zainstalowany na komputerze. Więc najpierw zainstaluj go, uruchamiając,

sudo apt-get update
sudo apt-get install aptitude

następnie,

sudo aptitude install packagename

Na przykład,

    
avinash @ avinash-Lenovo-IdeaPad-Z500: ~ $ sudo apt-get install ubuntu-sdk
Czytanie list pakietów ... Gotowe
Budowanie drzewa zależności       
Odczytywanie informacji o stanie ... Gotowe
Nie można zainstalować niektórych pakietów. Może to oznaczać, że masz
zażądał niemożliwej sytuacji lub jeśli używasz niestabilnej
dystrybucja, że ​​niektóre wymagane pakiety nie zostały jeszcze utworzone
lub został przeniesiony z Przychodzących.
Następujące informacje mogą pomóc rozwiązać problem:

Następujące pakiety mają niezaspokojone zależności:
 ubuntu-sdk: Zależy: qtcreator-plugin-ubuntu, ale nie zostanie zainstalowany
E: Nie można rozwiązać problemów, trzymałeś uszkodzone paczki.

Instalowanie pakietu przez aptitude

avinash @ avinash-Lenovo-IdeaPad-Z500: ~ $ sudo aptitude install ubuntu-sdk
Zostaną zainstalowane następujące NOWE pakiety:
  apparmor-easyprof {a} apparmor-easyprof-ubuntu {a} w {a} build-essential {a} 
  kliknij {a} click-apparmor {a} click-dev {a} click-doc {a} cordova-ubuntu-2.8 
  cordova-ubuntu-2.8-Examples {a} debhelper {a} devscripts {a} dh-apparmor {a} 
  dh-make {a} distro-info-data {a} dpkg-dev {a} dput {a} g ++ {a} g ++ - 4.8 {a} 
  geoclue-gypsy {a} libalgorithm-diff-perl {a} libalgorithm-diff-xs-perl {a} 
  libalameterm-merge-perl {a} libboost-filesystem1.53.0 {a} 
  libboost-program-options1.53.0 {a} libboost-regex1.53.0 {a} 
  libbotan-1.10-0 {a} libdee-qt5-3 {a} libdistro-info-perl {a} 
  libexporter-lite-perl {a} libglib2.0-dev {a} 
  libgstreamer-plugins-base1.0-dev {a} libgstreamer1.0-dev {a} libgypsy0 {a} 
  libhud2 {a} libio-stringy-perl {a} libjs-jquery {a} libjs-sphinxdoc {a} 
  libjs-underscore {a} liblockdev1 {a} libmail-sendmail-perl {a} 
  libparse-debcontrol-perl {a} libpcre3-dev {a} libpcrecpp0 {a} 
  libpoppler-qt5-1 {a} libqdjango-db0 {a} libqgsttools-p1 {a} 
  libqt5clucene5 {a} libqt5contacts5 {a} libqt5declarative5 {a} 
  libqt5designer5 {a} libqt5designercomponents5 {a} libqt5feedback5 {a} 
  libqt5help5 {a} libqt5location5-plugins {a} libqt5multimedia5 {a} 
  libqt5multimedia5-plugins libqt5multimediaquick-p5 {a} 
  libqt5multimediawidgets5 {a} libqt5organizer5 {a} 
  libqt5qml-graphicaleffects {a} libqt5script5 libqt5scripttools5 {a} 
  libqt5svg5 {a} libqt5svg5-dev libqt5systeminfo5 {a} libqt5v8-5-dev 
  libqt5versit5 {a} libqt5versitorganizer5 {a} libqt5webkit5-dev 
  libqt5webkit5-qmlwebkitplugin {a} libqt5xmlpatterns5 {a} 
  libqt5xmlpatterns5-dev libstdc ++ - 4.8-dev {a} libsys-hostname-long-perl {a} 
  libthumbnailer0 {a} libu1db-qt5-3 {a} libunity-action-qt1 {a} 
  libupstart-app-launch1 {a} libusermetricsinput1 {a} libxml2-dev {a} 
  libxslt1-dev {a} po-debconf {a} python3-apparmor-click {a} python3-click {a} 
  python3-magic {a} qmlscene qt3d5-dev qtbase5-doc {a} qtcreator {a} 
  qtcreator-doc {a} qtcreator-plugin-ubuntu {a} 
  qtcreator-plugin-ubuntu-common {a} qtdeclarative5-account-plugin 
  qtdeclarative5-cordova-2.8-plugin {a} qtdeclarative5-dev-tools 
  qtdeclarative5-doc-html {a} qtdeclarative5-folderlistmodel-plugin 
  qtdeclarative5-friends0.2 qtdeclarative5-localstorage-plugin 
  qtdeclarative5-cząstek-plugin qtdeclarative5-poppler1.0 
  qtdeclarative5-qtaudioengine-plugin qtdeclarative5-qtfeedback-plugin {a} 
  qtdeclarative5-qtlocation-plugin qtdeclarative5-qtmultimedia-plugin {a} 
  qtdeclarative5-qtorganizer-plugin qtdeclarative5-qtquick2-plugin {a} 
  qtdeclarative5-qtsensors-plugin qtdeclarative5-u1db1.0 
  qtdeclarative5-ubuntu-ui-extras-browser-plugin {a} 
  qtdeclarative5-ubuntu-ui-extras-browser-plugin-resources {a} 
  qtdeclarative5-ubuntu-ui-toolkit-plugin {a} 
  qtdeclarative5-unity-action-plugin {a} qtdeclarative5-usermetrics0.1 
  qtdeclarative5-window-plugin {a} qtdeclarative5-xmllistmodel-plugin 
  qtgraphicaleffects5-doc {a} qtlocation5-dev {a} qtmultimedia5-dev 
  qtmultimedia5-doc {a} qtmultimedia5-doc-html {a} qtscript5-dev 
  qtscript5-doc {a} qtscript5-doc-html {a} qtsensors5-dev {a} qtsvg5-doc {a} 
  qtsvg5-doc-html {a} qttools5-dev qttools5-dev-tools qttools5-doc {a} 
  qtwebkit5-doc-html {a} schroot {a} schroot-common {a} sqlite3 {a} 
  ubuntu-html5-container ubuntu-html5-sdk {ab} ubuntu-html5-theme {a} 
  ubuntu-html5-theme-przykłady ubuntu-sdk ubuntu-sdk-libs 
  ubuntu-sdk-libs-dev {a} ubuntu-ui-toolkit-doc {a} 
  ubuntu-ui-toolkit-Examples {a} ubuntu-ui-toolkit-theme {a} 
  unity-action-doc {a} upstart-app-launch {a} upstart-app-launch-tools {a} 
  usermetricsservice {a} wdiff {a} zlib1g-dev {a} 
Następujące pakiety zostaną zaktualizowane:
  cpp-4.8 gcc-4.8 gcc-4.8-base hud libasan0 libatomic1 libgcc-4.8-dev 
  libgcc1 libglib2.0-0 libglib2.0-bin libgomp1 libitm1 libquadmath0 
  libstdc ++ 6 libtsan0 
15 pakietów zaktualizowanych, 151 nowo zainstalowanych, 0 do usunięcia i 293 niezaktualizowanych.
Musisz uzyskać 108 MB / 126 MB archiwów. Po rozpakowaniu zostanie wykorzystane 273 MB.
Następujące pakiety mają niezaspokojone zależności:
 ubuntu-html5-sdk: Zależy: qtdeclarative5-ubuntu-webapps-api, który jest pakietem wirtualnym.
                    Zależy: ubuntu-html5-ui-toolkit, ale nie zostanie zainstalowany.
Poniższe działania rozwiążą te zależności:

     Zachowaj następujące pakiety w ich bieżącej wersji:              
1) qtcreator-plugin-ubuntu [niezainstalowany]                          
2) ubuntu-html5-sdk [niezainstalowany]                                 
3) ubuntu-sdk [niezainstalowany]                                       

     Pozostaw następujące zależności nierozwiązane:                       
4) libhud-client2 zaleca hud (= 13.10.1 + 13.10.20131014-0ubuntu1)
5) qtcreator-plugin-ubuntu-common zaleca qtcreator-plugin-ubuntu


Zaakceptować to rozwiązanie? [T / n / q /?] Y
Zostaną zainstalowane następujące NOWE pakiety:
  apparmor-easyprof {a} apparmor-easyprof-ubuntu {a} build-essential {a} 
  kliknij {a} kliknij-apparmor {a} debhelper cordova-ubuntu-2.8 {a} dh-apparmor {a} 
  dh-make {a} dpkg-dev {a} g ++ {a} g ++ - 4.8 {a} geoclue-gypsy {a} 
  libal Algorytm-diff-perl {a} libal Algorytm-diff-xs-perl {a} 
  libal algorytm-merge-perl {a} libdee-qt5-3 {a} libglib2.0-dev {a} 
  libgstreamer-plugins-base1.0-dev {a} libgstreamer1.0-dev {a} libgypsy0 {a} 
  libhud2 {a} libjs-jquery {a} libmail-sendmail-perl {a} libpcre3-dev {a} 
  libpcrecpp0 {a} libpoppler-qt5-1 {a} libqdjango-db0 {a} libqgsttools-p1 {a} 
  libqt5clucene5 {a} libqt5contacts5 {a} libqt5designer5 {a} 
  libqt5designercomponents5 {a} libqt5feedback5 {a} libqt5help5 {a} 
  libqt5location5-plugins {a} libqt5multimedia5 {a} libqt5multimedia5-plugins 
  libqt5multimediaquick-p5 {a} libqt5multimediawidgets5 {a} 
  libqt5organizer5 {a} libqt5qml-graphicaleffects {a} libqt5script5 
  libqt5scripttools5 {a} libqt5svg5 {a} libqt5svg5-dev libqt5systeminfo5 {a} 
  libqt5v8-5-dev libqt5versit5 {a} libqt5versitorganizer5 {a} 
  libqt5webkit5-dev libqt5webkit5-qmlwebkitplugin {a} libqt5xmlpatterns5 {a} 
  libqt5xmlpatterns5-dev libstdc ++ - 4.8-dev {a} libsys-hostname-long-perl {a} 
  libthumbnailer0 {a} libu1db-qt5-3 {a} libunity-action-qt1 {a} 
  libupstart-app-launch1 {a} libusermetricsinput1 {a} libxml2-dev {a} 
  libxslt1-dev {a} po-debconf {a} python3-apparmor-click {a} python3-click {a} 
  qmlscene qt3d5-dev qtdeclarative5-account-plugin 
  qtdeclarative5-cordova-2.8-plugin {a} qtdeclarative5-dev-tools 
  qtdeclarative5-folderlistmodel-plugin qtdeclarative5-friends0.2 
  qtdeclarative5-localstorage-plugin qtdeclarative5-cząstek-plugin 
  qtdeclarative5-poppler1.0 qtdeclarative5-qtaudioengine-plugin 
  qtdeclarative5-qtfeedback-plugin {a} qtdeclarative5-qtlocation-plugin 
  qtdeclarative5-qtmultimedia-plugin {a} qtdeclarative5-qtorganizer-plugin 
  qtdeclarative5-qtquick2-plugin {a} qtdeclarative5-qtsensors-plugin 
  qtdeclarative5-u1db1.0 qtdeclarative5-ubuntu-ui-extras-browser-plugin {a} 
  qtdeclarative5-ubuntu-ui-extras-browser-plugin-resources {a} 
  qtdeclarative5-ubuntu-ui-toolkit-plugin {a} 
  qtdeclarative5-unity-action-plugin {a} qtdeclarative5-usermetrics0.1 
  qtdeclarative5-window-plugin {a} qtdeclarative5-xmllistmodel-plugin 
  qtlocation5-dev {a} qtmultimedia5-dev qtscript5-dev qtsensors5-dev {a} 
  qttools5-dev qttools5-dev-tools sqlite3 {a} ubuntu-html5-container 
  ubuntu-html5-theme {a} ubuntu-html5-theme-Examples ubuntu-sdk-libs 
  ubuntu-ui-toolkit-theme {a} upstart-app-launch {a} 
  upstart-app-launch-tools {a} usermetricsservice {a} wdiff {a} zlib1g-dev {a} 
Następujące pakiety zostaną zaktualizowane:
  cpp-4.8 gcc-4.8 gcc-4.8-base hud libasan0 libatomic1 libgcc-4.8-dev 
  libgcc1 libglib2.0-0 libglib2.0-bin libgomp1 libitm1 libquadmath0 
  libstdc ++ 6 libtsan0 
15 pakietów zaktualizowanych, 108 nowo zainstalowanych, 0 do usunięcia i 293 niezaktualizowanych.
Potrzebujesz uzyskać 27,1 MB / 45,8 MB archiwów. Po rozpakowaniu zostanie wykorzystane 104 MB.
Czy chcesz kontynuować? [T / n /?]
Avinash Raj
źródło
Twój przykład ma po prostu zdolność zatrzymywania instalacji. W rzeczywistości nic nie instaluje.
kiri
2
@AvinashRaj, ... ale przed instalacją aptitudenie należy rozwiązać problemu zależności?
dokładnie
tak, w większości przypadków rozwiązuje to zależności.
Avinash Raj
2
Mam na myśli to, że jeśli system ma zepsute pakiety, nie zezwala na nowe instalacje, dopóki nie zostanie to naprawione. Jak więc zainstalować aptitudebez rozwiązania problemu!
dokładnie
w takim przypadku najpierw musimy rozwiązać uszkodzone pakiety, w przeciwnym razie nie będzie można zainstalować. aptitudeJeśli nie wystąpił błąd z powodu uszkodzonych pakietów, możesz zainstalować aptitude.
Avinash Raj
11

Moja odpowiedź jest podobna do powyższej odpowiedzi Ricka.

Korzystanie apt-get clean, apt-get autoclean, apt-get autoremove, apt-get upgrade, apt-get update, apt-get -u dist-upgrade, itd. Wszystko nie działa dla mnie.

W końcu rozwiązałem ten problem, schodząc do drzewa zależności poprzez apt-get install, zilustrowane poniższym przykładem. W moim przypadku chciałem zainstalować libmagickwand-dev:

apt-get install libmagickwand-dev

Mam ten błąd:

The following packages have unmet dependencies:
 libmagickwand-dev : Depends: libmagickcore4-extra (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed
                     Depends: libmagickcore-dev (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed

Pobiegłem apt-get installpo jedną z wadliwych zależności:

apt-get install libmagickcore-dev

The following packages have unmet dependencies:
 libmagickcore-dev : Depends: libmagickcore4-extra (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed
                     Depends: libgraphviz-dev but it is not going to be installed

Zszedłem w dół drzewa:

apt-get install libgraphviz-dev

z innym błędem:

The following packages have unmet dependencies:
 libgraphviz-dev : Depends: libgvc5 (= 2.26.3-10ubuntu1) but it is not going to be installed

Jeszcze raz w głąb drzewa:

apt-get install libgvc5

Z jakiegoś dziwnego powodu to się udało i udało mi się zainstalować oryginalny pakiet, który chciałem apt-get install libmagickwand-dev:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libcdt4 libgd2-xpm libgraph4 libpathplan4
Suggested packages:
  libgd-tools
The following NEW packages will be installed:
  libcdt4 libgd2-xpm libgraph4 libgvc5 libpathplan4
0 upgraded, 5 newly installed, 0 to remove and 2 not upgraded.
Need to get 808 kB of archives.
After this operation, 2,320 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Michael Franzl
źródło
8

Doskonałe odpowiedzi! Ale dzisiaj moja sprawa wydaje się inna niż twoja. Oto moja rada.

Problem:

Nie udało mi się zainstalować apache2 w Ubuntu 10.10.

rick@wen-VirtualBox:~$ sudo apt-get install apache2

Reading package lists... Done

Building dependency tree      

Reading state information... Done

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

The following information may help to resolve the situation:

The following packages have unmet dependencies:

 apache2 : Depends: apache2-mpm-worker (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-prefork (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-event (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-itk (= 2.2.16-1ubuntu3) but it is not going to be installed

           Depends: apache2.2-common (= 2.2.16-1ubuntu3) but it is not going to be installed

E: Broken packages

Rozwiązanie:

Mój sposób polega na dodaniu zależnego pakietu do listy instalacji.

Jeśli „sudo apt-get install apache2” nie powiodło się, spróbuj „ sudo apt-get install apache2 apache2.2-common ”.

Widzieć? Apache2.2-common pochodzi z dziennika błędów poprzedniego kroku.

W końcu odkryłem, że istnieje taki łańcuch zależności:

 apache2.2-common <-- apache2.2-bin <-- libaprutil1-ldap <-- libaprutil1

W przypadku pierwszych 3 pakietów apt-get log powiedział mi, że „nie będzie instalowany”,

ale w przypadku ostatniego pakietu pokazuje „libaprutil1-ldap: Zależy: libaprutil1 (= 1.3.9 + dfsg-3build1), ale należy zainstalować 1.3.9 + dfsg-3ubuntu0.10.10.1”

Mam inną wersję istniejącą w mojej bibliotece, więc:

sudo apt-get remove libaprutil1

sudo apt-get install apache2

Teraz jest ok.

stóg
źródło
Połączona Lektura tej odpowiedzi, a drugi nad tutaj daje lepsze zrozumienie tego, co jest kwestią zależność. Gdy inne odpowiedzi tutaj zawierają „wysoce uogólnione” ROZWIĄZANIA, zapewnia to ROZUMIENIE.
VenkiPhy6,
7

czym są niezaspokojone zależności Błąd

Pakiety Ubuntu to podstawowy sposób, w jaki oprogramowanie jest budowane, wdrażane i instalowane. Bardzo prosto, pakiety są alternatywą dla pobierania, budowania i instalowania oprogramowania od zera. Oferują wiele zalet w zakresie instalacji, usuwania, monitorowania i obsługi interakcji między elementami oprogramowania w porównaniu ze standardowym modelem „build from source”. Ubuntu korzysta ze scentralizowanego systemu pakowania, to znaczy każdy pakiet jest zależny od niektórych innych pakietów. Kiedy instalujemy pakiet, jego zależności zostaną zainstalowane, błąd niezaspokojonych zależności występuje, gdy zależności pakietu nie są dostępne do instalacji

Możliwe przyczyny

1.Computer is not connected to the Internet
2.The repository containing the depandancy package is not enabled
3.Package catalog is not updated
4.The version of the depandancy in the current repository is old
5.Software index is broken
6.The depandancy is not available for ubuntu

Spróbujmy go rozwiązać

  1. Połącz z Internetem: D
  2. Upewnij się, że wszystkie domyślne repozytoria są włączone

    -> Możesz łatwo dodać je w Software Center-> Edytuj-> Źródła oprogramowania-> Inne źródła-> Dodaj „

    -> Uruchom Software Center.

    ->. W panelu przejdź do Editi wybierz Software Sources.

    edytuj źródła oprogramowania

    -> Upewnij się, że wszystkie repozytoria są zaznaczone wprowadź opis zdjęcia tutaj

  3. Zaktualizuj katalog oprogramowania

    kliknij ikonę w prawym górnym rogu i wybierz z menu wpis dostępny do aktualizacji
    wprowadź opis zdjęcia tutaj

i naciśnij przycisk wyboru wprowadź opis zdjęcia tutaj

4.typ ctrl+ alt+, taby otworzyć terminal i wpisać sudo apt-get install -f

5. Wyczyść ostatnio dodane ppa za pomocą ppa-purge ppa-purge Zainstaluj ppa-purge

Ten program wyłącza PPA ze źródeł oprogramowania i przywraca system z powrotem do oficjalnych pakietów Ubuntu. Możesz użyć tego, aby przywrócić system do normalnego stanu po przetestowaniu nowej wersji z PPA.

Składnia

sudo ppa-purge ppa:<repository-name>/<subdirectory>

Przykład

sudo ppa-purge ppa:ubuntu-mozilla-daily/ppa
  1. otwórz centrum oprogramowania i spróbuj zainstalować dowolne oprogramowanie. Jeśli pojawi się następujące okno dialogowe, naciśnij przycisk naprawy i poczekaj

wprowadź opis zdjęcia tutaj

Ponownie wpisz ctrl+ alt+, taby otworzyć terminal, wpisz sudo apt-get install -fi postępuj zgodnie z instrukcjami wyświetlanymi na ekranie

Jeśli nadal występuje błąd, możesz go zapytać w askbuntu

Tachyony
źródło
@ jrg Mam to już w swojej odpowiedzi ... czy każda odpowiedź musi mieć to samo?
Ashu
2
@Ashu Próbuję pomóc ludziom w udzieleniu kanonicznej odpowiedzi - i muszę powiedzieć wszystkim , ponieważ w grę wchodzi nagroda za 500 powtórzeń i nie chcę grać w ulubione, pomagając niektórym ludziom w odpowiedziach, ale ignorując inne . : s
jrg
5

... nie zapomnij o `build-dep`

Oprócz powyższych odpowiedzi - muszę przyznać, że jestem zaskoczony, że nikt nie wspomniał o tym podejściu, które zawsze stosowałem jako „srebrną kulę” w dowolnym momencie, w którym napotykałem konflikty apt-get lub nierozwiązane pakiety (a nawet jeśli system jest uparty ... ha!).

EDYCJA: sudo dpkg -r [package]zalecane jest używanie, ponieważ ma dość potężną funkcję usuwania. Ponieważ apt-getdziała obok dpkg, co oznacza, że apt-getbędzie posłuszny dpkgfunkcji.

  sudo dpkg -r [package]
  sudo apt-get build-dep [package]  
  ## pre-install all deps for the package

Wywołujesz apt-get, aby usunąć nieudany pakiet, który próbujesz zainstalować w systemie, a następnie wywołujesz komendę build-dep, która apt-get pobierze i zainstaluje zależności indywidualnie należące do tego pakietu, aby w ten sposób spełnić paczka wcześniej. Następnie w końcu wywołaj apt-get install:

sudo apt-get install [package]

.... „Ugh! Obróćmy rękę, aż krzykniesz „Wujek!”

To rzadko zdarzało się podczas moich długich lat używania Linuksa, ale rzadko stosowałem to podejście i odniosłem sukces. To jest przykład ostatniej walki, którą miałem miesiąc temu z pakietami mysql-client/mysql-server. Po kilkunastu nieudanych próbach zresetowania hasła roota za pomocą mysql-server (nawet przez --skip-grant-tables techqiue, ale jeszcze nie powiodło się), w końcu udało mi się „skręcić ramię Linuksa, aż krzyknęło„ Wujek! ”:

sudo dpkg -r mysql-server mysql-client
sudo apt-get autoclean  
## this dumps any copy of existing package to prevent apt-get from "re-using" it.
sudo apt-get build-dep mysql-client   
 ## one package at a time, starting with client first
sudo apt-get install mysql-client
sudo apt-get build-dep mysql-server
sudo apt-get install mysql-server

apt-get autoclean jest kluczem do tego rozwiązania

Faron
źródło
3

Podczas instalacji pakietów i386 w 64-bitowych systemach Ubuntu Multiarch

Jeśli próbujesz zainstalować pakiet, który zależy od wielu pakietów i386, powyższy błąd zależności może również wystąpić, jeśli nie dodasz architektury i386 przez uruchomienie sudo dpkg --add-architecure i386polecenia.

Przykład:

avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo apt-get install skype
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 skype : Depends: skype-bin but it is not installable
E: Unable to correct problems, you have held broken packages.
avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo dpkg --add-architecture i386
avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo apt-get install skype
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libasound2:i386 libasound2-plugins:i386
  libasyncns0:i386 libaudio2:i386 libavahi-client3:i386
  libavahi-common-data:i386 libavahi-common3:i386 libc6:i386
  libcgmanager0:i386 libcomerr2:i386 libcups2:i386 libdbus-1-3:i386
  libdbusmenu-qt2:i386 libdrm-intel1:i386 libdrm-nouveau2:i386
  libdrm-radeon1:i386 libdrm2:i386 libelf1:i386 libexpat1:i386 libffi6:i386
  libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgcc1:i386
  libgcrypt11:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
  libglapi-mesa:i386 libglib2.0-0:i386 libgnutls26:i386 libgpg-error0:i386
  libgssapi-krb5-2:i386 libgstreamer-plugins-base1.0-0:i386
  libgstreamer1.0-0:i386 libice6:i386 libjack-jackd2-0:i386 libjbig0:i386
  libjpeg-turbo8:i386 libjpeg8:i386 libjson-c2:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libllvm3.4:i386
  liblzma5:i386 libmysqlclient18:i386 libnih-dbus1:i386 libnih1:i386
  libogg0:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpciaccess0:i386
  libpcre3:i386 libpng12-0:i386 libpulse0:i386 libqt4-dbus:i386
  libqt4-declarative:i386 libqt4-network:i386 libqt4-opengl:i386
  libqt4-script:i386 libqt4-sql:i386 libqt4-sql-mysql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtdbus4:i386 libqtgui4:i386
  libqtwebkit4:i386 libsamplerate0:i386 libselinux1:i386 libsm6:i386
  libsndfile1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl1.0.0:i386
  libstdc++6:i386 libtasn1-6:i386 libtiff5:i386 libtinfo5:i386
  libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386 libvorbis0a:i386
  libvorbisenc2:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386
  libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
  libxfixes3:i386 libxi6:i386 libxml2:i386 libxrender1:i386 libxshmfence1:i386
  libxslt1.1:i386 libxss1:i386 libxt6:i386 libxv1:i386 libxxf86vm1:i386
  mysql-common skype-bin:i386 sni-qt:i386 zlib1g:i386
Suggested packages:
  nas:i386 glibc-doc:i386 locales:i386 rng-tools:i386 libglide3:i386
  gnutls-bin:i386 krb5-doc:i386 krb5-user:i386 libvisual-0.4-plugins:i386
  gstreamer-codec-install:i386 gnome-codec-install:i386
  gstreamer1.0-tools:i386 gstreamer1.0-plugins-base:i386 jackd2:i386
  pulseaudio:i386 libqt4-declarative-folderlistmodel:i386
  libqt4-declarative-gestures:i386 libqt4-declarative-particles:i386
  libqt4-declarative-shaders:i386 qt4-qmlviewer:i386 libqt4-dev:i386
  libicu48:i386 libthai0:i386 qt4-qtconfig:i386
Recommended packages:
  xml-core:i386
The following NEW packages will be installed:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libasound2:i386 libasound2-plugins:i386
  libasyncns0:i386 libaudio2:i386 libavahi-client3:i386
  libavahi-common-data:i386 libavahi-common3:i386 libc6:i386
  libcgmanager0:i386 libcomerr2:i386 libcups2:i386 libdbus-1-3:i386
  libdbusmenu-qt2:i386 libdrm-intel1:i386 libdrm-nouveau2:i386
  libdrm-radeon1:i386 libdrm2:i386 libelf1:i386 libexpat1:i386 libffi6:i386
  libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgcc1:i386
  libgcrypt11:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
  libglapi-mesa:i386 libglib2.0-0:i386 libgnutls26:i386 libgpg-error0:i386
  libgssapi-krb5-2:i386 libgstreamer-plugins-base1.0-0:i386
  libgstreamer1.0-0:i386 libice6:i386 libjack-jackd2-0:i386 libjbig0:i386
  libjpeg-turbo8:i386 libjpeg8:i386 libjson-c2:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libllvm3.4:i386
  liblzma5:i386 libmysqlclient18:i386 libnih-dbus1:i386 libnih1:i386
  libogg0:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpciaccess0:i386
  libpcre3:i386 libpng12-0:i386 libpulse0:i386 libqt4-dbus:i386
  libqt4-declarative:i386 libqt4-network:i386 libqt4-opengl:i386
  libqt4-script:i386 libqt4-sql:i386 libqt4-sql-mysql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtdbus4:i386 libqtgui4:i386
  libqtwebkit4:i386 libsamplerate0:i386 libselinux1:i386 libsm6:i386
  libsndfile1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl1.0.0:i386
  libstdc++6:i386 libtasn1-6:i386 libtiff5:i386 libtinfo5:i386
  libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386 libvorbis0a:i386
  libvorbisenc2:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386
  libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
  libxfixes3:i386 libxi6:i386 libxml2:i386 libxrender1:i386 libxshmfence1:i386
  libxslt1.1:i386 libxss1:i386 libxt6:i386 libxv1:i386 libxxf86vm1:i386
  mysql-common skype skype-bin:i386 sni-qt:i386 zlib1g:i386
0 upgraded, 115 newly installed, 0 to remove and 7 not upgraded.
Need to get 63.7 MB of archives.
After this operation, 225 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Avinash Raj
źródło
Zgadzam się, że może to być jedna z możliwych przyczyn. kiedy próbowałem zainstalować jakiś inny pakiet (na przykład vlc) po zainstalowaniu skype i otrzymałem niezaspokojoną zależność. Wyszłam z podobnej sytuacji, dodając :amd64na końcu nazwy pakietu, który powoduje błąd. jak wyzdrowiałeś? jakie byłoby najlepsze rozwiązanie?
souravc
Nie jestem pewien, dlaczego zostało to odrzucone. Właśnie tego potrzebowałem, aby zainstalować 32-bitowe Wine. BTW, masz literówkę w --add-architecture, i powinieneś dodać przypomnienie, aby uruchomić aktualizację apt-get po --add-architecture.
Matt Chambers,
1

Po wypróbowaniu blisko każdej metody wymienionej w tym wątku (i innych) byłem bliski poddania się. Uaktualniłem mojego Debiana Lenny'ego do Squeeze i przez całe życie nie mogłem dowiedzieć się, dlaczego PHP5, Apache, MySQL itp. Nie chcą instalować. W końcu próbowałem użyć

sudo apt-get purge apache2
sudo apt-get purge php5
sudo apt-get purge mysql-server
sudo apt-get clean
sudo apt-get autoremove
sudo apt-get install apache2 php5 mysql-server

..i działało bezbłędnie! ( Uwaga, może to zniszczyć pliki konfiguracyjne, więc wykonaj ich kopię zapasową! )

h2ooooooo
źródło
Nie rozwiązuje to problemu, jeśli nie masz zainstalowanych wymienionych pakietów.
Braiam
1

Dla mnie działało ponowne zainstalowanie zależności. Jest tak w przypadku, gdy zainstalowana wersja jest nowsza niż najnowsza (co pokazuje synaptic). W rzeczywistości jest to równoważne zezwalaniem synaptic na obniżenie pakietu zależności.

Kolejną rzeczą, która działała, jest użycie „aptitude”:

root@arau:~# aptitude install libgfortran3
The following NEW packages will be installed:
  libgfortran3{b} 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 250 kB of archives. After unpacking 1 230 kB will be used.
The following packages have unmet dependencies:
 libgfortran3 : Depends: gcc-4.8-base (= 4.8.2-19ubuntu1) but 4.8.4-2ubuntu1~14.04 is installed.
Internal error: found 2 (choice -> promotion) mappings for a single choice.
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     libgfortran3 [Not Installed]                       



Accept this solution? [Y/n/q/?] n
Internal error: found 2 (choice -> promotion) mappings for a single choice.
Internal error: found 2 (choice -> promotion) mappings for a single choice.
The following actions will resolve these dependencies:

      Downgrade the following packages:                                        
1)      cpp-4.8 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
2)      gcc-4.8 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
3)      gcc-4.8-base [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]  
4)      libasan0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      
5)      libatomic1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]    
6)      libgcc-4.8-dev [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]
7)      libgomp1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      
8)      libitm1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
9)      libquadmath0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]  
10)     libstdc++6 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]    
11)     libtsan0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      

Accept this solution? [Y/n/q/?] y
Bob Yoplait
źródło
to nic nowego w zasadzie to samo, co możesz wycofać z najwyżej ocenianej odpowiedzi tutaj i
następnej
1
tak, ale istnieje mnóstwo rozwiązań, po prostu wspominam, co dla mnie zadziałało.
Bob Yoplait,
0

Jeśli pojawia się taki błąd:
wprowadź opis zdjęcia tutaj

Oznacza to, że pakiety są już zainstalowane, ale nie zainstalowało wszystkich innych pakietów, które muszą działać. Powinieneś być w stanie rozwiązać ten problem, uruchamiając to:

sudo apt-get -f install

(To polecenie powinno automatycznie zainstalować niezaspokojone zależności).

lub coś takiego (z odpowiednimi pakietami) :

sudo apt-get install click curl dpkg-dev python-lzma python-requests imagemagick ubuntu-dev-tools

Ale jeśli dojdzie do tego rodzaju błędu: nie można zainstalować pakietu / pakiet nie jest dostępny / brak kandydata do instalacji itp

Następnie możesz wyszukać sposoby ich zainstalowania tutaj lub tutaj .
W powyższym przykładzie powinno być możliwe znalezienie strony takiej jak ta , a następnie skorzystanie z PPA lub zainstalowanie pliku .deb dla wersji 32-bitowej lub .deb dla wersji 64-bitowej .

Wilf
źródło