Проблема з менеджером оновлень: у Ubuntu 13.10 не встановлено модуля з назвою 'apt_pkg', встановивши Python 3.4 on / usr / local / lib


31

Я досить новачок у Ubuntu і намагаюся запустити менеджер оновлень на Ubuntu 13.10. Я отримав:

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'

Наскільки я зрозумів, це проблема, пов’язана з тим, що у мене повинен бути встановлений python3.4. Я встановив його /usr/local/lib, але я завжди отримую ту саму помилку. Таким чином я не можу навіть оновити до Ubuntu 14.04.

Відповіді:


34

Перевстановити apt_pkgза допомогою:

sudo apt-get install --reinstall python3-apt

Помилка в першу чергу через apt_pkg.cpython-35m-x86_64-linux-gnu.soвідсутність бібліотеки в /usr/lib/python3/dist-packages.

Видалення та перевстановлення повинно допомогти.


14
Практично завжди бажано перевстановити пакет за один крок, використовуючи sudo apt install --reinstall <package-name>, оскільки це дозволяє уникнути обчислення та видалення залежностей (та маркування пакетів для видалення). Майте на увазі, що видалення пакетів не завжди є оборотною процедурою; наприклад, APT видалить себе або свої залежності, якщо його попросять! Тому --reinstallпрапор набагато безпечніший, ніж removeза ним install. removeКоманда сама по собі не видаляє файли конфігурації пакета , так не має ніяких переваг по порівнянні install --reinstall.
Занна

4
Цю відповідь слід доповнити пропозицією @Zanna, якщо видалення python3-apt усуне тону залежностей і може відлякати лайно когось, не кажучи вже про зіпсування їхньої системи.
алканен

Отже, видаліть apt-пакунок, sudo dpkg -r --force-depends apt-packageзамість якого видаляється лише apt-пакет, але не будь-яка його залежність.
карел

12

для мене спрацювали наступні кроки:

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

оригінальне рішення тут: /programming/13708180/python-dev-installation-error-importerror-no-module-named-apt-pkg/36232975#36232975


1
Як вже зазначалося в коментарі по на «оригінальне рішення» для мене це спрацювало: sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so. Версія 35(python 3.5) встановлюється незалежно від конкретної під-версії python 3.x, яку ви працюєте. Спасибі!
fwc

7
update-alternatives  --set python3  /usr/bin/python3.6

3
Оновлення альтернатив для python іноді може порушити ситуацію.
Kulfy

1
Я використовував update-alternatives --set python3 /usr/bin/python3.5і це спрацювало. python3 вже вказував python3.6на мою систему.
Дезік

2

Якщо ви намагаєтесь оновити 13.10 до 14.04, спробуйте дотримуватися цих інструкцій . Якщо ви просто намагаєтесь оновити поточну систему з командного рядка, відкрийте термінал і введіть наступне:

sudo apt-get update
sudo apt-get dist-upgrade

Спасибі. Я вже намагався, але не вийшло. Я ще раз спробував отримати, після оновлення apt-get, попередження W: Не вдалося отримати bzip2: /var/lib/apt/lists/partial/it.archive.ubuntu.com_ubuntu_dists_saucy-updates_main_source_Sources Hash Sum
user291925

K - у вас проблема з джерелами оновлення. Я бачив кілька тем про те, як виправити, що наступне посилання, здається, добре відповідає вашому питанню askubuntu.com/questions/41605/…
Чарльз Грін

Спасибі! Я спробував, але я все одно отримую таку ж помилку при запускуupdate-manager
user291925

К - що стосується вичерпання моїх можливостей з більш розширеного веб-пошуку. Удачі!
Чарльз Грін

2

Мені вдалося вирішити цю проблему шляхом копіювання apt_pkg.cpython-34m-i386-linux-gnu.soна /usr/lib/python3/dist-packages/інший робочому стіл під управлінням Ubuntu 14.04 LTS. Я спробував майже всі можливості, знайдені через Інтернет, наприклад, очищення установки python, а потім перевстановлення, очищення пошкоджених файлів оновлення тощо, але в результаті не вдалося.


1

На всякий випадок, якщо це допомагає іншому, я нарешті вирішив цю проблему, яка, очевидно, була викликана конфліктами версії python, перенаправляючи посилання python3, а потім перенаправляючи його на правильну версію python:

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

Можливо, вам доведеться ввести правильну версію python, знайдену в

python3 -V

Отже, ви видалили одну версію для 3.4?
IggyPass

Спробував це і виявив, що погіршує ситуацію . Не можу рекомендувати.
MERose

1

Лише порада: я уникаю встановлення "мого" python на / usr / local, але у мене є один виділений каталог на версію python (наприклад, в / opt), і я використовую віртуальне середовище в своєму обліковому записі користувача, щоб використовувати потрібний мені python, який активується моїм .profile

При такому підході ви завжди уникатимете змінювати очікувану конфігурацію та залежності системи python.

Ну, я знаю, для вашого випадку вже пізно, але ...


1

Проблема для мене полягала в тому, що я встановив python3.7 поруч із python3.6 і зробив це за замовчуванням.

Я вручну запускаю таку команду:

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

тому python3 тепер вказує на правильну версію python ... що вирішує проблему.


1
Я також зіткнувся з проблемою, тому що я оновив python3.7 в Ubuntu 18. Але коли я зробив те, що ви зробили (створити символічне посилання), я отримав ln: failed to create symbolic link '/usr/bin/python3': File exists. Якщо я lsна мою /usr/bin/python*, у мене є python3, python3.6, python3.6m, python3.7, python3.7mі python3m. Якщо я sudo update-alternatives --config python3, у мене є *0 /usr/bin/python3.7 2 auto mode, 1 /usr/bin/python3.6 1 manual modeі 2 /usr/bin/python3.7 2 manual mode. Дякую.
користувач1330974

можливо, вам потрібно буде видалити файл посилання, який вже існує, або перейменувати його на .old і створити своє власне посилання.
М.Гефні

@ user1330974 Ви нарешті вирішили проблему? Я зіткнувся з тим же питанням
dallonsi

1
@ user1330974 Мабуть, просто змусивши символічне посилання спрацювало:ln -sf /usr/bin/python3.6 /usr/bin/python3
dallonsi

1
@dallonsi Дякую Я не розглядав це далі, але буду використовувати ваш підхід. :)
користувач1330974
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.