iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

Pipenv 是什麼呢?

想像一下,當你現在是個專業的工程師,身上背著十幾個不同類型的專案(好啦,有點誇張了),每個專案都需要用到不同的 Python 版本、套件,這時候如果沒有好好的管理的話,你電腦裡面應該已經裝了一堆套件,你的環境一片大混亂,A 專案要用到 X 套件的 3.9 版本,B 專案又要用到 X 套件的 2.8 版本,這時候不可能一下安裝一下移除。

這時候你一定想要每個專案都有一個虛擬的環境,每個虛擬環境之間互不影響,這樣就可以擁有一個乾淨的環境可以開發,而這個東西就是 pipenv ,而 pipenv 的位置正常會與專案擺放在一起。因為如果其他人也要 clone 整個專案時,可以直接根據 pipenv 所創建的套件管理的檔案 Pipfile 直接重建一個虛擬環境,不需要一個一個找需要裝什麼套件了。

安裝pipenv

那麼 pipenv 要怎麼安裝呢?

很簡單,在 CMD 中輸入

$ pip install pipenv

輸入完後按下 Enter,等待執行完就安裝好了。

使用pipenv

那麼 pipenv 要怎麼使用呢?

假設現在要開發一個新的專案,專案在 D:/ithome/ 裡面,需要建立一個虛擬環境,首先要打開 CMD 切換到 D:/ithome/ (也可以透過檔案總管進到資料夾後直接在上方那條輸入 CMD ,就可以直接進去指定的位置了)。

進去後會長這樣,注意前面的路徑要確認是想要建立的位置,然後輸入

# 建立 Python 3 的環境
$ pipenv --three

# 建立 Python 2 的環境
$ pipenv --two

# 如果要指定版本的話用這行,前提是要有裝指定版本
$ pipenv --python 3.6

執行完後會長這樣

此時的檔案結構應該會像這樣

ithome
└── Pipfile

安裝套件

如果要在虛擬環境安裝套件,例如 requests 套件,就輸入

$ pipenv install requests

輸入完後按下 Enter ,等待執行完就安裝好了。如果要同時安裝多個不用一直打,只要加個空格繼續輸入就好了,例如:

$ pipenv install requests beautifulsoup4

執行完後會多出一個 Pipfile.lock 的檔案是正常的,此時的檔案結構應該會像這樣。

ithome
├── Pipfile
└── Pipfile.lock

安裝特定版本

如果要指定版本,就在後面加個 ==<version number> ,例如:

$ pipenv install requests==2.13.0

執行

輸入以下指令就可以執行 Python 檔案了。

$ pipenv run python <file>

或是直接進入虛擬環境,然後就可以普通的執行了。

# 進入虛擬環境
$ pipenv shell

# 執行
$ python <file>

# 退出虛擬環境
$ exit

requirements.txt

如果是其他人的專案,應該有機會看到 requirements.txt 這個檔案,這個是紀錄了需要安裝什麼套件的記錄檔(我也不太知道如何形容,所以姑且稱呼它為記錄檔),在建立虛擬環境時( pipenv --three ),如果專案裡面有 requirements.txt 會自動安裝好裡面的套件,如果需要產生 requirements.txt 的檔案就輸入

$ pipenv lock -r

如果建好環境後才找到 requirements.txt (沒安裝到的意思),可以透過以下指令安裝

$ pipenv install -r requirements.txt

其他指令

# 移除虛擬環境(Pipfile不會跟著刪除喔)
$ pipenv --rm

# 顯示虛擬環境信息
$ pipenv --venv

# 顯示虛擬環境中 Python 解釋器信息
$ pipenv --py

# 查看目前安裝的庫及其版本
$ pipenv graph

# 檢查安全漏洞
$ pipenv check

.env

如果有較機密的資訊不方便放在程式裡面,可以使用 .env 檔儲存在專案根目錄(在哪裡?就是專案資料夾進去的位置,例如前面的 D:/ithome/ 就是), pipenv runpipenv shell 會自動讀取,並且可以透過 os.environ['<key>'] 獲取。大概寫法長這樣:

SECRET_KEY = b'\x95\xb1\xb4r\xacz\xb6\xe3\xff\xe8\xdb\xd24\x16\xcc.'

那麼就大概這樣,虛擬環境弄好可以避免掉因為版本之類的問題而產生的隱藏 Bug 。

大家掰~掰~


上一篇
Day 08 import 進階
下一篇
Day 10 Git
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言