Проблемы Python 3.8.x в 20.04

Проблемы Python 3.8.x в 20.04

Я уже собирался вернуться к резервному образу моей MicroSD, которому было ~1,5 недели, пока после записи его на совершенно новую карту SanDisk Micro SD, файловая система ext4 не выдала кучу ошибок inode во время загрузки, все в ОС было более или менее полностью сломано и fsckвыдало в основном безумный список вещей, которые были сломаны на уровне файловой системы. Это совершенно новая карта Sandisk Micro SD, но, по-видимому, во время процесса резервного копирования повреждение данных проскользнуло через черный ход.

Я использую Ubuntu 20.04 на Raspberry Pi 4B, что означает, что он работает на архитектуре arm64, поэтому предложения загрузить пакеты .deb прямо с kernel.org или установить ie python3-minimalне работают, поскольку для ARM64 нет кандидатов на установку.

  • Решения, указывающие на .deb и другие установочные пакеты, которые просто не существуют для архитектуры arm64.

  • Также было много устаревших или вообще плохих советов. Кроме того, ни один из методов восстановления системы, описанных в руководствах или в сообществе пользователей Ubuntu (загрузочный CD на Raspberry Pi?), не применим к версии 20.04 на Raspberry Pi 4B, по крайней мере, пока.

Моя установка все еще идет, но система обновления apt/dpkg остается практически сломанной, что бы я ни делал. Я безуспешно пытался загрузить пакеты .deb и установить их по отдельности.

Что касается настоящего момента, Py3compile и Pyclean нигде не обнаружены, а эти двое являются основными виновниками неработоспособности dpkg/apt, так чтоэтот ответне работает.

$ sudo apt install python3-all
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3-all is already the newest version (3.8.2-0ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
4 not fully installed or removed.
Need to get 0 B/129 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up pychess (0.12.2-1build1) ...
/var/lib/dpkg/info/pychess.postinst: 6: pycompile: not found
dpkg: error processing package pychess (--configure):
 installed pychess package post-installation script subprocess returned error ex                                   it status 127
dpkg: error processing package python-pkg-resources (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Setting up gir1.2-dee-1.0 (1.2.7+17.10.20170616-4ubuntu6) ...
/var/lib/dpkg/info/gir1.2-dee-1.0.postinst: 6: pycompile: not found
dpkg: error processing package gir1.2-dee-1.0 (--configure):
 installed gir1.2-dee-1.0 package post-installation script subprocess returned e                                   rror exit status 127
Setting up python3-minimal (3.8.2-0ubuntu2) ...
Traceback (most recent call last):
  File "/usr/bin/py3compile", line 28, in <module>
    import struct
  File "/usr/lib/python3.8/struct.py", line 13, in <module>
    from _struct import *
ModuleNotFoundError: No module named '_struct'
dpkg: error processing package python3-minimal (--configure):
 installed python3-minimal package post-installation script subprocess returned                                    error exit status 1
No apport report written because MaxReports is reached already
                                                              Errors were encoun                                   tered while processing:
 pychess
 python-pkg-resources
 gir1.2-dee-1.0
 python3-minimal
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
  • Переустановка sudo apt install --reinstall -f python3-allтоже не помогает.
  $ sudo apt install --reinstall -f python3-all
  Reading package lists... Done
  Building dependency tree
  Reading state information... Done
  0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
  4 not fully installed or removed.
  Need to get 0 B/131 kB of archives.
  After this operation, 0 B of additional disk space will be used.
  (Reading database ... 1052975 files and directories currently installed.)
  Preparing to unpack .../python3-all_3.8.2-0ubuntu2_arm64.deb ...
  Unpacking python3-all (3.8.2-0ubuntu2) over (3.8.2-0ubuntu2) ...
  Setting up pychess (0.12.2-1build1) ...
  /var/lib/dpkg/info/pychess.postinst: 6: pycompile: not found
  dpkg: error processing package pychess (--configure):
   installed pychess package post-installation script subprocess returned error exit status 127
  dpkg: error processing package python-pkg-resources (--configure):
   package is in a very bad inconsistent state; you should
   reinstall it before attempting configuration
  Setting up python3-all (3.8.2-0ubuntu2) ...
  Setting up gir1.2-dee-1.0 (1.2.7+17.10.20170616-4ubuntu6) ...
  /var/lib/dpkg/info/gir1.2-dee-1.0.postinst: 6: pycompile: not found
  dpkg: error processing package gir1.2-dee-1.0 (--configure):
   installed gir1.2-dee-1.0 package post-installation script subprocess returned error exit status 127
  Setting up python3-minimal (3.8.2-0ubuntu2) ...
  Traceback (most recent call last):
    File "/usr/bin/py3compile", line 28, in <module>
      import struct
    File "/usr/lib/python3.8/struct.py", line 13, in <module>
      from _struct import *
  ModuleNotFoundError: No module named '_struct'
  dpkg: error processing package python3-minimal (--configure):
   installed python3-minimal package post-installation script subprocess returned error exit status 1
  No apport report written because MaxReports is reached already
                                                                Errors were encountered while processing:
   pychess
   python-pkg-resources
   gir1.2-dee-1.0
   python3-minimal
  needrestart is being skipped since dpkg has failed
  E: Sub-process /usr/bin/dpkg returned an error code (1)
  • sudo dpkg --configure -aи sudo apt -f install, приводят к тем же ошибкам.
  • Инструкции по восстановлению dpkg (как для ieКак переустановить dpkg) тоже не работают, так как нет требуемых файлов /var/cache/apt/archives/.

Я попытался получить пакеты .deb прямо с сайта Ubuntu, извлечь их и установить по отдельности.

Учитывая тот факт, что, согласно сообщениям на форумах, которые я просматривал, люди ломали свои Ubuntu и другие системы на основе Debian по крайней мере последние десять лет, когда что-то выходило из строя в Python - будь то ошибка пользователя или пакет, который что-то ломал, не будет ли немного безопаснее как-то внести фундаментальное исправление в способ обработки архитектуры dpkg/apt в Linux и изолировать все модули Python и зависимости, которые им нужны для запуска, от остальной части операционной системы? Или создать какой-то отказоустойчивый метод восстановления системы в случаях подобных прискорбных ситуаций, которые, похоже, встречаются довольно часто.

решение1

Я ответил на ваш предыдущий пост, но, похоже, его блокировка вызвала некоторые проблемы.

Как я уже упоминал в своем первоначальном посте, вы можете вручную извлечь соответствующие файлы .deb и пересобрать слепленный Python для самостоятельной загрузки. Похоже, чтоhttps://packages.ubuntu.com/focal/python3не имеет зеркал для arm64, но после недолгих поисков я нашелhttps://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/python3_3.8.2-0ubuntu2_arm64.deb.htmlкоторый выдает вам все имена пакетов и затем указывает наhttp://ports.ubuntu.com/pool/main/p/python3.8/для загрузки (это зеркало содержит все пакеты arm64). Вам придется начать с пакета "python3" и вручную развернуть все зависимости, чтобы получить их все. Похоже, py3compileи py3cleanнаходятся впакет python3-minimal

Во-вторых, и я говорю это, совершив много ошибок сам, есть бесчисленное множество вещей, которые люди могут сделать с sudoсистемой, которая может сделать ее неработоспособной, и нет никаких реалистичных мер безопасности. Должно ли sudo rmтребоваться предупреждение/подтверждение каждый раз? Как насчет sudo chmod? На каждый пост о том, что кто-то сломал свою систему из-за проблем с Python, я, вероятно, могу указать столько же, где люди сделали что-то плохое с разрешениями или удалили не тот файл.

решение2

Я процитирую свой опыт - если вы попытаетесь обновить Pythonиз источникав вашей системе вы будетефакелвашу систему неисправимым образом. Самое быстрое и простое решение в таких случаях —переустановите системуили восстановить из заведомо исправного резервного образа иНЕпопытка обновить Python из исходного кода.

Ответ «переустановить» применим квсеВерсии ОС, а не только установки ISO.

Восстановление системного python из вашего «резервного образа» будет мучением, поэтому вы можете просто сделать полное восстановление системы из резервной копии. Или переустановить с нуля.


Что касаетсяполучение более нового Python для собственных нужд, вы можете рассмотреть возможность использованияPyEnvкоторый является проектом/инструментом, который позволяет вам иметь несколько версий Python, установленных в User Space, не влияя на ваш системный Python и, таким образом, не ломая ваш системный python. Поскольку обновление системного уровня python во многих случаях оставит вас со сломанной системой.

решение3

Да, спасибо @Brian Turek, моя система снова работает! Я заставил ее работать, подключившись по SSH к своему компьютеру и скачав необходимые файлы .deb по ссылке, на которую он указал (http://ports.ubuntu.com/pool/main/p/python3.8/) с wget.

Сначала пришлось установить ( sudo dpkg -i) libpython3.8-stdlib_3.8.5-2_arm64.debпакет, затем python3.8-minimal_3.8.5-2_arm64.debпакет, и только ПОТОМ python3.8_3.8.5-2_arm64.debпакет установится из-за несбалансированности зависимостей.

ПРИМЕЧАНИЕ для будущих поколений (если таковые имеются):Процедура установки для системы с неисправной настройкой Python может отличаться; просто будьте внимательны и внимательно следите за сообщениями об ошибках, которые возникают во время dpkgустановки каждого пакета. Если пакет не устанавливается из-за того, что он зависит от другой версии какой-то другой зависимости, найдите это в URL-адресе репозитория, на который изначально ссылался Брайан, сначала установите требуемый пакет. Если это вызывает у вас еще больше раздражения, то вам придется копать глубже и сначала установить эти неисправные зависимости, чтобы «прочистить унитаз от Python, который там находится», промойте и повторяйте, пока все не будет улажено.

Тем не менее, мне наконец удалось это сделать, моя система снова работает, и я с радостью устанавливаю все пакеты и автоматические обновления, зависшие из-за этой проблемы.Спасибо Брайану Туреку за помощь! <3 Вы сэкономили мне много лет психотерапии.

P.S. Все вы, ненавистники, которые думают, что единственный способ исправить систему со сломанным Python — это просто стереть всё и начать с нуля, «Туше!» :-D

Связанный контент