Python库安装之requirements.txt, environment.yml
目錄
1. 前言
2. requirements.txt
2.1 生成和使用命令
2.2 內(nèi)容
3. environment.yml
3.1 常見(jiàn)問(wèn)題
4. 總結(jié)
4.1 yml or yaml?
1. 前言
????????最近安裝了一些從github上clone下載的開(kāi)源python軟件包,經(jīng)歷了許許多多的酸甜苦辣。
? ? ? ? 在python軟件包,通常都會(huì)包含requirements.txt, environment.yml, setup.py三者之中某些或者全部,一開(kāi)始完全不知道都是啥東東,通常都是遵照安裝指示傻傻地一步一步走。但是久病成醫(yī),查閱了一些網(wǎng)上相關(guān)的資源逐漸也(自以為)明白了它們是咋回事。本文做一個(gè)簡(jiǎn)單的總結(jié),不過(guò)這些只是小白的入門(mén)級(jí)的求生指南總結(jié)(所以不會(huì)包含高級(jí)使用相關(guān)的內(nèi)容),如有錯(cuò)漏偏誤歡迎指正^-^
? ? ? ? 簡(jiǎn)而言之,requirements.txt, environment.yml是同一類的東西,它們提供的是當(dāng)前軟件包安裝運(yùn)行所需要的環(huán)境或者依賴信息,即這些東西的安裝是當(dāng)前軟件包安裝和運(yùn)行的前提條件。這些信息相當(dāng)于是開(kāi)發(fā)者給使用者提供的用于恢復(fù)自己開(kāi)發(fā)時(shí)的環(huán)境的信息。
? ? ? ? setup.py跟以上兩者是完全不一樣的,它就是用于安裝當(dāng)前軟件包自身的安裝腳本。這個(gè)要更加復(fù)雜一些,不在本文描述范圍。
?
2. requirements.txt
2.1 生成和使用命令
????????requirements.txt的生成(開(kāi)發(fā)者寫(xiě)的)用pip freeze命令,安裝時(shí)使用也需要用pip命令,pip生成的requirements.txt用conda install無(wú)法識(shí)別。如下例所示:
pip freeze > requirements.txt # 生成requirements.txtpip install -r requirements.txt # 從requirements.txt安裝依賴2.2 內(nèi)容
????????以下為一個(gè)(我正在鼓搗的一個(gè)包的)requirements.txt示例,當(dāng)然這里并沒(méi)有包含requirements.txt所有可能的語(yǔ)法要素(一般的像我這樣的菜鳥(niǎo)也管不了這些),知道以上兩個(gè)命令在大部分情況下足以生活自理了^-^。如果用"=="的話是指定了一個(gè)特定版本的包,而用“>=”則表示只要不低于這個(gè)版本就可以了,簡(jiǎn)明易懂。至于帶"-e"選項(xiàng)的那兩行我也不懂(待查閱學(xué)習(xí)和補(bǔ)充)。。。^-^
gym>=0.14.0 jupyter>=1.0.0 numpy>=1.16.4 pandas>=0.24.2 scipy>=1.3.0 scikit-learn>=0.21.2 matplotlib>=3.1.0 -e git+https://github.com/ntasfi/PyGame-Learning-Environment.git#egg=ple -e git+https://github.com/lusob/gym-ple.git#egg=gym-ple h5py>=2.9.0 pygame>=1.9.6 tqdm>=4.32.1? ? ? ? 注意,“pip freeze”命令因?yàn)槭翘崛‘?dāng)前環(huán)境的信息,因此所生成的requirements.txt應(yīng)該都是"==",">="是(確信對(duì)應(yīng)包只要不低于這個(gè)版本即可而)手動(dòng)編輯修改的(我瞎猜的,待確認(rèn))。
3. environment.yml
? ? ? ? 注:關(guān)于yml or yaml?, 參見(jiàn)本文最后的解釋。
????????environment.yml是用conda命令將環(huán)境信息導(dǎo)出備份的文件。
? ? ? ? 創(chuàng)建命令如下:
conda env export > environment.yml? ? ? ? 軟件安裝時(shí)則執(zhí)行以下命令就可以恢復(fù)其運(yùn)行環(huán)境和依賴包:
conda env create -f environment.yml????????注1:.yml文件移植過(guò)來(lái)的環(huán)境只是安裝了你原來(lái)環(huán)境里用conda install等命令直接安裝的包,你用pip之類裝的東西沒(méi)有移植過(guò)來(lái),需要你重新安裝。--待確認(rèn)。
? ? ? ? 注2:environment.yml中包含該文件創(chuàng)建時(shí)所在的虛擬環(huán)境名稱,不需要先執(zhí)行"conda env create"創(chuàng)建并進(jìn)入虛擬環(huán)境,直接在base環(huán)境下執(zhí)行就會(huì)自動(dòng)創(chuàng)建虛擬環(huán)境以及安裝其中的依賴包(這個(gè)是與pip install -r requirements.txt不同的)。當(dāng)然這就要求你的當(dāng)前環(huán)境中沒(méi)有同名的虛擬環(huán)境。如果暗裝者不想使用environment.yml中內(nèi)置的虛擬環(huán)境名(在environment.yml的第一行),可以使用-n選項(xiàng)來(lái)指定新的虛擬環(huán)境名,如下所示:
conda env create -f environment.yml -n new_env_name? ? ? ? environment.yml長(zhǎng)得什么樣子呢?如下是一個(gè)示例:
3.1 常見(jiàn)問(wèn)題
????????在使用以上命令恢復(fù)環(huán)境時(shí)常見(jiàn)的兩個(gè)問(wèn)題:
? ? ? ? 1:Warning: you have pip-installed dependencies in your environment file, but you do not list pip itself as one of your conda dependencies.
????????解決辦法:在yml文件中添加pip依賴,即在yml文件中添加如下行:
????????- pip
?
? ? ? ? 2:CondaValueError: prefix already exists: ......
? ? ? ? 這個(gè)就是上面所說(shuō)的yml中所含的虛擬環(huán)境名與當(dāng)前既存虛擬環(huán)境名沖突了,有兩種解決方法,其一是直接修改yml文件中第一行的虛擬環(huán)境名,其二是如上所示在命令行用-n指定新的虛擬環(huán)境名。
4. 總結(jié)
? ? ? ? 簡(jiǎn)而言之,conda的.yml提供的信息比pip的requirements.txt提供的信息更完整,所以如果是使用conda進(jìn)行開(kāi)發(fā)和安裝的話,當(dāng)然應(yīng)該優(yōu)先選擇conda的,yml.
4.1 yml or yaml?
? ? ? ? 有些時(shí)候你看到的不是yml后綴,而是yaml后綴,那它們有沒(méi)有什么不同呢?
? ? ? ? 參見(jiàn):symfony - What is the difference between .yaml and .yml extension? - Stack Overflow
????????看上去,結(jié)論是它們沒(méi)有什么區(qū)別,瓶子里的酒都是相同的,都是YAML格式的內(nèi)容。使用yml有歷史原因以及“懶人”們的(用更短一點(diǎn)的后綴名的)習(xí)慣使然^-^。
總結(jié)
以上是生活随笔為你收集整理的Python库安装之requirements.txt, environment.yml的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 乞丐-鼎然
- 下一篇: 计算机之父ppt,24计算机之父童年的故