
我想在 Gentoo 系統中為我的所有套件只使用一個 Python3 版本。於是我找到了安裝的版本,發現安裝了三個版本:3.6、3.7和3.8。我想將所有軟體包轉換為 3.8 並刪除先前的版本。
我的計劃:
- 取消合併 Python 3.6 和 3.7。
USE
將使用 Python 的套件的標誌設定為python3_8 -python3_7 -python3_6
.- 重建這些套件,
emerge --update --newuse
讓它們使用 Python 3.8。
因此,在刪除 Python 3.6 後:
emerge --ask -C dev-lang/python:3.6
我添加了這一行
virtual/python-ipaddress python3_8 -python3_7 -python3_6
並/etc/portage/package.use
運行
emerge --ask --update --newuse --deep virtual/python-ipaddress
我得到
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] dev-lang/python-3.6.11-r2 [2.7.18-r1, 3.7.8-r2, 3.8.4-r1] USE="(threads%*)"
Would you like to merge these packages? [Yes/No]
我不明白這種行為:python-3.6
如果/etc/portage/package.use
指定它應該使用,為什麼emerge要安裝3.8
?為什麼該USE
變數不包含任何 Python 規範?是否有另一個設定檔比該變數具有更高的優先權/etc/portage/package.use
並重新定義該USE
變數?據我讀到的理解文件,這不應該發生。
答案1
順便說一句,python 在 Gentoo 中並不是一個普通的套件。 (主要是因為搬運本身取決於 python。並且需要連貫一致。 USE 標誌背後的想法是它是為設定使用者首選項而保留的。最糟糕的是,偏好設定可能會導致某個軟體包無法正常運作,但無論如何都不會破壞整個系統。
Python版本肯定是不是用戶偏好。不!用戶無法醒來並做出決定:我只想要 Phython XYZ!嗯...是的...使用者可以...自費。
為了實現你的目標,(據我所知),我絕對不會繼續(高風險*) 你遵循的方式。
我寧願遵循詳細的程序在此段落下版本升級。
順便一提:還要注意電子選擇東西。
不是說出於興趣......在一天結束時......你到底為什麼想要那個?
Tux ~ $ equery size python-2.7.18-r1
dev-lang/python-2.7.18-r1
Total files : 4177
Total size : 63.28 MiB
Tux ~ $ equery size python-3.7.8-r2
dev-lang/python-3.7.8-r2
Total files : 6616
Total size : 98.74 MiB
恢復總計少於 200MB 的資料可能會破壞其他有趣的事情?
注意! : 你永遠不會真正轉變,透過調整使用標誌將程式從一種語言版本移植到另一種語言版本。您只需將其連結到一些不同的庫,如果程式尚未相容,這些程式庫就會破壞一切。
高風險(*):在驗證沒有安裝的軟體包嚴格依賴它這一事實之前,我永遠不會嘗試取消合併任何軟體包。我指的是尚未從 python 2 移植到 python 3 的程式。 (我個人得到了一些肯定證明 python-2.7.18-r1 在我的系統上存在的合理性)
並不是說,如果你成功刪除了 3.6 和 3.7,你幾乎肯定會破壞不亞於 glib (2.62.6)、wireshark、git...據我所知,哪些最新的穩定版本還沒有3.8相容.. .
並不是說你甚至可能破壞了 portage 本身,禁止任何從這個部分恢復的機會,這要歸功於你......幾乎肯定......避免創建的備份......
答案2
正如前面的答案中已經指出的那樣,刪除軟體包然後嘗試更改配置以使其不再需要是不安全的。安全的方法是相反的- 更改您的配置(調整USE 標誌、(取消)屏蔽版本),系統本身識別出不需要該軟體包(這可能需要重新安裝幾個軟體包),並且系統將通過以下方式自行刪除它:emerge --depclean
。
至於原來的問題,Python被強行刪除,只需將--tree
選項放在emerge update指令中即可。然後,它不僅會列出要安裝的軟體包,還會列出將它們帶入樹中的內容。
很可能有一個包仍然依賴python:3.6
.
答案3
當我升級 Python 時,以下是我執行的步驟(部分基於Gentoo 維基):
在 中
/etc/portage/make.conf
,新增或更新和PYTHON_TARGETS
到PYTHON_SINGLE_TARGET
我想要使用的 Python 版本(例如PYTHON_TARGETS="python3_9 python3_8"
和PYTHON_SINGLE_TARGET="python3_9"
)。package.use
運行
emerge -puvDN --with-bdeps=y @world
以驗證沒有包對更改不滿意。USE
新增或更新各個套件的Python標誌。
我強烈建議不要使用emerge -C
除非你是絕對地確保沒有包正在使用該包!特別是在 Python 的情況下,你可以讓它emerge
根本不起作用。