」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 PyEnv 進行 Python 版本管理

使用 PyEnv 進行 Python 版本管理

發佈於2024-11-04
瀏覽:535

Python Version Management with PyEnv

命令參考(安裝和設定說明如下):

# List all versions of python interpreters available to install:
pyenv install -l
# List all versions of CPython (the default interpreter) available to install:
pyenv install -l | grep -E '^\s*[0-9]'
# Install specified version. In this case it installs 3.12.6
pyenv install 3.12.6
# List versions installed locally:
pyenv versions
# See global version
pyenv global
# Set global version to x.x.x; in this case it sets to 3.12.6
pyenv global 3.12.6
# See local version
pyenv local
# Set global version to x.x.x; in this case it sets to 2.7.18
pyenv global 3.12.6

PyEnv 簡介

截至 2024 年 9 月,不同語言版本和解釋器的管理在 Pythonic 世界中有點屬於灰色地帶,但社群當然有「非官方」解決方案來規避這個問題。
一個特別好的解決方案是 PyEnv,它大量借鑒了 ruby​​ 的版本管理解決方案,這是 ruby​​ 做得非常好的事情。
PyEnv 基本上是 shell 腳本的集合,有助於在全域和本機範圍內安裝和選擇特定的 python 版本或解譯器。
它的工作原理是在 PATH 中插入墊片目錄,並根據特定條件重新哈希墊片,以便映射 python 二進位(以及其他設置,例如映射 pip、切換 PYTHON_VERSION env 等)。
本指南將重點放在 MacOS 和 Debian 系列 Linux 發行版,並將涵蓋 bash 和 zsh 的設定。它不會覆蓋 pyenv-win。

安裝 PyEnv

蘋果系統

這假設已安裝 homebrew 和 xcode-tools。
第一行將安裝依賴項來安裝和建置 python 版本。
第二行將安裝 pyenv 本身。
第三行是可選的,將在運行brew之前附加pyenv加載,以避免運行brew doctor時出​​現誤報警告,並避免在開發brew python包時出現錯誤。請注意,它被放置在 .zshrc 中,您的 mac 預設應該已經啟用了 zsh,除非它是舊機器,在這種情況下,您可能應該將其附加到 .bash_profile。

brew install openssl readline sqlite3 xz zlib tcl-tk && \
brew install pyenv \
&& echo "alias brew='env PATH=\"${PATH//$(pyenv root)\/shims:/}\" brew'" >> ~/.zshrc

Linux(基於 Debian)

首先,安裝依賴項。
然後,將公共儲存庫複製到 $HOME/.pyenv.

sudo apt update && sudo apt install build-essential \
libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev && \
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv

安裝後(MacOS 和 Linux)

將此新增至相關的 shell 設定檔中,如果您使用的是 bash,則為 .bash_profile;如果您使用的是 zsh,則為 .zshrc。如果您不確定,請使用 echo $SHELL 找出哪一個。

## pyenv configs
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

最後,刷新終端環境以查看 exec "$SHELL" 的變化。

完成此設定後,您的 python(不是 python3!)將映射到使用 pyenv 設定的 python 版本。
我建議您安裝一個 python 版本(請參閱上面的命令參考)並將其設定為您的全域版本。
檢查 python --version 是否一切正常,看看您安裝的版本是否與您選擇的版本相符。如果沒有,它可能仍然指向系統預設值,因此您可能已經執行了以下步驟之一(可能是刷新終端的部分,如果您不確定要做什麼,請關閉並重新打開終端視窗).

享受更明智的 python 版本管理的樂趣!

版本聲明 本文轉載於:https://dev.to/otamm/python-version-management-with-pyenv-3fig?1如​​有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-17
  • `MappedBy` 如何促進 JPA 和 Hibernate 中的雙向關係?
    `MappedBy` 如何促進 JPA 和 Hibernate 中的雙向關係?
    了解JPA 和Hibernate 中的MappedBy在JPA 和Hibernate 等物件關係映射(ORM) 框架中,MappedBy 是一個有用的註釋在實體類別之間建立雙向關係。此註解用於一對多和多對一關係的上下文中。 推薦用法MappedBy的建議用法如下: 一對多關係: 在一對多關係中,「多...
    程式設計 發佈於2024-11-17
  • 如何在懸停時創建邊框底部的動畫擴充?
    如何在懸停時創建邊框底部的動畫擴充?
    懸停效果:邊框底部的動畫擴展在這個問題中,目標是創建一個懸停效果,在懸停時擴展元素的底部邊框。為了達到這種效果,我們可以利用變換屬性並在懸停時將其從 0 轉換為 1。 h1 { color: #666; display: inline-block; margin: 0; text-t...
    程式設計 發佈於2024-11-17
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-17
  • 為什麼以及如何覆寫預設的 C++ `new` 和 `delete` 運算子?
    為什麼以及如何覆寫預設的 C++ `new` 和 `delete` 運算子?
    覆蓋預設C 新建和刪除運算子的好處以自訂實作取代預設新建和刪除運算子的目的在於解決特定問題挑戰或優化C 程式中的資源管理。這種做法提供了幾個潛在的優勢:錯誤檢測:自訂運算子可以檢測不正確的記憶體分配和釋放,降低記憶體洩漏和未定義行為的風險。他們可以追蹤分配的地址並在刪除時將其刪除,從而識別潛在的錯誤...
    程式設計 發佈於2024-11-17
  • 如何開發試髮型應用程式
    如何開發試髮型應用程式
    在當今快速發展的技術環境中,人工智慧 (AI) 正在各個領域發揮作用,包括美容和髮型設計。開發一款基於人工智慧的髮型試戴應用程式可以為用戶提供一種便捷的方式,讓他們在進行現實生活中的髮型之前虛擬地嘗試不同的髮型。本文將引導您完成使用 AILabTools 的 AI Hairstyle Change...
    程式設計 發佈於2024-11-17
  • Java中的`paintComponent`方法是如何觸發的,`Graphics`參數代表什麼?
    Java中的`paintComponent`方法是如何觸發的,`Graphics`參數代表什麼?
    PaintComponent 的幕後花絮重寫PaintComponent 方法是Java 中的常見做法,但其確切工作原理可能會讓初學者感到困惑。讓我們深入了解這個方法的奧秘。 觸發 Paint與「object.paintComponent(g)」等明確呼叫不同,當元件出現時,paintCompone...
    程式設計 發佈於2024-11-17
  • Vue.js 給出 Props 概念
    Vue.js 給出 Props 概念
    Hello ! Props 是 Vue.js 最需要的部分之一,它們允許在元件之間交換資訊。使用 props 是在 setup 函數內部完成的。下面我們可以詳細了解 props 如何與 一起使用: 定義道具: defineProps 函數用來定義 Vue.js 中的 props。 DefinePr...
    程式設計 發佈於2024-11-17
  • 為什麼 Visual Studio 2015 在編譯移動建構子程式碼時會報告錯誤 C2280「已刪除複製建構子」?
    為什麼 Visual Studio 2015 在編譯移動建構子程式碼時會報告錯誤 C2280「已刪除複製建構子」?
    Visual Studio 2015 報告C2280:探索「刪除的複製建構子」問題在Visual Studio 2013 中,編譯以下程式碼執行時沒有錯誤:class A { public: A(){} A(A &&{}){}; }; int main(int, char...
    程式設計 發佈於2024-11-17
  • 如何實作 Java 的「instanceof」運算子的 C++ 等效項?
    如何實作 Java 的「instanceof」運算子的 C++ 等效項?
    如何實現C 語言中的Java 的instanceof在Java 中,「instanceof」運算子可讓您確定一個物件是否屬於某某個物件特定的類別或介面。在 C 中,有多種方法可以實現此功能。 使用 RTTI 進行動態轉換一種方法是使用啟用了運行時類型資訊 (RTTI) 的動態轉換。這要求您包含必要的...
    程式設計 發佈於2024-11-17
  • 如何在 C++ 中實現二元樹運算的精確整數 Log2 函數?
    如何在 C++ 中實現二元樹運算的精確整數 Log2 函數?
    C 中的對數計算:整數Log2 實作在C 中,需要一個整數log2() 函數來決定二元層級樹結構。然而,當邊緣元素接近 2^n 的值時,就會出現問題,可能會導致浮點對數計算中出現舍入錯誤。 要解決此問題,有效的解決方案是在現代 x86 或 x86 上使用 bsr 指令-64 個平台。此指令傳回無符號...
    程式設計 發佈於2024-11-17
  • 創造「密碼攻擊」:繞過保障措施、人工智慧幻覺和網路安全威脅的未來
    創造「密碼攻擊」:繞過保障措施、人工智慧幻覺和網路安全威脅的未來
    创造“密码攻击”:绕过保障措施、人工智能幻觉和网络安全威胁的未来 当我开始从事 Cipher Strike 工作时,我的目标很简单:创建一个自定义 GPT,可以自动执行基本的渗透测试任务,同时为典型的干燥网络安全世界增添一点幽默。但随着项目的展开,出现了一些意想不到且令人不安的转变。最初,我计划让人...
    程式設計 發佈於2024-11-17
  • 如何在 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE 執行條件更新?
    如何在 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE 執行條件更新?
    INSERT ... ON DUPLICATE KEY UPDATE 中的條件更新在MySQL 中,INSERT ... ON DUPLICATE KEY UPDATE 語法允許語法允許在插入操作期間遇到重複鍵時自動更新表格資料。但是,查詢的 UPDATE 部分不支援使用 WHERE 子句來指定條件...
    程式設計 發佈於2024-11-17
  • 如何根據位置而不是 ID 從 MySQL 查詢結果集中檢索特定記錄?
    如何根據位置而不是 ID 從 MySQL 查詢結果集中檢索特定記錄?
    從MySQL 查詢中檢索特定記錄目前的任務是從MySQL 查詢結果集中檢索特定記錄,而不是基於它的ID ,但是按照它在排序結果集中的位置。例如,如果我們想從 ID 升序的查詢中檢索第三筆記錄,我們需要一種方法來偏移查詢並只傳回該特定記錄。 這個問題的解決方案是 LIMIT 子句,它可用來指定從特定偏...
    程式設計 發佈於2024-11-17
  • 我可以使用 Facebook Graph API 檢索使用者的電子郵件地址嗎?
    我可以使用 Facebook Graph API 檢索使用者的電子郵件地址嗎?
    如何使用Facebook Graph API 檢索用戶的電子郵件Facebook Graph API 授予對基本帳戶註冊資訊的存取權限,包括電子郵件位址、但存取此資料可能需要特定的權限處理。 了解權限管理API 需要某些欄位的擴充權限,包括電子郵件。若要取得權限,請在 OAuth 驗證過程中在「sc...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3