🫧 虛擬環境 & 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)