🫧 虛擬環境 & requirements.txt === ## 看自己的套件版本 ### 1. `pip list` ``` pip list ``` 會列出所有pip install的套件及其版本,會長這樣: ``` Package Version ---------- ------- numpy 1.21.0 pandas 1.3.0 requests 2.25.1 ``` ### 2. `pip freeze` ``` pip freeze ``` 一樣是列出所有pip install的套件及其版本,但列出的格式不一樣,會用這個格式做成`requirement.txt`: ``` numpy==1.21.0 pandas==1.3.0 requests==2.25.1 ``` ### 3. `pip show <package_name>` ``` pip show requests ``` 想查看特定套件的詳細資訊(如版本、安裝路徑、依賴等): ``` Name: requests Version: 2.25.1 Summary: Python HTTP for Humans. Location: /usr/local/lib/python3.9/site-packages Requires: certifi, chardet, idna, urllib3 ``` ### 4. 在 Python 裡面看 ``` import requests print(requests.__version__) ``` import你想查看的特定套件,然後印出他的版本資訊: ``` 2.25.1 ``` ## what is 'requirements.txt' `requirements.txt` 是一個用來列出 Python 專案所依賴的第三方套件及其版本的檔案。通常會長這樣: ``` #套件名 #版本 numpy==1.21.0 pandas>=1.3.0 requests==2.25.1 ``` - 指定固定版本:requests==2.25.1 - 指定最低版本:flask>=1.1.2 - 指定兼容版本:numpy~=1.19.2(會安裝 1.19.x 中的最新版本) 因為一個python專案,會需要用到不同的套件,可能也會倚賴不同的版本。如果我們要與與他人一起共同編輯一個python 專案,或是上網抓人家的code來用,透過`requirements.txt` 我們可以: - 快速給別人我們在這個python專案使用的套件版本資訊 - 快速抓取別人在這個python專案所需要使用的套件版本資訊 ==工具箱一把抓的概念== - 要先去指定的地方(哪一個目錄底下) - 名字不一定要叫`requirements.txt` 但這算是一個約定俗成的名字啦 ### 生成自己的 `requirements.txt` ``` pip freeze > requirements.txt ``` ### 安裝別人的 `requirements.txt` ``` pip install -r requirements.txt ``` ### 查看清單內容 ``` cat requirements.txt # Mac/Linux type requirements.txt # Windows ``` ## 虛擬環境 Python 環境是指在電腦系統中安裝和配置好的 Python 運行環境,這包括 Python 解譯器 ( interpreter )、標準函式庫、第三方套件、環境變數設定、和相關工具。 Python 環境可以是全域環境,如安裝在系統上的 Python,可以在整個系統中使用,也可以是虛擬環境 ( virtual environment ),它是一個獨立的環境,允許在其中安裝不同版本的 Python 和相關套件。 ### 使用虛擬環境的好處: - 避免了版本衝突:每個Python專案可能需要使用不同版本的套件,虛擬環境可以將每個專案的依賴關係隔離開,獨立安裝不同版本的 Python 和相關套件。 - 保持環境乾淨:在全域環境中安裝大量的套件可能會讓環境變得混亂且難以管理,使用虛擬環境可以只安裝專案所需的套件。 ### 安裝虛擬環境有很多不同的方法: - `venv` - `virtualenv` - `pipenv` - `pyenv` - `conda` 這裡會介紹前三個 ### 1. `venv` - 簡單輕量,適合小型項目 - python3.3開始提供 - 無法管理不同的python版本 i.e., 如果本機是python 3.7 就不能創造python 3.8的虛擬環境 ``` python -m venv myenv #可以自己取名稱 source myenv/bin/activate # Linux/Mac myenv\Scripts\activate # Windows ``` #### 退出虛擬環境 ``` deactivate # Windows & Linux/Mac ``` #### 刪除虛擬環境 ``` rm -rf myenv # Linux/Mac rd /s /q myenv # Windows ``` ### 2. `virtualenv` - 需要先安裝 `pip install virtualenv` - 功能和`venv` 差不多,但是支援到 python 2 - 一樣無法管理不同的python版本 ``` virtualenv myenv #可以自己取名稱 source myenv/bin/activate # Linux/Mac myenv\Scripts\activate # Windows ``` #### 退出虛擬環境 ``` deactivate # Windows & Linux/Mac ``` #### 刪除虛擬環境 ``` rm -rf myenv # Linux/Mac rd /s /q myenv # Windows ``` ### 3. `pipenv` - 需先安裝 `pip install pipenv` - 現在官方推薦的工具!結合了 `pip` 和 `virtualenv` 的功能。 - 僅能使用系統已安裝版本 - 適合中大型項目,需要穩定依賴和版本管理的團隊開發 #### 初始化環境的python版本 ``` pipenv --three # 指定python 3環境 pipenv --two # 指定python 2環境 pipenv install --python 3.10 # 指定明確版本 ``` #### 安裝/解除套件 ``` pipenv install requests pipenv uninstall requests ``` #### 顯示套件 ``` pipenv graph ``` #### 執行程式碼 1. 直接執行 ``` pipenv run python test.py ``` 2. 先進入虛擬環境再執行 ``` pipenv shell python test.py ``` #### 退出虛擬環境 ``` exit ``` #### 移除虛擬環境 ``` pipenv --rm ``` #### 儲存版本資訊的檔案 1. `cat Pipfile` ``` [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.5" ``` - ``[packages]`` 是本專案正式要用到的套件 - ``[dev-packages]`` 是開發中的套件,安裝方法要加`-d` `pipenv install requests==2.18.0 -d` - ``[requires]`` 是python版本 2. `cat Pipfile.lock` ``` { "_meta": { "hash": { "sha256": "abcd1234efgh5678ijkl91011mnopqrstuvwx" }, "pipfile-spec": 6, "requires": { "python_version": "3.8" } }, "default": { "flask": { "version": "==2.1.1", "hashes": [ "sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" ] }, "requests": { "version": "==2.28.1", "hashes": [ "sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" ] } }, "dev": { "pytest": { "version": "==7.3.1", "hashes": [ "sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" ] } } } ``` - 會顯示依賴套件 - 儲存最精確的版本 #### 當需要與他人配合用一樣的套件版本時 1. 使用 `requirements.txt` ``` pipenv shell # 先進去虛擬環境 pip freeze > requirements.txt # 輸出 pip install -r requirements.txt # 讀取 ``` 2. 使用 `Pipfile.lock` ``` pipenv lock # 輸出 pipenv install # 讀取 ``` --- ## Referneces 1. [【程式工具】5種自動儲存python requirements.txt方法](https://mattdataadventures.com/save_requirements_txt_file/) 2. [給自己的Python小筆記 — 解決環境套件安裝與版本問題,開始建立一個乾淨的環境 — 如何建立虛擬環境 — env 和 virtualenv 套件教學 — Windows系統](https://chwang12341.medium.com/%E7%B5%A6%E8%87%AA%E5%B7%B1%E7%9A%84python%E5%B0%8F%E7%AD%86%E8%A8%98-%E8%A7%A3%E6%B1%BA%E7%92%B0%E5%A2%83%E5%A5%97%E4%BB%B6%E5%AE%89%E8%A3%9D%E8%88%87%E7%89%88%E6%9C%AC%E5%95%8F%E9%A1%8C-%E9%96%8B%E5%A7%8B%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E4%B9%BE%E6%B7%A8%E7%9A%84%E7%92%B0%E5%A2%83-%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83-env-%E5%92%8C-virtualenv-%E5%A5%97%E4%BB%B6%E6%95%99%E5%AD%B8-windows%E7%B3%BB%E7%B5%B1-b973e53ff80) 3. [Python 的 Virtualenv 虛擬環境安裝與使用](https://medium.com/ai-for-k12/python-%E7%9A%84-virtualenv-%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83%E5%AE%89%E8%A3%9D%E8%88%87%E4%BD%BF%E7%94%A8-8645f5884aac) 4. [[Day 15] Python - 虛擬環境 ( pipenv )](https://ithelp.ithome.com.tw/articles/10301302) 5. [Python 教學 1 – 環境架設 ( pyenv ) 與 Python 簡介](https://jimmyswebnote.com/python-tutorial-pyenv/) 6. [Python 工具箱 (1) — 專案必備 Pipenv](https://medium.com/citycoddee/python-%E5%B7%A5%E5%85%B7%E7%AE%B1-1-%E5%B0%88%E6%A1%88%E5%BF%85%E5%82%99-pipenv-a517e292f6c) 7. [【教學】手把手的pipenv教學](https://www.dephilia.moe/posts/pipenv/#pipenv%E5%81%9A%E4%BA%86%E4%BB%80%E9%BA%BC)