Python 3.8.x 20.04 中的問題

Python 3.8.x 20.04 中的問題

我已經開始恢復到大約 1.5 週前的 MicroSD 備份映像,直到將其寫入全新的 SanDisk Micro SD 卡後,ext4 檔案系統在啟動時出現了一堆 inode 錯誤,所有內容都在作業系統或多或少完全損壞了,並且fsck基本上給出了文件系統級別損壞的瘋狂列表。這是一張全新的 Sandisk Micro SD 卡,但顯然在備份過程中,資料損壞從後門溜進來。

我在 Raspberry Pi 4B 上運行 Ubuntu 20.04,這意味著它在 arm64 架構上運行,因此建議直接從 kernel.org 下載 .deb 軟體包或安裝 iepython3-minimal不起作用,因為沒有任何ARM64 的安裝候選。

  • 指向 .deb 和其他安裝套件的解決方案根本不存在於 arm64 架構中。

  • 還有很多過時的或完全糟糕的建議——而且,手冊或 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 恢復說明(對於 ie如何重新安裝dpkg) 也不起作用,因為 處沒有所需的文件/var/cache/apt/archives/

我嘗試直接從 Ubuntu 網站取得 .deb 軟體包,解壓縮它們並單獨安裝。

事實上,根據我瀏覽過的論壇帖子,至少在過去十年裡,每當 Python 出現問題時,人們就會破壞他們的 Ubuntu 和其他基於 Debian 的系統 - 無論是用戶錯誤還是如果包破壞了東西,以某種方式以Linux 中處理dpkg/apt 架構的方式進行根本性修復並隔離它們需要從作業系統的其餘部分運行的任何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-最小包

其次,我自己也犯過很多錯誤,人們可以做無數的事情,sudo這些事情可能會導致系統無法運行,而且沒有現實的保障措施。sudo rm每次都需要警告/確認嗎?怎麼樣sudo chmod?對於每一篇關於有人用 Python 問題破壞系統的帖子,我可能都可以指出人們在權限方面做了不好的事情或刪除了錯誤的檔案。

答案2

我將引用經驗 - 如果你嘗試升級 Python從源頭在你的系統中,你會火炬您的系統以不可修復的方式。在這些情況下,最快且最簡單的解決方案是重新安裝系統或從已知良好的備份映像中恢復不要嘗試從原始碼升級Python。

「重新安裝」答案適用於全部作業系統版本,而不僅僅是 ISO 安裝。

從「備份映像」還原系統 python 會很痛苦,因此您不妨從備份中進行完整的系統還原。或從頭開始重新安裝。


至於根據自己的需求獲取更新的 python,你可能要考慮使用Python環境這是一個專案/工具,可讓您在使用者空間中安裝多個 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 疏通馬桶”,沖洗並重複,直到所有問題都解決。

儘管如此,我終於成功了,我的系統已備份並運行,我很高興安裝由於此問題而一直掛起的所有軟體包和無人值守更新。感謝布萊恩圖雷克的幫助! <3 你讓我免去了很多年的心理治療。

PS:所有討厭那些認為用損壞的 Python 修復系統的唯一方法就是將其全部清除並從頭開始的人,“Touché!” :-D

相關內容