向下兼容特性是軟件開(kāi)發(fā)系統(tǒng)的一個(gè)重要指標(biāo)牲剃,它是指一個(gè)新的系統(tǒng)或者軟件能夠與舊的系統(tǒng)或軟件兼容并正常運(yùn)行糙麦。這意味著舊系統(tǒng)或軟件可以在新系統(tǒng)或軟件中使用歇攻,而不會(huì)出現(xiàn)問(wèn)題驮樊。向下兼容對(duì)于提高軟件或系統(tǒng)的可用性非常重要粗恢,因?yàn)樗试S用戶在不更換舊系統(tǒng)或軟件的情況下使用新系統(tǒng)或軟件柑晒。
我們知道MacOS系統(tǒng)從Monterey12.3版本起就移除了系統(tǒng)內(nèi)置的Python2,更不消說(shuō)最新的Ventura13.1了眷射,但有時(shí)候我們依然需要古早版本的Python2.x來(lái)維護(hù)或者更新一些“祖?zhèn)黜?xiàng)目”匙赞,不得不承認(rèn)佛掖,這類低版本的“祖?zhèn)黜?xiàng)目”在各種中大型企業(yè)內(nèi)可謂是層出不窮,那么在最新的Ventura13.1系統(tǒng)中涌庭,就得重新安裝Python2版本芥被。
Docker構(gòu)建Python2
最簡(jiǎn)單的方式是通過(guò)Docker鏡像來(lái)構(gòu)建Python2開(kāi)發(fā)環(huán)境,通過(guò)使用容器坐榆,開(kāi)發(fā)者可以輕松地將開(kāi)發(fā)環(huán)境與應(yīng)用程序隔離開(kāi)來(lái)拴魄,這有助于避免依賴沖突和版本混亂。
直接拉取Python2的Docker鏡像文件:
docker pull python:2.7.18-slim-stretch
隨后運(yùn)行進(jìn)入Python2命令行:
docker run -it --name python2 python:2.7.18-slim-stretch
程序返回:
? qiniu_async docker run -it --name python2 python:2.7.18-slim-stretch
Python 2.7.18 (default, Apr 20 2020, 20:08:54)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
當(dāng)然了席镀,構(gòu)建開(kāi)發(fā)環(huán)境并非只需要開(kāi)啟命令行匹中,還需要通過(guò)pip安裝一些古早版本的三方依賴,此時(shí)退出Python2命令行:
exit()
隨后查看Python2的容器id
? ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41ef4af5169d python:2.7.18-slim-stretch "python2" 8 minutes ago Up 5 minutes python2
? ~
進(jìn)入容器內(nèi)終端:
docker exec -it 41ef4af5169d /bin/sh
此時(shí)豪诲,就可是使用pip命令來(lái)安裝一些老版本的軟件了顶捷,比如說(shuō)Django:
pip install django@1.11.29
程序返回:
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting django
Downloading Django-1.11.29-py2.py3-none-any.whl (6.9 MB)
|████████████████████████████████| 6.9 MB 8.9 MB/s
Collecting pytz
Downloading pytz-2022.7-py2.py3-none-any.whl (499 kB)
|████████████████████████████████| 499 kB 20.7 MB/s
Installing collected packages: pytz, django
Successfully installed django-1.11.29 pytz-2022.7
WARNING: You are using pip version 20.0.2; however, version 20.3.4 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
# pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Package Version
---------- -------
Django 1.11.29
pip 20.0.2
pytz 2022.7
setuptools 44.1.0
wheel 0.34.2
安裝成功后,退出容器屎篱,然后提交更改:
# exit
? qiniu_async docker commit 41ef python:2.7.18-slim-stretch
sha256:119b30be68c806bdd4c74ffa3da115ba6ab144a91664a13e728c529c1fd5bca8
如此服赎,就算容器被銷毀,再次通過(guò)鏡像啟動(dòng)容器交播,也可以保留安裝的老版本軟件重虑。
HomeBrew安裝虛擬環(huán)境構(gòu)建Python2
如果不想使用Docker,也可以考慮Python虛擬環(huán)境秦士,它是在主機(jī)操作系統(tǒng)之上的一個(gè)獨(dú)立的目錄嚎尤,其中包含一套完全獨(dú)立的Python解釋器和一組庫(kù)和軟件包。它可以在不影響其他項(xiàng)目的情況下伍宦,為單個(gè)項(xiàng)目創(chuàng)建一套特定的運(yùn)行環(huán)境芽死。
首先安裝HomeBrew:
/bin/zsh -c "$(curl -fsSLhttps://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”
隨后執(zhí)行清理和升級(jí):
brew cleanup && brew update
安裝虛擬環(huán)境:
brew install pyenv
隨后安裝需要的Python2版本:
pyenv install 2.7.18
接著添加環(huán)境變量:
echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc
之后就可以開(kāi)啟虛擬環(huán)境了:
pyenv init
注意重啟終端后,就可以切換Python版本了:
pyenv shell 2.7.18
結(jié)語(yǔ)
Docker容器和Python虛擬環(huán)境都可以讓MacOs系統(tǒng)做到向下兼容開(kāi)發(fā)和維護(hù)古早項(xiàng)目次洼,虛擬環(huán)境主要用于在同一臺(tái)機(jī)器上管理多個(gè)Python項(xiàng)目的依賴關(guān)系关贵,而Docker容器則更適用于在不同的機(jī)器之間遷移應(yīng)用程序和環(huán)境,可以在任何支持Docker的機(jī)器上運(yùn)行該容器卖毁,而無(wú)需考慮底層操作系統(tǒng)的差異揖曾。