在 Ubuntu上安裝 pyenv
安裝必要的相關 packages
sudo apt-get update
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
接下來執行:
curl https://pyenv.run | bash
設定環境變數
安裝完成後,我們需要設置一些環境變數,以確保 shell 能夠找到並使用 pyenv。將以下幾行添加到 shell 配置文件中(例如 ~/.bashrc 或 ~/.zshrc,取決於使用的 shell)
要確認目前所使用的 shell可以使用以下這行指令
echo $SHELL
以我的 Ubuntu 來說我目前是使用:
/bin/bash
那我就要使用以下指令:
vim ~/.bashrc
在 .bashrc
檔案最下方加上以下的設定
# pyenv add by Sean Liu
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
source ~/.bashrc
是一個在 Unix 和類 Unix 系統(如 Linux 和 macOS)中常用的 shell 命令。這個命令的作用是重新載入 .bashrc 文件的內容,使其中的設定立即生效。
.bashrc 文件是一個位於使用者家目錄下的隱藏文件(以點開頭的文件在 Unix 系統中是隱藏的)。它包含了 Bash shell 的配置和設定,每次你打開一個新的 Bash shell 時,這個文件都會被自動執行。
.bashrc 文件通常包含環境變數設定、別名(alias)定義、自定義函數,以及其他 shell 行為的配置。這些設定讓你可以自定義你的 shell 環境,使其更符合你的工作習慣和需求。
當你修改了 .bashrc 文件後,這些更改並不會立即生效。這是因為當前運行的 shell instance 已經讀取過 .bashrc 文件,不會自動重新讀取。這就是 source
命令派上用場的地方。
source
命令(在某些 shell 中也可以用點號 . 來代替)會讀取並執行文件中的命令,就好像這些命令是直接在當前 shell 中輸入的一樣。當你運行 source ~/.bashrc
時,你實際上是告訴當前的 shell 重新讀取和執行 .bashrc 文件中的所有命令。
這個過程會使你剛才對 .bashrc 文件所做的任何修改立即生效,而不需要關閉並重新打開終端窗口。這對於測試新的 shell 配置或快速應用更改非常有用。
source ~/.bashrc
# 或 source ~/.zshrc,取決於您使用的 shell
最後使用以下指令確認是否成功安裝
pyenv --version
盤點目前 OS上的 Python環境
使用 which 指令:這是最基本的方法,可以找出系統預設的 Python 路徑:
which python
which python3
/Users/liushihyen/opt/anaconda3/bin/python
使用 ls 指令查看 /usr/local/bin 目錄:許多 Python 版本會安裝在這個目錄下:
ls -l /usr/local/bin/python*
lrwxr-xr-x 1 liushihyen admin 38 6 2 23:46 /usr/local/bin/python-build -> ../Cellar/pyenv/2.4.1/bin/python-build
lrwxr-xr-x 1 liushihyen admin 40 4 25 15:54 /usr/local/bin/python3 -> ../Cellar/python@3.12/3.12.3/bin/python3
lrwxr-xr-x 1 liushihyen admin 47 4 25 15:54 /usr/local/bin/python3-config -> ../Cellar/python@3.12/3.12.3/bin/python3-config
lrwxr-xr-x 1 liushihyen admin 44 6 2 23:10 /usr/local/bin/python3.10 -> ../Cellar/python@3.10/3.10.14/bin/python3.10
lrwxr-xr-x 1 liushihyen admin 51 6 2 23:10 /usr/local/bin/python3.10-config -> ../Cellar/python@3.10/3.10.14/bin/python3.10-config
lrwxr-xr-x 1 liushihyen admin 43 6 2 23:14 /usr/local/bin/python3.11 -> ../Cellar/python@3.11/3.11.9/bin/python3.11
lrwxr-xr-x 1 liushihyen admin 50 6 2 23:14 /usr/local/bin/python3.11-config -> ../Cellar/python@3.11/3.11.9/bin/python3.11-config
lrwxr-xr-x 1 liushihyen admin 43 4 25 15:54 /usr/local/bin/python3.12 -> ../Cellar/python@3.12/3.12.3/bin/python3.12
lrwxr-xr-x 1 liushihyen admin 50 4 25 15:54 /usr/local/bin/python3.12-config -> ../Cellar/python@3.12/3.12.3/bin/python3.12-config
lrwxr-xr-x 1 liushihyen admin 41 4 25 16:11 /usr/local/bin/python3.8 -> ../Cellar/python@3.8/3.8.19/bin/python3.8
lrwxr-xr-x 1 liushihyen admin 48 4 25 16:11 /usr/local/bin/python3.8-config -> ../Cellar/python@3.8/3.8.19/bin/python3.8-config
lrwxr-xr-x 1 liushihyen admin 43 2 1 2024 /usr/local/bin/python3.9 -> ../Cellar/python@3.9/3.9.18_2/bin/python3.9
lrwxr-xr-x 1 liushihyen admin 50 2 1 2024 /usr/local/bin/python3.9-config -> ../Cellar/python@3.9/3.9.18_2/bin/python3.9-config
如果是在 Mac上可以使用 Homebrew 指令查看通過 Homebrew 安裝的 Python 版本:
brew list | grep python
python-packaging
python@3.10
python@3.11
python@3.12
python@3.8
python@3.9
使用 pyenv管理 Ubuntu系統上的 Python
列出所有可安裝的 Python
pyenv install --list
pyenv install --list | grep " 3\."
CLI 會列出所有可以透過 pyenv 進行安裝的 Python versions
Available versions:
2.1.3
2.2.3
2.3.7...
使用 pyenv安裝 Python
使用 pyenv 安裝特定版本的 Python(ex. Python v3.10.x)
pyenv install 3.10
檢視安裝結果
檢視透過 pyenv 安裝的 Python 版本
pyenv versions
以我的 Ubuntu上的環境會在 CLI上輸出以下內容。
* system (set by /home/ubuntu/.pyenv/version)
3.9.7
3.9.7/envs/myenv
3.10.12
3.10.14
3.11.9
myenv --> /home/ubuntu/.pyenv/versions/3.9.7/envs/myenv
執行各個 Python 版本查看具體版本號,找到 Python 執行檔後,可以執行它們來查看具體版本:
python --version
python3 --version
/usr/local/bin/python3.9 --version
在 Mac上安裝 pyenv 管理虛擬環境
確認有無安裝 pyenv
要檢查 pyenv 是否已經安裝在 Mac 上,有幾種簡單的方法,第一個是使用 which 指令,這是最直接的方法,在 CLI中輸入
pyenv versions
安裝 pyenv
brew install pyenv
brew install pyenv-virtualenv
首先,brew install pyenv
這個命令使用 Homebrew package 管理器來安裝 pyenv。Homebrew 是 macOS 上非常流行的第三方 Package Manager,它簡化了在 Mac 上安裝、更新和管理各種軟體的過程。
pyenv 的工作原理是通過修改系統的 PATH 環境變量來控制哪個 Python 版本被使用。它還可以為每個項目配置特定的 Python 版本,這大大增加了開發環境的靈活性。安裝 pyenv 後,開發者可以輕鬆地安裝、管理和切換不同版本的 Python。
第二個命令 brew install pyenv-virtualenv
是用來安裝 pyenv-virtualenv package的。pyenv-virtualenv 是 pyenv 的一個擴展,它將 pyenv 和 Python 的 virtualenv 功能結合在一起。virtualenv 是一個建立隔離的 Python 環境的工具,每個環境都有自己的安裝目錄和 packages,不會與其他虛擬環境或全域安裝的 packages 相互干擾。
pyenv-virtualenv 插件讓您可以使用 pyenv 命令來創建和管理虛擬環境,而不需要單獨使用 virtualenv 命令。這簡化了工作流程,使得在不同的 Python 版本和項目環境之間切換變得更加容易。
which pyenv
which
是一個 Unix 命令,用於定位可執行文件的路徑。當您在 CLI 中輸入一個命令時,系統會在 PATH 環境變數指定的目錄中搜尋該命令的可執行文件。which
命令會顯示它找到的第一個匹配項目的完整路徑。
在這個特定的例子中,which pyenv
是在查詢 pyenv 命令的位置。
當您執行 which pyenv
時,系統會搜索 PATH 中的所有目錄,尋找名為 “pyenv” 的可執行文件。如果找到了,它會顯示該文件的完整路徑,以我的 Ubuntu環境來說,CLI 會輸出如下的內容:
/usr/local/bin/pyenv
嘗試執行 pyenv 指令,直接在 CLI中輸入,檢視目前安裝的 pyenv版本
pyenv --version
安裝虛擬環境
pyenv virtualenv 3.10 deus_langchain_lab_pyenv
列出目前系統中有哪些 pyenv的虛擬環境
pyenv versions
會看到系統中新增了一個名為 deus_langchain_lab_pyenv
的虛擬環境
* system (set by PYENV_VERSION environment variable)
3.9.7
3.9.7/envs/myenv
3.10.12
3.10.14
3.10.14/envs/deus_langchain_lab_pyenv
3.11.9
deus_langchain_lab_pyenv --> /home/ubuntu/.pyenv/versions/3.10.14/envs/deus_langchain_lab_pyenv
myenv --> /home/ubuntu/.pyenv/versions/3.9.7/envs/myenv=
啟動虛擬環境
pyenv local myproject-env
使用 Homebrew 安裝的 pyenv,可以用以下指令檢查
brew list | grep pyenv
使用 pyenv
使用 pyenv 建立新的虛擬環境
pyenv virtualenv {{Python Version}} {{Virtual Environment Name}}
pyenv virtualenv 3.9.7 myproject-env
pyenv
是一個的 Python 版本管理工具。它允許我們在同一台機器上安裝和使用多個 Python 版本。
virtualenv
是 pyenv
命令的一個子命令。它告訴 pyenv,我們想要創建一個新的虛擬環境。虛擬環境是一個獨立的 Python 環境,它有自己的 Python 解釋器和套件集。這樣可以確保不同專案之間的依賴不會相互干擾。
3.9.7
是我們要用來創建這個虛擬環境的 Python 版本。這意味著新創建的虛擬環境將使用 Python 3.9.7 版本。使用特定版本的 Python 可以確保我們的專案在不同環境中的一致性。
最後,myproject-env
是我們給這個新虛擬環境起的名字。這個名字可以是任何我們想要的,通常會選擇一個能反映專案特性的名稱。在未來,我們可以通過這個名字來啟動或管理這個虛擬環境。
執行這個命令後,pyenv 會創建一個新的虛擬環境。這個環境會包含一個乾淨的 Python 3.9.7 安裝,以及一些基本的工具如 pip。這個新環境是獨立的,不會影響到系統的 Python 安裝或其他虛擬環境。
創建虛擬環境後,我們可以使用 pyenv activate myproject-env
來啟動它。啟動後,我們就可以在這個環境中安裝專案所需的特定套件,而不會影響到其他專案或系統級的 Python 安裝。
如何切換於虛擬環境間
切換進入使用 pyenv 建立起名為 {{Virtual Environment Name}} 的虛擬環境
pyenv activate {{Virtual Environment Name}}
例如我要切換到我一個名為 deus_langchain_lab_pyenv
的虛擬環境
pyenv activate deus_langchain_lab_pyenv
成功完成虛擬環境啟動我的 CLI將呈現如下:
(deus_langchain_lab_pyenv) ubuntu@ip-xxx-xxx-xxx-xxx:~/wwwdata/sites/python_lab$
離開當前的 pyenv 虛擬環境
pyenv deactivate
檢視當前使用的 Python Interpreter
pyenv which python
這會顯示類似下方的輸出在 CLI中:
/home/ubuntu/.pyenv/versions/deus_langchain_lab_pyenv/bin/python
為何在不同的 Virtual Environment下用 which python
看到的都是如下的輸出呢?
/home/ubuntu/.pyenv/shims/python
pyenv 使用一種稱為 “shims” 的技術來管理不同的 Python 版本和虛擬環境。當你安裝 pyenv 時,它會在你的 PATH 中插入一個 “shims” 目錄。這個目錄包含了許多輕量級的可執行文件,這些文件會攔截對 Python 及其相關工具的調用。
當你執行 python
命令時,實際上首先執行的是 shim。這個 shim 會檢查當前環境的設置(如通過 pyenv local
或 pyenv global
設置的版本),然後調用適當的 Python 解釋器。這就是為什麼 which python
總是指向 shim 路徑,而不是實際的 Python 解釋器路徑。
雖然 which python
顯示的是 shim 的路徑,但實際使用的 Python 解釋器是正確的,對應於你當前所啟用的虛擬環境。如果你想看到實際使用的 Python 解釋器路徑,可以使用 pyenv which python
命令。這個命令會顯示當前環境中實際使用的 Python 解釋器的完整路徑。
這種設計使得 pyenv 能夠絲滑的在不同的 Python 版本和虛擬環境之間切換,而無需修改系統的 PATH 或其他環境變數。它提供了一種靈活的方式來管理多個 Python 版本和環境,特別適用於需要在不同項目中使用不同 Python 版本的開發者。
如何不切換環境去執行某一個特定虛擬環境內的 Python scripts?
~/.pyenv/versions/環境名稱/bin/python your_script.py
如何離開虛擬環境?
pyenv shell system
pyenv shell {{Virtual Environment Name}} 與 pyenv local {{Virtual Environment Name}} 兩者間的差別
pyenv shell {{Virtual Environment Name}}
- 臨時性:只在當前的 shell 會話中生效。
- 範圍:只影響當前的終端視窗或 shell 會話。
- 持久性:關閉終端或開啟新的 shell 會話後就失效。
- 優先級:優先級最高,會覆蓋 global 和 local 設置。
- 使用場景:臨時測試或在特定會話中使用不同的 Python 版本。
- 取消方法:使用 pyenv shell –unset 或關閉當前 shell。
pyenv local {{Virtual Environment Name}}
- 持久性:在特定目錄中持久生效。
- 範圍:只影響當前目錄及其子目錄。
- 機制:在當前目錄創建一個
.python-version
文件。 - 優先級:高於 global 設置,但低於 shell 設置。
- 使用場景:為特定專案設置 Python 版本或虛擬環境。
- 取消方法:刪除
.python-version
文件或使用pyenv local --unset
。
使用建議
- 對於特定專案,使用
pyenv local
設置專案的 Python 環境。 - 如果需要臨時切換環境進行測試或其他操作,使用
pyenv shell
。 - 在使用
pyenv local
後,進入該目錄時會自動切換到指定的環境。
檢視目前環境中有哪些 Virtual Environments
find ~/ -type d -name "venv" -o -name ".venv"
/home/ubuntu/anaconda3/lib/python3.9/venv
/home/ubuntu/anaconda3/lib/python3.9/site-packages/jedi/third_party/typeshed/stdlib/3/venv
/home/ubuntu/anaconda3/pkgs/python-3.9.12-h12debd9_0/lib/python3.9/venv
/home/ubuntu/anaconda3/pkgs/jedi-0.18.1-py39h06a4308_1/lib/python3.9/site-packages/jedi/third_party/typeshed/stdlib/3/venv
/home/ubuntu/.pyenv/versions/3.9.7/lib/python3.9/venv
/home/ubuntu/.pyenv/versions/3.10.14/lib/python3.10/venv
/home/ubuntu/.pyenv/versions/3.11.9/lib/python3.11/venv
/home/ubuntu/.pyenv/versions/3.10.12/lib/python3.10/venv
pyenv versions
* system (set by /home/ubuntu/.pyenv/version)
3.9.7
3.9.7/envs/myenv
3.10.12
3.10.14
3.11.9
myenv --> /home/ubuntu/.pyenv/versions/3.9.7/envs/myenv
安裝 LLM實驗環境
安裝 OpenAI
pip install openai
安裝 LangChain
pip install langchain
安裝進行數據分析或科學計算相關 packages
pip install numpy pandas matplotlib scipy
安裝 MySQL
sudo apt-get update
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pkg-config
pkg-config --version
pip install mysql-connector-python mysqlclient
安裝 python-dotenv
python-dotenv
是一個非常實用的 Python 套件,它的主要功能是幫助開發者管理專案中的環境變數。這個套件的核心概念 revolves 圍繞著讀取和設置 .env
檔案中的 key-value pair。
在軟體開發過程中,我們經常需要處理各種設定資訊,例如資料庫連接字串、API Key、伺服器IP等。這些資訊通常會因不同的執行環境(如開發、測試、生產)而有所不同。python-dotenv
就是用來彈性的管理這些配置。
使用 python-dotenv
,你可以將這些配置資訊存儲在一個名為 .env
的檔案中。這個檔案通常包含一系列的 key-value pair,每一行代表一個環境變數。例如:DATABASE_URL=postgresql://user:pass@localhost/db
。python-dotenv
會讀取這個檔案,並將這些鍵值對設置為環境變數。
這個 package 能讓你將敏感資訊(如密碼、API金鑰)從程式碼中分離出來。
實務上我們要將 .env
檔案加入到 .gitignore
中,這樣就可以避免將敏感資訊上傳到版本控制系統,以提高專案的安全性。
另外 python-dotenv
還支援多環境配置。開發者可以為不同的環境(如開發、測試、生產)維護不同的 .env
檔案,使得在不同環境間切換變得非常容易。這大大提高了專案的可移植性和靈活性。
在實際使用中,python-dotenv
提供了多種方法來載入環境變數。開發者可以在程式啟動時自動載入,也可以在需要時手動載入。它還提供了覆蓋現有環境變數的選項,讓你能夠更精細地控制配置。
pip install python-dotenv
檢視所有已安裝的套件
pip list
命令會在 CLI 中顯示所有已安裝套件的列表,包括套件名稱和版本號。
pip list
pip list --verbose
會額外顯示每個套件的位置和安裝者等資訊。
pip list --verbose
安裝 Jupyter Notebook
安裝指令
pip install notebook
pip install jupyterlab
確認安裝
jupyter --version
Selected Jupyter core packages...
IPython : 8.27.0
ipykernel : 6.29.5
ipywidgets : not installed
jupyter_client : 8.6.2
jupyter_core : 5.7.2
jupyter_server : 2.14.2
jupyterlab : 4.2.5
nbclient : 0.10.0
nbconvert : 7.16.4
nbformat : 5.10.4
notebook : 7.2.2
qtconsole : not installed
traitlets : 5.14.3
啟動 notebook
jupyter notebook
jupyter notebook > /dev/null 2>&1 &
nohup jupyter notebook > jupyter.log 2>&1 &
首先列出所有運行中的 notebook
jupyter notebook list
停止 notebook
jupyter notebook stop
其他 package 相關管理
列出已安裝的 packages
pip list
這會以 requirements.txt 的格式顯示套件,方便直接複製到文件中。
pip freeze
只顯示用戶安裝的 packages(不包括預設 packages)
pip list --user
以 JSON 格式輸出
pip list --format=json