20.04 における Python 3.8.x の問題

20.04 における Python 3.8.x の問題

すでに、約 1 週間半前の MicroSD のバックアップ イメージに戻す作業を進めていましたが、それを新しい SanDisk Micro SD カードに書き込んだ後、起動時に ext4 ファイルシステムが大量の inode エラーを出し、OS のすべてがほぼ完全に壊れ、fsckファイルシステム レベルで壊れているものの異常なリストが表示されました。新しい SanDisk Micro SD カードですが、どうやらバックアップ プロセス中に、バックドアからデータ破損が入り込んだようです。

私は Raspberry Pi 4B で Ubuntu 20.04 を実行しています。つまり、arm64 アーキテクチャで実行されているということです。そのため、kernel.org から .deb パッケージを直接ダウンロードするか、IE をインストールするという提案はpython3-minimal機能しません。ARM64 のインストール候補がないためです。

  • arm64 アーキテクチャにはまったく存在しない .deb やその他のインストール パッケージを指すソリューション。

  • また、時代遅れのアドバイスやまったく間違ったアドバイスもたくさんありました。また、マニュアルや Ubuntu のユーザー コミュニティ (Raspberry Pi で CD を起動するなど) で説明されているシステム復元方法は、少なくとも現時点では Raspberry Pi 4B の 20.04 には適用されません。

インストールはまだうまくいっていないのですが、apt/dpkg 更新システムは何を試してもほとんど機能しません。.deb パッケージをダウンロードして個別にインストールしようとしましたが、うまくいきませんでした。

現時点では、Py3compileとPycleanはどこにも見つからず、これら2つが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/

Ubuntu の Web サイトから .deb パッケージを直接取得し、抽出して個別にインストールしようとしました。

私が読んできたフォーラムの投稿によると、少なくとも過去 10 年間、Python で何かがおかしくなるたびに (ユーザー エラーであれ、パッケージが壊れるなど)、Ubuntu やその他の Debian ベースのシステムが壊れているという事実を考えると、Linux での dpkg/apt アーキテクチャの処理方法を根本的に修正し、実行する必要がある Python モジュールと依存関係をオペレーティング システムの残りの部分から分離する方が少しは安全ではないでしょうか。または、かなり蔓延していると思われるこのような悲惨な状況に備えて、何らかのフェイルセーフ システム復元方法を作成するのはどうでしょうか。

答え1

前回の投稿に返信しましたが、ロックされていたために問題が発生したようです。

元の投稿で述べたように、関連する.debファイルを手動で抽出し、Pythonを再構築して自分でブートストラップすることができます。python3 は、Ubuntu 16.04 で導入されました。arm64のミラーはリストされていませんが、少し検索してみたところ、https://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/python3_3.8.2-0ubuntu2_arm64.deb.htmlすべてのパッケージ名が表示され、python3.8 のビルドダウンロード用(このミラーにはすべてのarm64パッケージがあります)。「python3」パッケージから始めて、すべての依存関係を手動でドリルダウンしてすべて取得する必要があります。 と はpy3compile両方py3cleanともpython3-minimal パッケージ

第二に、これは私自身も多くの間違いを犯してきた経験から言うのですが、sudoシステムを操作不能にしてしまうようなことが無数にあり、現実的な安全策はありません。sudo rm毎回警告/確認を要求すべきでしょうか? どうでしょうかsudo chmod? Python の問題でシステムを壊したという投稿ごとに、権限に関して何か悪いことをしたり、間違ったファイルを削除したりした投稿もおそらく同じくらいあるでしょう。

答え2

経験から引用します - Pythonをアップグレードしようとするとソースからあなたのシステムでは、松明システムを修復不可能な状態に陥らせてしまう。このような場合の最も早くて簡単な解決策はシステムを再インストールするまたは、既知の正常なバックアップイメージから復元し、しないでくださいソースから Python をアップグレードしようとします。

「再インストール」の答えは、全てISO インストールだけでなく、OS バージョンも。

「バックアップ イメージ」からシステム Python を復元するのは面倒なので、バックアップからシステム全体を復元したほうがよいでしょう。または、最初から再インストールしてください。


はどうかと言うとニーズに合わせて新しいPythonを入手する、使用を検討したいかもしれませんpyenv のこれは、システムの Python に影響を与えずにユーザー スペースに複数の Python バージョンをインストールできるようにするプロジェクト/ツールであり、システムの Python を壊しません。システム レベルの Python を更新すると、多くの場合、システムが壊れてしまうためです。

答え3

はい、@Brian Turek のおかげで、私のシステムは再び稼働しています。SSH でボックスに接続し、彼が示したリンクから必要な .deb ファイルを取得することで、動作させることができました (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 で便器の詰まりを解消する」必要があります。すべてが解決するまでこれを繰り返します。

それでも、私はついに成功し、システムは復旧して稼働しており、この問題のために保留されていたすべてのパッケージと無人アップデートを問題なくインストールしています。助けてくれてありがとう、ブライアン・トゥレック!<3 あなたは私に何年もの心理療法を省いてくれました。

PS 壊れた Python のシステムを修復する唯一の方法は、すべてを消去して最初からやり直すことだと思っているヘイターの皆さん、「その通りです!」 :-D

関連情報