Проблема с менеджером обновлений: в Ubuntu 13.10 нет модуля с именем «apt_pkg», поскольку Python 3.4 установлен в / usr / local / lib

29

Я довольно новичок в 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.

user291925
источник

Ответы:

32

Переустановите 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 приведет к удалению множества зависимостей и может напугать кого-то до чертиков, не говоря уже о том, чтобы испортить их систему.
алканен
Поэтому sudo dpkg -r --force-depends apt-packageвместо этого удалите apt-package, который удаляет только apt-package, но не любые его зависимости.
Карел
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
6
update-alternatives  --set python3  /usr/bin/python3.6
v12aml
источник
3
Обновление альтернатив для Python может иногда что-то сломать.
Кульфи
1
Я использовал, update-alternatives --set python3 /usr/bin/python3.5и это сработало. Python3 уже указывал python3.6на мою систему.
Desik
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 Несоответствие хэш-суммы
user291925
K - у вас проблема с источниками обновлений. Я видел несколько веток о том, как это исправить. Следующая ссылка, кажется, подходит для вашего вопроса askubuntu.com/questions/41605/…
Charles Green
Благодарность! Я пытался, но я все еще получаю ту же ошибку при запускеupdate-manager
user291925
K - это исчерпывает мои возможности без более обширного поиска в сети. Удачи!
Чарльз Грин
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
matthias2t
источник
Так вы удалили одну версию для 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 ... которая решает проблему.

M.Hefny
источник
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. Спасибо.
user1330974
может быть, вам нужно удалить уже существующий файл ссылки или переименовать его в .old и создать свою собственную ссылку.
Хефни
@ user1330974 ты наконец решил проблему? Я сталкиваюсь с той же самой проблемой
Даллонси
1
@ user1330974 по-видимому, просто форсировала символическую ссылку:ln -sf /usr/bin/python3.6 /usr/bin/python3
dallonsi
1
@dallonsi Спасибо. Я не стал вдаваться в подробности, но я буду использовать ваш подход. :)
user1330974