PyEnv, VirtualEnv 與 Vscode 的夢幻連動

平常我們下載了一個 Python 的特定版本之後如果有不同的情況要用其他版本會非常麻煩。或者是我們有時候會希望特定的專案在乾淨的環境來執行以確保不同套件不會互相衝突。這個時候我們就可以使用 PyEnv 來下載並管理不同版本的 Python,同時也可以利用 VirtualEnv 與 PyEnv 來創造特定版本的虛擬環境

PyEnv 的下載與設定

首先我們先從 github 上把 PyEnv 這個開源專案 clone 下來 (謝謝 PyEnv 的開發人員www),下面這行可以在 Powershell 或 cmd 執行

git clone https://github.com/pyenv-win/pyenv-win.git "$HOME/.pyenv"

$HOME 改成你想要儲存各個版本的 Python 的地方,以我自己為例,我是存在 C:\Users\rayhs。成功的話會長這樣

PS C:\Users\rayhs> git clone https://github.com/pyenv-win/pyenv-win.git "C:\Users\rayhs\.pyenv"
Cloning into 'C:\Users\rayhs\.pyenv'...
remote: Enumerating objects: 3167, done.
remote: Counting objects: 100% (238/238), done.
remote: Compressing objects: 100% (146/146), done.
remote: Total 3167 (delta 136), reused 166 (delta 92), pack-reused 2929
Receiving objects: 100% (3167/3167), 3.63 MiB | 7.20 MiB/s, done.
Resolving deltas: 100% (2034/2034), done.

阿失敗我就不知道了,畢竟我沒遇過ㄏ

接下來我們要為 PyEnv 設置環境變數,以確保 PyEnv 能夠在 Powershell 或 cmd 執行。請直接把下面兩行複製貼上到 Powershell 或 cmd 執行

[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

執行起來會長這樣

PS C:\Users\rayhs> [System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
PS C:\Users\rayhs> [System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

基本上沒有 Error 就是成功了,如果還想更加確定環境變數有沒有設置完成,我們可以進到環境變數的頁面

在使用者變數如果有看到 PYENV PYENV_HOME 的兩個變數就是成功了。好到這邊 PyEnv 的安裝與設定基本上是完工了,接下來我們實際操作幾個 PyEnv 的 command

pyenv update    #更新 pyenv 可使用的 python 版本
pyenv install -l    #列出所有可使用的 python 版本
pyenv install 3.5.6 3.8.1    #下載特定的 python 版本
pyenv versions    #查看目前下載的 python 版本
pyenv uninstall 3.5.6 3.8.1    #移除特定的 python 版本
pyenv local 3.5.6    #指定目前 local 端所使用的 python 版本
pyenv exec    #確保執行檔是藉由 pyenv 所管理的環境執行的 (e.g. pyenv exec pip list)

基本上常用的就這幾個,接下來我們嘗試下載 3.9.2 跟 3.10.4 這兩個版本的 python

PS C:\Users\rayhs> pyenv install 3.9.2 3.10.4
.
.
.
:: [Info] :: completed! 3.9.2
.
.
.
:: [Info] :: completed! 3.10.4

確定一下真的有下載成功

PS C:\Users\rayhs> pyenv versions
Active code page: 65001
  3.10.4
  3.9.2

好了基本上目前你的電腦裡就有兩個不同版本的 python 可以使用了,至於使用 vscode 要怎麼切換我會在後面提到

用 PyEnv 下載的 python 創造虛擬環境

好的,前面我們只是擁有不同版本的 python,接下來我會用不同版本的 python 創造虛擬環境,這樣我們就可以讓乾淨且指定版本的環境無性生殖了 (不是

首先我們先 navigate 到我們想要創造虛擬環境的 folder,然後依序輸入下面的 command

pyenv local 3.10.4    #在 local 端啟用你想要的 python 版本
python -m install --user virtualenv    #下載 virtualenv 套件
python -m venv .venvtest    #創造虛擬環境 (.venvtest 可以隨意更改成你想要的名子)

這個時候我們再去我們創造虛擬環境的 folder 看就可以看到我們的虛擬環境惹~ 裡面會長這樣

基本上就是一個完整的 python 設置

使用 Vscode 進行不同環境的切換

依照我們前面的設置,目前我們應該有三個環境

  • 3.9.2 的 pyenv
  • 3.10.4 的 pyenv
  • 3.10.4 叫 .venvtest 的虛擬環境

而要在這三個環境之間切換我們只要在 vscode 裡切換不同的 interpreter 就好,pyenv 的初始環境會是在 C:\Users\你的使用者名稱\.pyenv\pyenv-win\versions\3.9.2\python.exe,而虛擬環境的則是在 你取的虛擬環境資料夾\Scripts\python.exe

接下來我們就實際執行將 vscode 切換到 3.9.2 的 pyenv。首先開啟你的 vscode 然後按下 Ctrl+Shift+p,點選 Select Interpreter

點選 Enter Interpreter Path,或者是點下面你想要的 Default Path

Navigate 到前面所述的 python.exe 用力按下去,然後就好了www
這個時候看一下泥的右下角應該會看到這個東西

這樣代表你成功了,阿如果右下角沒有顯示也沒關西 (好像有些版本的 vscode 不會顯示。你可以 Ctrl+shift+p 然後點 Create New Terminal,然後就會看到這個

這樣代表你又成功了