Pipenv輕量級虛擬環(huán)境管理工具使用指南
前言
終于能夠擠出一點時間來總結(jié)最近學(xué)到的一些技術(shù)知識點了,博主這兩周被居家隔離-集中隔離-居家隔離來回折騰,現(xiàn)在終于是得到解放能夠空出的時間來寫寫博客了,但是項目又催的緊,寫博文的時間還是有限,這周我會盡量更新博文帶來更多干貨知識,一直以來謝謝大家的支持!學(xué)習(xí)是一個不斷堅持的動態(tài)過程,學(xué)以致用才是關(guān)鍵。
一、為什么使用pipenv?
首先我們要明白pipenv存在的開發(fā)驅(qū)動是什么,對于python虛擬環(huán)境來說已經(jīng)有virtualenv了,在anaconda直接切換一下環(huán)境就好了,那么為什么要使用pipenv這個虛擬管理工具呢?
再者就是為什么要使用虛擬環(huán)境,我們直接將所有的庫都集中安裝到一個環(huán)境中,想怎么使用就怎么使用,直接調(diào)取任何庫就可以完成功能,為啥要將其他的庫給分開呢?
那么首先來講講將所有庫都集成到一個環(huán)境下帶來的問題,可能前期會覺得特別方便,但是等到開發(fā)的項目越來越多或者是有打包的需求的話,就很麻煩了,總結(jié)一下共有三點弊端:
- 庫之間版本調(diào)試,切換問題。對于每個庫來說都有兼容與不兼容的python版本,一些特殊的庫,比如Jython庫就不支持3.x以上的庫,僅支持2.7的。如果你的項目需要使用到例如此類的庫,但是總不可能將原來的python版本給完全刪除重新裝過該版本的庫。那么環(huán)境管理工具就派上用場了。
- 使用pyinstaller打包成為一個exe程序,一般來說如果使用原始的環(huán)境去打包的話,那么由于pyinstaller的特性會使得打包的文件過于巨大。那是因為pyinstaller打包會將整個環(huán)境的依賴庫統(tǒng)一打包起來,而一些該程序沒有用到的庫會造成冗余問題。
- 包之間的依賴版本沖突,有時候集成了過多包會造成這個情況,相互依賴之間的包版本會沖突,但是如果都集中到一個環(huán)境里面就很難排查。
故有以上場景就誕生了不同python環(huán)境集成各種不同版本不同包的需求,那么讓我們再來了解一下這些虛擬環(huán)境管理工具的對比。
virtualenv
- 一個操作系統(tǒng)下,可以有多個“操作系統(tǒng)級別的”Python解釋器;
- 每個Python解釋器有一個指向自己的pip工具,兩者一一對應(yīng);
- 通過virtualenv可以虛擬任何一個“操作系統(tǒng)級別的”Python解釋器成為一個“虛擬級別”的解釋器;
- 每個“虛擬級別”的解釋器又擁有自己獨立的pip工具和site-packages。
virtualenvwrapper
virtualenvwrapper是對virtualenv接口的封裝。virtualenvwrapper會將虛擬環(huán)境的目錄統(tǒng)一保存,不需手動管理,使用起來更加便利;
pipenv
pipenv是Kenneth Reitz在2017年1月發(fā)布的Python依賴管理工具,現(xiàn)在由PyPA維護。你可以把它看做是pip和virtualenv的組合體,而它基于的Pipfile則用來替代舊的依賴記錄方式(requirements.txt),pipenv 在易用性上要簡單很多,同時增加了 lock 文件,能更好的鎖定版本。如果沒有特殊要求可以 pipenv 直接使用 lock 的版本,開發(fā)又可以小步迭代,實現(xiàn)依賴的穩(wěn)步升級。
pipenv優(yōu)缺點
優(yōu)點:
- 自動關(guān)聯(lián)項目相關(guān)的 virtualenv,能夠快速的加載 virtualenv 。
- 提供的pipenv替代pip并自帶一個依賴清單Pipfile,和依賴鎖定Pipfile.lock。
- Pipfile除了依賴清單還支持固定pypi源地址,固定python版本。
- Pipfile還支持dev依賴清單.pipenv install的包會強制使用Pipfile中的源.
- 使用pipenv graph命令可以看到依賴樹。
- 可以直接切換python2和python3
缺點:
- Windows下命令行終端開頭沒有沒有venv的名稱,讓你不知道是否在虛擬環(huán)境中,容易誤操作
- 永久設(shè)置了Pipfile文件中的源以后,Pipfile文件中看到的還是官方源,但是實際上是已經(jīng)走了你設(shè)置的源了。
二、使用步驟
1.安裝
推薦使用python3版本:
pip3 install pipenv
安裝完成后可通過
pipenv --version
查看版本和檢測是否安裝成功:
2.創(chuàng)建虛擬環(huán)境
使用命令pipenv install
,可在當(dāng)前目錄下創(chuàng)建 Pipfile
、 Pipfile.lock
文件,在虛擬環(huán)境目錄下新增一個虛擬環(huán)境
Pipfile文件: 用于保存項目的python版本、依賴包等相關(guān)信息 。
[[source]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" verify_ssl = true name = "pypi" [packages] requests = "*" pyyaml = "*" Django = "*" [dev-packages] pytest = "*" [requires] python_version = "3.7" [scripts] django = "python manage.py runserver 0.0.0.0:8080"
- source 用來設(shè)置倉庫地址,即指定鏡像源下載虛擬環(huán)境所需要的包
- packages 用來指定項目依賴的包,可以用于生產(chǎn)環(huán)境和生成requirements文件
- dev-packages 用來指定開發(fā)環(huán)境需要的包,這類包只用于開發(fā)過程,不用于生產(chǎn)環(huán)境。
requires 指定目標(biāo)Python版本
scripts 添加自定義的腳本命令,并通過 pipenv run + 名稱 的方式在虛擬環(huán)境中執(zhí)行對應(yīng)的命令 。
Pipfile 文件可以復(fù)制到其他項目內(nèi),通過執(zhí)行pipenv install命令, 根據(jù)這個 Pipfile 文件生成虛擬環(huán)境和依賴包的安裝
Pipfile.lock文件: 通過hash算法將包的名稱和版本,及依賴關(guān)系生成哈希值,保證包的完整性,除修改鏡像源,非必要情況不對該文件進行修改。
指定目錄存放虛擬環(huán)境
存放虛擬環(huán)境的目錄默認指定是C:\Users\bobo.virtualenvs
目錄下。
pipenv install --python +版本號
可指定python版本創(chuàng)建虛擬環(huán)境。
也可以通過:
pipenv install --two 創(chuàng)建指定python2.x版本的虛擬環(huán)境 pipenv install --three 創(chuàng)建指定python3.x版本的虛擬環(huán)境
下載默認的環(huán)境。
安裝第三方庫
pipenv
兼容pip命令,同樣使用pipenv install + 包名
的方式安裝第三方庫。在此目錄下打開pycharm時會默認加載此目錄對應(yīng)的虛擬環(huán)境。
在pycharm的 Terminal
終端輸入命令:
pipenv install requests
就可以了
修改鏡像源
如果官方源站安裝第三方庫的速度很慢,安裝失敗,可以修改鏡像源
pipenv
兼容pip
命令,所以也可以在命令加上參數(shù)
pipenv install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
若想要永久該虛擬環(huán)境的鏡像源,則需要打開項目目錄下的Pipfile 、 Pipfile.lock 文件,將source欄 url = "pypi.org/simple" 鏈接內(nèi)容修改為需要的鏡像源,例如修改為清華的鏡像源url = "pypi.tuna.tsinghua.edu.cn/simple"
安裝到dev環(huán)境
安裝調(diào)試工具、性能測試工具、python語法工具,這些內(nèi)容僅在本地環(huán)境有用,生產(chǎn)環(huán)境不需要這些。
比如單元測試相關(guān)的包unittest、pytest,只在開發(fā)階段有用,為了和生產(chǎn)環(huán)境的包區(qū)分開來,可以通過命令 pipenv install --dev + 包名將其歸類到【dev-packages】下。
例如安裝pytest到開發(fā)環(huán)境
pipenv install --dev pytest
常用命令
pipenv
兼容大部分的pip命令,所以 pip
命令能實現(xiàn)的內(nèi)容,也能通過pipenv
命令實現(xiàn)
卸載命令
在項目所在虛擬環(huán)境中卸載requests包,并在Pipfile文件移除包名
pipenv uninstall requests
在項目所在虛擬環(huán)境中卸載所有包,并在Pipfile文件移除包名
pipenv uninstall --all
在項目所在虛擬環(huán)境中卸載所有dev環(huán)境的包,并在Pipfile文件移除[dev-packages]中的所有包名
pipenv uninstall --all --dev
更新命令
在項目所在虛擬環(huán)境中更新requests包,并在Pipfile.lock文件中更新相應(yīng)版本信息
pipenv update requests
在項目所在虛擬環(huán)境中更新所有包,并在Pipfile.lock文件中更新相應(yīng)版本信息
pipenv update
在項目所在虛擬環(huán)境中查看已過期的包的信息
pipenv update --outdated
根據(jù)項目所在虛擬環(huán)境的Pipfile文件生成/更新Pipfile.lock文件中的依賴包信息
pipenv lock
查看命令
查看項目位置
pipenv --where
查看虛擬環(huán)境位置
pipenv --venv
查看虛擬環(huán)境python解釋器位置
pipenv --py
查看依賴包信息
pipenv graph
激活與退出虛擬環(huán)境
使用pipenv install 命令創(chuàng)建虛擬環(huán)境時,創(chuàng)建成功會默認激活虛擬環(huán)境
若想退出虛擬環(huán)境,可輸入 exit 退出(僅適用于黑屏終端,pycharm默認打開項目就加載了虛擬環(huán)境,只能修改指定的虛擬環(huán)境) 目錄下存在 Pipfile 、 Pipfile.lock 文件,已創(chuàng)建過虛擬環(huán)境,可通過命令 pipenv shell進行激活。
刪除虛擬環(huán)境
直接在該目錄下面打開終端輸入:
pipenv --rm
該命令無法在pycharm的Terminal終端執(zhí)行。刪除虛擬環(huán)境后,如果目錄下仍存在 Pipfile
、 Pipfile.lock
文件,可以通過pipenv install
重新進行安裝虛擬環(huán)境,且重新安裝的虛擬環(huán)境,名稱與刪除前一致
生成requirements.txt 文件
pipenv
可以像virtualenv
一樣使用命令生成requirements.txt文件
pipenv lock -r --dev >requirement.txt
命令中的--dev
并不是說把 Pipfile
文件中 [dev-packages]
下的包導(dǎo)出,而是把所有依賴包導(dǎo)出。 pipenv
還可以通過requirements.txt文件
安裝依賴包
pipenv install -r requirement.txt
通過pyinstaller導(dǎo)出
首先需要到安裝pipenv虛擬環(huán)境下的目錄安裝pyinstaller
pipenv install pyinstaller
將依賴包都安裝完成后直接:
#開始打包 pyinstaller -Fw -i xx.ico ./xxx.py
就好了
以上就是Pipenv輕量級虛擬環(huán)境管理工具使用指南的詳細內(nèi)容,更多關(guān)于Pipenv虛擬環(huán)境管理工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用Python從0開始實現(xiàn)一個中文拼音輸入法的思路詳解
中文輸入法是一個歷史悠久的問題,但也實在是個繁瑣的活,不知道這是不是網(wǎng)上很少有人分享中文拼音輸入法的原因,接下來通過本文給大家分享使用Python從0開始實現(xiàn)一個中文拼音輸入法,需要的朋友可以參考下2019-07-07python正則表達式去掉數(shù)字中的逗號(python正則匹配逗號)
在處理自然語言時123,000,000如果以標(biāo)點符號分割,就會出現(xiàn)問題,好好的一個數(shù)字就被逗號肢解了,因此可以先下手把數(shù)字處理干凈(逗號去掉)2013-12-12Python入門教程(三十九)Python的NumPy安裝與入門
這篇文章主要介紹了Python入門教程(三十九)Python的NumPy安裝與入門,NumPy 是一個Python包,它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫,,需要的朋友可以參考下2023-05-05簡單理解Python中的事件循環(huán)EventLoop
在 python 3中,加入了 asyncio 模塊,來實現(xiàn)協(xié)程,其中一個很重要的概念是事件循環(huán),本文我們就來自己實現(xiàn)一個相對簡單的EventLoop,從而了解一下事件循環(huán)是如何進行運轉(zhuǎn)的吧2023-10-10Python 調(diào)用VC++的動態(tài)鏈接庫(DLL)
Python下調(diào)用VC++的動態(tài)鏈接庫的腳本2008-09-09Python學(xué)習(xí)筆記之讀取文件、OS模塊、異常處理、with as語法示例
這篇文章主要介紹了Python學(xué)習(xí)筆記之讀取文件、OS模塊、異常處理、with as語法,結(jié)合實例形式簡單分析了Python針對文件、目錄的讀取、異常處理等相關(guān)操作技巧,需要的朋友可以參考下2019-06-06