Python库安装之requirements.txt, environment.yml
目錄
1. 前言
2. requirements.txt
2.1 生成和使用命令
2.2 內容
3. environment.yml
3.1 常見問題
4. 總結
4.1 yml or yaml?
1. 前言
????????最近安裝了一些從github上clone下載的開源python軟件包,經歷了許許多多的酸甜苦辣。
? ? ? ? 在python軟件包,通常都會包含requirements.txt, environment.yml, setup.py三者之中某些或者全部,一開始完全不知道都是啥東東,通常都是遵照安裝指示傻傻地一步一步走。但是久病成醫,查閱了一些網上相關的資源逐漸也(自以為)明白了它們是咋回事。本文做一個簡單的總結,不過這些只是小白的入門級的求生指南總結(所以不會包含高級使用相關的內容),如有錯漏偏誤歡迎指正^-^
? ? ? ? 簡而言之,requirements.txt, environment.yml是同一類的東西,它們提供的是當前軟件包安裝運行所需要的環境或者依賴信息,即這些東西的安裝是當前軟件包安裝和運行的前提條件。這些信息相當于是開發者給使用者提供的用于恢復自己開發時的環境的信息。
? ? ? ? setup.py跟以上兩者是完全不一樣的,它就是用于安裝當前軟件包自身的安裝腳本。這個要更加復雜一些,不在本文描述范圍。
?
2. requirements.txt
2.1 生成和使用命令
????????requirements.txt的生成(開發者寫的)用pip freeze命令,安裝時使用也需要用pip命令,pip生成的requirements.txt用conda install無法識別。如下例所示:
pip freeze > requirements.txt # 生成requirements.txtpip install -r requirements.txt # 從requirements.txt安裝依賴2.2 內容
????????以下為一個(我正在鼓搗的一個包的)requirements.txt示例,當然這里并沒有包含requirements.txt所有可能的語法要素(一般的像我這樣的菜鳥也管不了這些),知道以上兩個命令在大部分情況下足以生活自理了^-^。如果用"=="的話是指定了一個特定版本的包,而用“>=”則表示只要不低于這個版本就可以了,簡明易懂。至于帶"-e"選項的那兩行我也不懂(待查閱學習和補充)。。。^-^
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”命令因為是提取當前環境的信息,因此所生成的requirements.txt應該都是"==",">="是(確信對應包只要不低于這個版本即可而)手動編輯修改的(我瞎猜的,待確認)。
3. environment.yml
? ? ? ? 注:關于yml or yaml?, 參見本文最后的解釋。
????????environment.yml是用conda命令將環境信息導出備份的文件。
? ? ? ? 創建命令如下:
conda env export > environment.yml? ? ? ? 軟件安裝時則執行以下命令就可以恢復其運行環境和依賴包:
conda env create -f environment.yml????????注1:.yml文件移植過來的環境只是安裝了你原來環境里用conda install等命令直接安裝的包,你用pip之類裝的東西沒有移植過來,需要你重新安裝。--待確認。
? ? ? ? 注2:environment.yml中包含該文件創建時所在的虛擬環境名稱,不需要先執行"conda env create"創建并進入虛擬環境,直接在base環境下執行就會自動創建虛擬環境以及安裝其中的依賴包(這個是與pip install -r requirements.txt不同的)。當然這就要求你的當前環境中沒有同名的虛擬環境。如果暗裝者不想使用environment.yml中內置的虛擬環境名(在environment.yml的第一行),可以使用-n選項來指定新的虛擬環境名,如下所示:
conda env create -f environment.yml -n new_env_name? ? ? ? environment.yml長得什么樣子呢?如下是一個示例:
3.1 常見問題
????????在使用以上命令恢復環境時常見的兩個問題:
? ? ? ? 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: ......
? ? ? ? 這個就是上面所說的yml中所含的虛擬環境名與當前既存虛擬環境名沖突了,有兩種解決方法,其一是直接修改yml文件中第一行的虛擬環境名,其二是如上所示在命令行用-n指定新的虛擬環境名。
4. 總結
? ? ? ? 簡而言之,conda的.yml提供的信息比pip的requirements.txt提供的信息更完整,所以如果是使用conda進行開發和安裝的話,當然應該優先選擇conda的,yml.
4.1 yml or yaml?
? ? ? ? 有些時候你看到的不是yml后綴,而是yaml后綴,那它們有沒有什么不同呢?
? ? ? ? 參見:symfony - What is the difference between .yaml and .yml extension? - Stack Overflow
????????看上去,結論是它們沒有什么區別,瓶子里的酒都是相同的,都是YAML格式的內容。使用yml有歷史原因以及“懶人”們的(用更短一點的后綴名的)習慣使然^-^。
總結
以上是生活随笔為你收集整理的Python库安装之requirements.txt, environment.yml的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乞丐-鼎然
- 下一篇: 【python】实现将json字幕转sr