«ImportError: нет модуля с именем _struct», настройка Python-минимальный

10

Когда я запускаю sudo apt-get upgrade, появляется ошибка dpkg, которая прерывает процесс.

Детали ошибки:

Setting up python-minimal (2.7.3-0ubuntu7.1) ...
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/lib/python2.7/compileall.py", line 16, in <module>
    import struct
  File "/usr/local/lib/python2.7/struct.py", line 1, in <module>
    from _struct import *
ImportError: No module named _struct
dpkg: error processing python-minimal (--configure):
 subprocess installed post-installation script returned error exit status 255
dpkg: dependency problems prevent configuration of python:
 python depends on python-minimal (= 2.7.3-0ubuntu7.1); however:
  Package python-minimal is not configured yet.

И эта проблема приводит к ряду проблем с зависимостями при обработке следующих пакетов:

 python
 gwibber-service
 libgwibber3
 libgwibber-gtk3
 gwibber
 gwibber-service-facebook
 gwibber-service-identica
 gwibber-service-twitter
 python-all
 python-dev
 python-all-dev
 python-apt
 python-problem-report
 python-apport
 python-libxml2
 unity-lens-gwibber
 unity-scope-video-remote

Наконец, я ничего не могу сделать для этой проблемы. А через несколько дней корневой каталог заполнен, и я даже не смог удалить какое-либо программное обеспечение из-за этой проблемы.

Java Xu
источник
возможно дублирование askubuntu.com/q/270011/169736
Брайам
@Braiam, я нашел этот вопрос раньше. В ответах предлагается переустановить python. Я пытался, и не удалось. Спасибо, в любом случае!
Ява Сюй
sudo apt-get clean помогает вернуть немного места назад
frlan
Я изменил свою /usr/bin/pythonсимволическую ссылку, чтобы указать, python3.5и это вызвало очень похожую ошибку с этим. Не уверен, почему, возможно, это связано с тем, python2.7что у меня уже были ошибки, когда я изменил символическую ссылку без предупреждения. ИДК, оставив это здесь для будущих путешественников
quietContest

Ответы:

8

Следуйте решению Сорооша. Сломанный python (2.7) после ручной сборки и установки python 2.6

Войдите sudo -iдля root-доступа.

Вставьте команду и подождите около 20 минут. Работает отлично.

for pkg in $(dpkg --get-selections | egrep -v 'deinstall' | egrep python | awk '{print $1}'); do  apt-get -y --force-yes install --reinstall $pkg ; done
Лео Пиментел
источник
1

Хорошо, просматривая пакеты, я обнаружил, что python-minimal не имеет struct.py, а python-minimal2.7 имеет.

Итак, попробуйте это и посмотрите, поможет ли это вам:

sudo apt-get install --reinstall python2.7-minimal
sudo apt-get upgrade

Если даже это не сработает, возможно, ваша $ PYTHONPATH как-то испорчена.

nano ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/usr/lib/python2.7"Затем добавьте строку

source ~/.bashrc

И попробуйте обновить еще раз.

Чак Р
источник
отредактировано, чтобы добавить «экспорт», это отчасти необходимо;)
Чак R
Там написано "Невозможно найти пакет python-minimal2.7". Вы имеете в виду python2.7-минимальный? Когда я пытаюсь переустановить python2.7-minimal, возникает та же проблема с зависимостями.
Ява Сюй
Хм, прости, что я так долго возвращался к тебе. Попробуй sudo apt-get clean sudo apt-get update sudo apt-get upgrade.
Чак Р
1
Боюсь, что это не сработает. После clean, updateи upgradeзатем я пытаюсь переустановить python2.7-minimal, но появляется та же проблема с зависимостями, и reinstallснова происходит сбой.
Ява Сюй
Похоже, я был неправ насчет того, какой пакет. это на самом деле libpython2.7-минимальный, который содержит struct.py. Убедитесь, что это установлено. Какую текущую версию python2.7-minimal вы установили? Подсказка:dpkg -l | grep python2.7-minimal
Чак Р
1

Попробуй это

sudo apt purge libpython*

Я удалил python2.7 и 3.7, затем удалил связанные файлы из системы. После этого я обнаружил, что не могу переустановить python2.7. Попробовал многие методы, которые до сих пор не работают, включая:

удалить мягкие ссылки

del virtual env dirs

autoremove

sudo dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`

Затем я нашел некоторые файлы libpython, выполнив поиск по всей системе python. (Не делайте rm-файлы из dir, если вы не уверены.) После удаления libpython*пакетов (я удалил их один за другим), python успешно установлен.

Надеюсь, что это может помочь некоторым людям иметь те же проблемы

сойка
источник
0

Не знаю, поможет ли это вам вообще, это что-то вроде удара в темноте, но убедитесь, что версия Python по умолчанию установлена ​​на 2.7.

В каталоге / usr / bin есть три файла:

python (symlink)
python2.7
python3 (symlink)

Если вы это сделаете, ls -l /usr/bin | grep pythonвы увидите, на что указывает каждая символическая ссылка.

Если это показывает вам python -> python3или python -> python3.3что-то не так. На данный момент вы хотите:

rm /usr/bin/python
ln -s /usr/bin/python2.7 /usr/bin/python
Чак Р
источник
Спасибо за ваш ответ. По моему /usr/bin, pythonмягко связан с python2.7.
Ява Сюй
Почему это? Я изменил свою символическую ссылку, чтобы она указывала python3.5, и она занимала огромное количество пакетов Python, aptа также. Почему я не могу по умолчанию использовать Python3? Какой правильный путь?
quietContest