20.04의 Python 3.8.x 문제

20.04의 Python 3.8.x 문제

저는 이미 1.5주 정도 된 MicroSD의 백업 이미지로 되돌리는 중이었습니다. 새로운 SanDisk Micro SD 카드에 쓴 후 ext4 파일 시스템에서 부팅 시 많은 inode 오류가 발생했습니다. OS는 다소 완전히 손상되었으며 fsck기본적으로 파일 시스템 수준에서 손상된 항목의 미친 목록을 제공했습니다. 샌디스크의 최신 마이크로 SD 카드인데 백업 과정에서 데이터 손상이 백도어를 통해 들어온 것으로 보인다.

저는 Raspberry Pi 4B에서 Ubuntu 20.04를 실행하고 있습니다. 이는 arm64 아키텍처에서 실행된다는 의미입니다. 따라서 kernel.org에서 직접 .deb 패키지를 다운로드하거나 설치하라는 제안이 python3-minimal작동하지 않습니다. ARM64의 설치 후보.

  • arm64 아키텍처에는 전혀 존재하지 않는 .deb 및 기타 설치 패키지를 가리키는 솔루션입니다.

  • 또한 오래되었거나 완전히 나쁜 조언이 많이 있었습니다. 또한 설명서나 Ubuntu 사용자 커뮤니티(Raspberry Pi의 부팅 CD?)에 설명된 시스템 복원 방법 중 어느 것도 Raspberry Pi의 20.04에 적용되지 않습니다. 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 -asudo apt -f install, 동일한 오류가 발생합니다.
  • dpkg 복구 지침(예:dpkg를 다시 설치하는 방법)도 작동하지 않습니다. 즉, 에 필요한 파일이 없기 때문입니다 /var/cache/apt/archives/.

우분투 웹사이트에서 직접 .deb 패키지를 가져와서 추출하고 별도로 설치하려고 했습니다.

내가 겪은 포럼 게시물에 따르면 사람들은 적어도 지난 10년 동안 Python에 문제가 생길 때마다 우분투와 기타 데비안 기반 시스템을 망가뜨려 왔다는 사실을 감안할 때 – 사용자 오류든 오류든 상관없습니다. 패키지 문제를 해결하려면 dpkg/apt 아키텍처가 Linux에서 처리되는 방식을 근본적으로 수정하고 운영 체제의 나머지 부분에서 실행하는 데 필요한 모든 Python 모듈과 종속성을 격리하는 것이 조금 더 안전할까요? 또는 매우 널리 퍼져 있는 이러한 심각한 상황의 경우 일종의 안전한 시스템 복원 방법을 만드는 것입니다.

답변1

귀하의 이전 게시물에 답변을 드렸지만 해당 게시물이 잠겨 있어 몇 가지 문제가 발생한 것으로 보입니다.

원래 게시물에서 언급한 것처럼 관련 .deb 파일을 수동으로 추출하고 Python을 다시 빌드하여 스스로 부트스트랩할 수 있습니다. 그것은 나타납니다https://packages.ubuntu.com/focus/python3arm64에 대해 나열된 미러가 없지만 몇 가지 간단한 검색 끝에 다음을 발견했습니다.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-최소 패키지

둘째, 나 자신도 많은 실수를 저질렀기 때문에 사람들이 할 수 있는 일이 무수히 많아 sudo시스템을 작동 불가능하게 만들 수 있으며 현실적인 안전 장치도 없습니다. sudo rm매번 경고/확인을 요구 해야 합니까 ? 어때요 sudo chmod? Python 문제로 인해 시스템이 손상되는 사람에 대한 모든 게시물에 대해 사람들이 권한 관련 문제를 일으키거나 잘못된 파일을 삭제한 사례를 많이 지적할 수 있습니다.

답변2

경험을 인용하겠습니다 - Python을 업그레이드하려고 하면소스에서귀하의 시스템에서는토치귀하의 시스템을 고칠 수 없는 방식으로 이러한 경우 가장 빠르고 쉬운 해결책은 다음과 같습니다.시스템을 다시 설치하세요또는 알려진 양호한 백업 이미지에서 복원하고하지 마라소스에서 Python을 업그레이드하려고 시도합니다.

"재설치" 답변은 다음에 적용됩니다.모두ISO 설치뿐만 아니라 OS 버전.

'백업 이미지'에서 시스템 Python을 복원하는 것은 어려울 수 있으므로 백업에서 전체 시스템 복원을 수행하는 것이 좋습니다. 아니면 처음부터 다시 설치하세요.


에 관해서는자신의 필요에 맞게 최신 Python을 얻으십시오., 사용 방법을 살펴보고 싶을 수도 있습니다.PyEnv이는 시스템 Python에 영향을 주지 않고 시스템 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. 다른 종속성의 다른 버전에 의존하기 때문에 설치되지 않는 경우 Brian이 원래 사용했던 저장소 URL에서 찾아보십시오. 연결되어 있으면 필요한 패키지를 먼저 설치하고, 잔소리가 더 많이 발생하면 먼저 "그 안에 있는 Python에서 변기의 막힌 부분을 풀기" 위해 더 깊이 파고들어 손상된 종속성을 설치하고 모든 것이 정리될 때까지 헹구고 반복해야 합니다.

그럼에도 불구하고 마침내 해냈고 시스템이 백업되어 실행 중이며 이 문제로 인해 중단되었던 모든 패키지와 무인 업데이트를 행복하게 설치하고 있습니다.도움을 주신 Brian Turek에게 감사드립니다! <3 당신은 나에게 수년간의 심리 치료를 구해주었습니다.

추신: Python이 망가진 시스템을 고치는 유일한 방법은 모든 것을 지우고 처음부터 시작하는 것이라고 생각하는 여러분을 싫어하는 사람들은 모두 "Touché!"라고 말합니다. :-디

관련 정보