不用 pip install,你养我吗?
我們在開發 Python 項目的時候,我們總會使用到這么幾個玩意:
pip
requirements.txt
vent
當你創建一個 Python 項目的時候,你會先整一個虛擬環境(virtualenv),在這里面使用到的第三方模塊,版本等,都只作用于你這個項目當前的環境,和其他的項目互不干擾。
比如,你可以創建一個 Python3 的虛擬環境:
現在,你的 Python 項目「my_project」就擁有了自己的 Python3 環境,你可以在這里面為所欲為,這樣好處是,在這里面所有的操作都不會和外界產生不必要的麻煩,比如你在這里使用 pip 安裝的模塊,就是只作用于這個環境中的,不會和你的系統搞得亂七八糟:
當你項目開發完成,想要給別人使用,或者在生產環境中運行時,你可以使用 pip 將項目中使用到的庫生成一個 「requirements.txt」文件:
pip freeze > requirements.txt
這時候你當前項目下會生成一個 requirements.txt 文件,這里面列出來的就是你這個項目用到的庫以及相關的版本:
那么,當別人要使用你這個項目的時候,只需要使用如下命令就可以安裝你這個項目中所有依賴的庫:
pip install -r requirements.txt
但是,經過一段時間會發現,你需要經常去修改 「requirements.txt」中的內容才能讓開發環境和生產環境相一致,比如說,你在你的項目中引用了兩個第三方庫,而它們又引用了相同的庫,但是版本不同,那么在生產環境中就可能出問題。
假設你項目引用了 「requests」和「click」庫,而它們都引用了一個叫做「帥b」的庫。但是它們使用的版本不一樣,比如 「requests」 用的是 「帥b」1.0 版本:
帥b==1.0
而 「click」 用的是 2.0 版本
帥b==2.0
這時候,生產環境想通過 pip install -r requirements.txt 來安裝依賴庫,但 pip 發現現在「帥b」的最新版本是 3.0,然后直接懵逼了,我特么到底要安裝了 「帥b」1.0 版本還是 2.0 版本還是 3.0 版本?
pip 這時候只能把先看到的那個安裝一波,先把 「帥b==1.0」給安裝了,然后再安裝一個最新的版本「帥b==3.0」。
那么現在生產環境是沒有「帥b==2.0」版本的,假設 click 庫只能用「帥b2.0」以下的版本,那么這時候在生產環境就用不了 click 的功能,項目撲街。
于是,你需要去修改「requirements.txt」,比如改成這樣規定它不要亂來:
帥b>=1.0,<=2.0
requests==2.25.1
click==7.1.2
...
那如果有很多這樣的情況,豈不是得叫爸爸了啊?
有沒有更好的使用方式,讓 Python 項目的包管理更爽呢?
那么接下來就是
學習 Python 的正確姿勢
接下來小帥b要給你分享的是:pipenv。這名字看起來是 pip + virtualenv,不過 pipenv 比他們更好用,它可以讓你的包管理更加的順滑酸爽。
接下來小帥b帶你體驗一波,首先你得先安裝好 pipenv:
pip install pipenv
pipenv 使用虛擬環境
現在,我們創建虛擬環境是這樣的,進入你的項目,使用:
pipenv install
你還可以在 install 指定虛擬環境使用的 Python 版本,比如使用 Python 2:
pipenv install --two
使用 Python 3.9.1
Piping install --python3.9.1
可以看到,我們把虛擬環境創建好了,接著使用如下命令來激活虛擬環境:
pipenv shell
當然,如果你不想激活虛擬環境,但是想直接使用虛擬環境的話,可以使用如下命令來運行:
pipenv run
看到這里,你可能會覺得,和上面的 venv 創建虛擬環境差不多啊?
打開你的項目文件,你可以看到,在使用 pipenv 創建虛擬環境的時候,多出來了兩個文件:
Pipfile
Pipfile.lock
它們是干啥的呢?其實它們就是為了解決我們剛剛說的那些包依賴的問題。
之前,我們總是需要在 requirements.txt 文件中改來改去。而現在有了它們,我們可以讓包管理變得很舒服。
也就是說,現在我們通過 pipenv 來操作第三方庫。你是刪除也好,更新也罷,它們都會幫你自動更新,你不用再去操心 requirements.txt 了。
比如,我們現在使用 pipenv 來安裝「requests」和 「click」庫:
pipenv install requests
pipenv install click
這時候 pipenv 會自動將你使用的庫更新到 「Pipfile」和 「Pipfile.lock」文件中。
pipfile:
Pipfile.lock:
pipfile 列出了我們所安裝的庫和 Python 版本等信息,Pipfile.lock 更為詳細,其中還包含了庫的哈希值,這樣我們在生產環境中使用這些庫的時候,可以保證安裝到的庫是一模一樣的。
值得注意的是,這兩文件不用我們手動操作,它們會自動隨著你的 pipenv 操作而更新。
你可以使用 pipenv lock 命令來生成 Pipfile.lock,然后在生產環境中,你只需要 pipenv install,就可以安裝項目所依賴的庫了。
現在你可以直接使用 pipenv 來代替這些玩意了:pip、requirements.txt、virtualenv。
pipenv 常用的命令
pipenv 有一些很好用的包管理命令,接下來給你介紹幾個常用到的命令:
檢查庫的安全性:
pipenv check
Checking PEP 508 requirements...
Passed!
Checking installed package safety...
All good!
你剛看到的庫的安裝:
piping install
查看庫的依賴關系:
pipenv graph
click==7.1.2
requests==2.25.1
- certifi [required: >=2017.4.17, installed: 2020.12.5]
- chardet [required: >=3.0.2,<5, installed: 4.0.0]
- idna [required: >=2.5,<3, installed: 2.10]
- urllib3 [required: >=1.21.1,<1.27, installed: 1.26.4]
卸載庫:
pipenv uninstall click
Uninstalling click...
...
? Success!
Updated Pipfile.lock (fe5a22)!
更新:
pipenv update
查看具體的庫:
pipenv open requests
進入虛擬環境:
pipenv shell
退出虛擬環境:
exit
安裝 Pipfile.lock 中的庫:
pipenv sync?
事實上,你可以直接輸入 pipenv,可以看到命令和參數的使用解釋:
OK,以上就是小帥b今天給你帶來的分享,希望對你有幫助。
推薦閱讀 誤執行了rm -fr /*之后,除了跑路還能怎么辦?!程序員必備58個網站匯總大幅提高生產力:你需要了解的十大Jupyter Lab插件總結
以上是生活随笔為你收集整理的不用 pip install,你养我吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于写完了!PyCharm操作手册 V1
- 下一篇: 漫画 | 公司测试因提Bug不规范,锒铛