# ubuntu 24.04 安裝多個版本python :::info [官網基本的教學](https://github.com/pyenv/pyenv) ::: ## 1. 基本安裝 ```shell= sudo apt update sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev curl https://pyenv.run | bash ``` ## 2.修改~/.bashrc ```shell= # the following to ~/.bashrc: export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" ``` ## 3. install python with pyenv ``` #查詢目前的版本 pyenv install --list pyenv install 3.12.7 ``` ## 4. basic指令紀錄 ```shell= pyenv install -l //安裝python相關主要版本清單 pyenv install xxxx //安裝版本 brew upgrade pyenv //更新pyenv且也會順帶更新清單 pyenv versions //安裝的版本及虛擬機版本 pyenv global xxxx //設定全域版本 pyenv local xxxx //設定區域版本 pyenv exec python -V //檢查目前當下使用的版本號 pyenv update // update python version list ``` ## 問題一:常常有時候切換,在執行python -V 還是錯誤的版本,所以要執行exec "$SHELL" >使用 pyenv local 切換 Python 版本時,如果版本切換後無效,通常是因為 Shell 還未重新加載,這時執行 exec "$SHELL" 可以解決問題。這背後的原因與 pyenv 的運作方式和環境變數設定有關。 >為什麼需要 exec "$SHELL"? pyenv 是透過修改環境變數(如 PATH)來選擇正確的 Python 版本。當你執行 pyenv local,它會在當前目錄下創建或更新一個名為 .python-version 的文件,並根據這個文件設定新的 Python 版本。但有時候,Shell 尚未加載這些改變,導致新版本無法立即生效。 >執行 exec "$SHELL" 會重啟當前 Shell,重新加載環境變數和配置,從而讓 pyenv 的改變生效。 >強制刷新 pyenv 的設置: 有時候問題可能出在緩存,執行以下命令可以解決: ```shell= pyenv rehash ``` #### 自動處理方法(建議) >如果希望避免每次切換後都手動執行 exec "$SHELL",可以考慮將它自動化: 在你的 ~/.bashrc 或 ~/.zshrc 中添加以下函數: ```shell= pyenv_local() { pyenv local "$1" && exec "$SHELL" } ``` ## 問題2 搭配使用poetry,建議:不要使用 pyenv-virtualenv >因為 Poetry 自帶了虛擬環境管理功能,容易和 pyenv-virtualenv 疊床架屋,徒增管理上的混淆,所以我現在一律只用 Poetry + venv 來管理 Python 虛擬環境。