使用虛擬環(huán)境實(shí)現(xiàn)Python版本和依賴庫(kù)的兼容
Python 開發(fā)環(huán)境非常靈活,得益于可以創(chuàng)建虛擬環(huán)境。
難道全局地安裝完 python 支持包然后直接 pip 再安裝一波依賴包就不可以開發(fā) python 程序了嗎?
明顯是可以的,而且可以運(yùn)行的非常好。不過,如果你接手了別人的代碼工程,卻發(fā)現(xiàn)對(duì)方使用的 python 版本或者依賴庫(kù)都和你的環(huán)境不兼容時(shí),怎么辦?打算卸掉自己原來的那一套環(huán)境再重來嗎?真麻煩!
其實(shí),虛擬環(huán)境就能完美解決這個(gè)苦惱。
創(chuàng)建
創(chuàng)建虛擬環(huán)境時(shí),使用對(duì)于 python2 和 python3 的配置細(xì)節(jié)不一樣,但是思路是一樣的。
python2 需要通過第三方包 virtualenv
來創(chuàng)建虛擬環(huán)境。
先通過 pip 模塊安裝第三方包
pip install virtualenv
然后在自己的工程目錄里啟動(dòng)執(zhí)行指令
virtualenv venv
上面的指令會(huì)自動(dòng)創(chuàng)建文件夾 venv,該文件夾內(nèi)就存儲(chǔ)著虛擬環(huán)境的所有內(nèi)容。
而python3 僅需要通過語(yǔ)言自帶的模塊 venv
來創(chuàng)建虛擬環(huán)境,python2 是沒有這個(gè)模塊的。
由于 python3 是目前 python 的主流版本,所以下面的介紹只適用于 python3,并且適用版本是 Python 3.8.10。
在自己的工程目錄里啟動(dòng)執(zhí)行指令
// windows cmd
python -m venv venv
啟動(dòng)
創(chuàng)建好虛擬環(huán)境后,開發(fā)和維護(hù)這個(gè)工程時(shí),希望工程依賴的 python 版本和依賴包等能獨(dú)立被管理起來,并且不需和全局環(huán)境兼容,那么這個(gè)工程的 python 版本和所有的依賴包都需要只在這個(gè)虛擬的環(huán)境下安裝和儲(chǔ)存。
啟動(dòng)開發(fā)調(diào)試或者安裝第三方依賴包之前,啟動(dòng)環(huán)境僅需要執(zhí)行在創(chuàng)建環(huán)境時(shí)自動(dòng)生成的腳本。
// windows cmd
.\venv\Scripts\activate.bat
// windows powershell
.\venv\Scripts\Activate.ps1
// linux bash
source .\venv\Scripts\activate
然后你會(huì)看到命令窗口的命令行前面多了個(gè)(venv),表示虛擬環(huán)境已啟動(dòng)
(venv) D:\prj\venv>
而一旦你需要轉(zhuǎn)移工程時(shí),你也就僅需要把存放虛擬環(huán)境的文件夾 venv 一起拷貝即可。
安裝依賴包
創(chuàng)建完虛擬環(huán)境后,來看看有哪些包已經(jīng)被安裝了
(venv) D:\prj\venv>pip list Package Version ---------- ------- pip 21.1.1 setuptools 56.0.0 WARNING: You are using pip version 21.1.1; however, version 22.3.1 is available. You should consider upgrading via the 'd:\prj\venv\venv\scripts\python.exe -m pip install --upgrade pip' command.
出警告了,說是建議升級(jí)當(dāng)前的模塊 pip 版本。估計(jì)是當(dāng)前的版本出了一些比較嚴(yán)重的bug,為了減少不必要的麻煩,升吧。
(venv) D:\prj\venv>python -m pip install --upgrade pip Requirement already satisfied: pip in d:\prj\venv\venv\lib\site-packages (21.1.1) Collecting pip Using cached pip-22.3.1-py3-none-any.whl (2.1 MB) Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 21.1.1 Uninstalling pip-21.1.1: Successfully uninstalled pip-21.1.1 Successfully installed pip-22.3.1
假如因?yàn)楣こ虒?shí)際需要開發(fā)GUI,那么可以引入第三方包 wxPython,使用前還是需要安裝的。
有時(shí)候吧,你會(huì)發(fā)現(xiàn)很不幸,安裝 wxPython 失敗了。因?yàn)榈谌桨木S護(hù)其實(shí)是各自獨(dú)立的,和 python 各個(gè)版本模塊有一定的兼容性問題。建議還是換一個(gè) python 版本再試試,不過我這版本目前是沒問題的。
(venv) D:\prj\venv>pip install wxpython Collecting wxpython Using cached wxPython-4.2.0-cp38-cp38-win_amd64.whl (18.0 MB) Collecting six Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting numpy Using cached numpy-1.23.5-cp38-cp38-win_amd64.whl (14.7 MB) Collecting pillow Using cached Pillow-9.3.0-cp38-cp38-win_amd64.whl (2.5 MB) Installing collected packages: six, pillow, numpy, wxpython Successfully installed numpy-1.23.5 pillow-9.3.0 six-1.16.0 wxpython-4.2.0
再看看當(dāng)前的環(huán)境
(venv) D:\prj\venv>pip list Package Version ---------- ------- numpy 1.23.5 Pillow 9.3.0 pip 22.3.1 setuptools 56.0.0 six 1.16.0 wxPython 4.2.0
重復(fù)利用環(huán)境依賴配置信息
問題來了,上面的示例只是安裝了一個(gè)依賴包就有了這么長(zhǎng)的配置,如果我安裝的依賴包非常多,多到自己都不記得了,然后萬一我把文件夾 venv 的內(nèi)容全刪掉了,也就是說我需要重新配置環(huán)境,這時(shí)是不是得瘋掉?
不用擔(dān)心,有個(gè)很好的方法保存當(dāng)前的環(huán)境依賴包信息到本地文件。
pip list > requirements.txt
上面的指令將當(dāng)前的依賴包關(guān)系轉(zhuǎn)存到了文件 requirements.txt 中,至于為什么要用這個(gè)名字呢?這里其實(shí)沒有特殊要求,只是為了兼容某些開發(fā)平臺(tái)的習(xí)慣,比如著名的 Pycharm。
好了,配置保存到了本地,那么在依賴包缺失的環(huán)境中怎么重復(fù)利用這個(gè)配置信息呢?
pip install -r requirements.txt
這樣子就一鍵恢復(fù)了原來保存的安裝配置。在 Pycharm 平臺(tái)會(huì)自動(dòng)識(shí)別工程根目錄下面的 requirements.txt 這個(gè)文件名的配置。
退出
有些情況下,需要臨時(shí)退出虛擬環(huán)境的配置,調(diào)用對(duì)應(yīng)的腳本
// windows cmd
.\venv\Scripts\deactivate.bat
到此這篇關(guān)于使用虛擬環(huán)境實(shí)現(xiàn)Python版本和依賴庫(kù)的兼容的文章就介紹到這了,更多相關(guān)Python版本和依賴庫(kù)的兼容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+Selenium自動(dòng)化環(huán)境搭建與操作基礎(chǔ)詳解
Selenium是如今最常用的自動(dòng)化測(cè)試工具之一,支持快速開發(fā)自動(dòng)化測(cè)試框架,且支持在多種瀏覽器上執(zhí)行測(cè)試。本文將介紹關(guān)于Selenium?Python自動(dòng)化腳本環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下2022-03-03Python文件基本操作open函數(shù)應(yīng)用與示例詳解
這篇文章主要為大家介紹了Python文件基本操作open函數(shù)應(yīng)用與示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Python讀取含url圖片鏈接的txt文檔方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了三種Python讀取含url圖片鏈接的txt文檔方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04關(guān)于pandas.date_range()的用法及說明
這篇文章主要介紹了關(guān)于pandas.date_range()的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07