Problem z menedżerem aktualizacji: Brak modułu o nazwie „apt_pkg” w Ubuntu 13.10, po zainstalowaniu Pythona 3.4 na / usr / local / lib

31

Jestem raczej nowy w Ubuntu i próbuję uruchomić menedżera aktualizacji na Ubuntu 13.10. Dostaję:

jacopo@jacopo-laptop:~$ update-manager 
Traceback (most recent call last):
  File "/usr/bin/update-manager", line 28, in <module>
    from gi.repository import Gtk
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 27, in <module> from ._gi import _API
ImportError: No module named 'gi._gi'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 64, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 20, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 21, in <module>
import apt_pkg
ImportError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
File "/usr/bin/update-manager", line 28, in <module>
from gi.repository import Gtk
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 27, in <module>
from ._gi import _API
ImportError: No module named 'gi._gi'

O ile rozumiem, jest to problem związany z faktem, że powinienem mieć zainstalowany Python3.4. Zainstalowałem go /usr/local/lib, ale zawsze pojawia się ten sam błąd. W ten sposób nie mogę nawet zaktualizować do Ubuntu 14.04.

użytkownik291925
źródło

Odpowiedzi:

34

Zainstaluj ponownie, apt_pkgużywając:

sudo apt-get install --reinstall python3-apt

Błąd wynika głównie z apt_pkg.cpython-35m-x86_64-linux-gnu.sobraku biblioteki w /usr/lib/python3/dist-packages.

Usunięcie i ponowne zainstalowanie powinno pomóc.

Vikas Kapdoskar
źródło
14
Prawie zawsze lepiej jest ponownie zainstalować pakiet w jednym kroku sudo apt install --reinstall <package-name>, ponieważ pozwala to uniknąć obliczania i usuwania zależności (i oznaczania pakietów do usunięcia). Należy pamiętać, że usuwanie pakietów nie zawsze jest odwracalną procedurą; na przykład APT usunie siebie lub swoje zależności, jeśli zostanie o to poproszony! --reinstallFlaga jest zatem znacznie bezpieczniejsze niż removenastępuje install. Samo removepolecenie nie usuwa plików konfiguracyjnych pakietu, więc nie ma żadnej przewagi install --reinstall.
Zanna,
4
Ta odpowiedź powinna zostać zaktualizowana zgodnie z sugestią @Zanna, usunięcie python3-apt usunie mnóstwo zależności i może przestraszyć kogoś do bzdur, nie wspominając o zepsuciu systemu.
alkanen
Więc odinstaluj apt-package, sudo dpkg -r --force-depends apt-packagektóry zamiast tego odinstalowuje tylko apt-package, ale nie jego zależności.
karel
12

dla mnie zadziałały następujące kroki:

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so

oryginalne rozwiązanie jest tutaj: /programming/13708180/python-dev-installation-error-importerror-no-module-named-apt-pkg/36232975#36232975

Olimjon Ibragimov
źródło
1
Jak wspomniano w komentarzu nad na „oryginalnego rozwiązania” dla mnie to działa: sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so. Wersja 35(python 3.5) jest zainstalowana niezależnie od konkretnej pod-wersji python 3.x, którą używasz. Dzięki!
fwc
7
update-alternatives  --set python3  /usr/bin/python3.6
v12aml
źródło
3
Aktualizowanie alternatyw dla Pythona może czasem coś zepsuć.
Kulfy
1
Użyłem update-alternatives --set python3 /usr/bin/python3.5i zadziałało. python3 już wskazywał python3.6na mój system.
Desik
2

Jeśli próbujesz zaktualizować wersję 13.10 do 14.04, spróbuj wykonać te instrukcje . Jeśli próbujesz tylko zaktualizować obecny system z wiersza polecenia, otwórz terminal i wpisz następujące polecenie:

sudo apt-get update
sudo apt-get dist-upgrade
Charles Green
źródło
Dzięki. Próbowałem już, ale to nie zadziałało. Spróbowałem jeszcze raz, otrzymując, po aktualizacji apt-get, ostrzeżenie W: Nie udało się pobrać bzip2: /var/lib/apt/lists/partial/it.archive.ubuntu.com_ubuntu_dists_saucy-updates_main_source_Sources Niezgodność sumy skrótu
291925
K - masz problem ze źródłami aktualizacji. Widziałem kilka wątków na temat tego, jak to naprawić Poniższy link wydaje się pasować do twojego pytania askubuntu.com/questions/41605/...
Charles Green
Dzięki! Próbowałem, ale nadal pojawia się ten sam błąd podczas działaniaupdate-manager
user291925
K - to o wyczerpaniu moich możliwości bez szerszego wyszukiwania w sieci. Powodzenia!
Charles Green,
2

Udało mi się rozwiązać ten problem poprzez kopiowanie apt_pkg.cpython-34m-i386-linux-gnu.sodo /usr/lib/python3/dist-packages/innego komputera z systemem Ubuntu 14.04 LTS. Próbowałem prawie wszystkich możliwości, jakie można znaleźć w Internecie, takich jak czyszczenie instalacji Pythona, a następnie ponowna instalacja, czyszczenie uszkodzonych plików aktualizacji itp., Ale zakończyło się to bez powodzenia.

Renju chingath
źródło
1

Na wypadek, gdyby to pomogło innej, w końcu rozwiązałem ten problem, który najwyraźniej był spowodowany konfliktami wersji Pythona, przekierowując link python3, a następnie przekierowując go do właściwej wersji Pythona:

sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.4

Może być konieczne wprowadzenie poprawnej wersji języka Python, znalezionej za pomocą

python3 -V
matthias2t
źródło
Więc usunąłeś jedną wersję dla 3.4?
IggyPass
Próbowałem tego i odkryłem, że pogorszy to sytuację . Nie mogę polecić.
MERose
1

Wskazówka: unikam instalowania „mojego” Pythona na / usr / local, ale mam jeden dedykowany katalog dla każdej wersji Pythona (np. W / opt) i używam środowisk wirtualnych na moim koncie użytkownika, aby użyć potrzebnego mi pytona, który jest aktywowany przez mój .profile

Dzięki takiemu podejściu zawsze będziesz unikać zmiany oczekiwanej konfiguracji i zależności systemu python.

Wiem, że jest za późno na twoją sprawę, ale ...

Michael Hooreman
źródło
1

Problemem było to, że zainstalowałem python3.7 obok python3.6 i ustawiłem go jako domyślny.

Ręcznie uruchamiam następujące polecenie:

ln -s /usr/bin/python3.6  /usr/bin/python3

więc python3 wskazuje teraz na poprawną wersję pytona ... która rozwiązuje problem.

M.Hefny
źródło
1
Mam również do czynienia z tym problemem, ponieważ zaktualizowałem system do python3.7 w Ubuntu 18. Ale kiedy robię to, co zrobiłeś (tworzyłem dowiązanie symboliczne), dostałem ln: failed to create symbolic link '/usr/bin/python3': File exists. Jeśli robię lsw moim /usr/bin/python*Mam python3, python3.6, python3.6m, python3.7, python3.7mi python3m. Jeśli to zrobię sudo update-alternatives --config python3, muszę *0 /usr/bin/python3.7 2 auto mode, 1 /usr/bin/python3.6 1 manual modei 2 /usr/bin/python3.7 2 manual mode. Dziękuję Ci.
user1330974,
być może musisz usunąć plik linku już istnieje lub zmień jego nazwę na .old i utwórz własny link.
M.Hefny
@ user1330974 czy w końcu rozwiązałeś problem? Mam do czynienia z tym samym problemem
dallonsi,
1
@ user1330974 najwyraźniej tylko wymuszenie dowiązania symbolicznego zadziałało:ln -sf /usr/bin/python3.6 /usr/bin/python3
dallonsi
1
@dallonsi Dziękuję. Nie zagłębiałem się w to, ale wykorzystam twoje podejście. :)
user1330974