問題描述
今天用requirements文件想在服務器上安裝環(huán)境,遇到了許多的坑,在這里記錄一下,有需要的朋友可以看看這里有沒有記錄你存在的問題。
問題1:
報錯內(nèi)容:
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/home/ktietz/src/ci/alabaster 161192154452/work!
在網(wǎng)上看到的方法:
在終端上,使用這段代碼在自己電腦上的生成requirements文件
pip freeze > requirements.txt
然后將requirement.txt文件上傳到服務器上,在服務器上的終端運行下面這段代碼,在服務器上安裝對應的環(huán)境。
pip install -r requirements.txt
這時候報錯如下圖
報錯內(nèi)容是不存在這個路徑,所以我打開requirement.txt文件,發(fā)現(xiàn)文件內(nèi)容如下,發(fā)現(xiàn)這個生成的txt文件并不是我們想要的格式,還生成了一堆奇怪的地址,導致在服務器上無法進行環(huán)境安裝。
于是我又查閱網(wǎng)上的資料,有人說可以在終端里運行下面這行代碼
pipreqs ./ --encoding=utf-8
注意到這里pipreqs也是一個包,需要使用pip的方式來安裝,這就產(chǎn)生了問題二
問題2:
報錯內(nèi)容:
pipreqs : 無法將“pipreqs”項識別為 cmdlet、函數(shù)、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。
發(fā)現(xiàn)問題
我用的anaconda來管理的環(huán)境,我一共有兩個環(huán)境,一個是自帶的base環(huán)境,一個是我創(chuàng)建的DL環(huán)境(deep learning),打開anaconda promot,分別輸入以下代碼,分別表示進入DL環(huán)境,并在DL環(huán)境中安裝pipreqs這個包
conda activate DL
pip install pipreqs
之后我在vscode的終端中運行
pipreqs ./ --encoding=utf-8
結(jié)果報錯:(圖中輸入的是pipreqs ./,如果輸入pipreqs ./ --encoding=utf-8一樣報錯)
查找網(wǎng)上資料,說遇到這種情況可以輸入以下代碼來解決:
pip3 show -f pipreqs
然而,在我輸入這段代碼后,出現(xiàn)了新的報錯
我明明已經(jīng)在DL環(huán)境里裝了pipreqs,而且我vscode的解釋器里面也設(shè)置的是DL環(huán)境,為何說找不到這個包?
問題解決
我猜測,我是在vscode的終端中運行的代碼,而終端可能與我選擇的解釋器無關(guān),所以我是不是在base環(huán)境里裝一個pipreqs包就可以了呢?
于是,我在anaconda promot中輸入以下代碼,分別表示退出當前環(huán)境(DL),然后在base環(huán)境中裝pipreqs包
conda deactivate
pip install pipreqs
在base環(huán)境中安裝pipreqs包成功之后,輸入下面代碼
pipreqs ./ --encoding=utf-8
之后等待時間有點長,可能需要二三十秒,在文件夾中生成了一個requirements.txt文件(如果文件夾中已有requirements.txt文件他會報錯,需要先把原有的文件刪掉),我們打開這個文件,如下圖所示。
這里有一些問題,為何一個包會出現(xiàn)兩個版本?
于是我查了下我base環(huán)境下和DL環(huán)境下的matplotlib包的版本
發(fā)現(xiàn),果然是兩個環(huán)境中版本不一樣,它在生成的時候都生成了。
然后我查了torch包,也是相同的情況,然而,numpy包卻情況不同
在兩個環(huán)境中,numpy的版本均是1.24.3,那么為何requirement.txt里面卻有一個1.23.5的版本?
這個可能是個bug,目前還不知道為什么,我采取的方式是手動刪除一個版本,這就引出了問題3
問題3:
報錯內(nèi)容:
ERROR: Cannot install matplotlib3.7.0 and matplotlib3.7.1 because these package versions have conflicting dependencies.
我是通過vscode的ssh連接的遠程,我在遠程界面輸入
pip install -r requirements.txt
然后報錯如下圖所示:
所以說明如果requirement.txt文件里面有兩個版本的,會沖突,所以需要刪掉沖突的版本,如下圖
然后出現(xiàn)問題4,仍然會報錯
問題4:
報錯內(nèi)容:
RROR: Could not find a version that satisfies the requirement torch2.0.1+cu117 (from versions: 1.7.1, 1.8.0, 1.8.1, 1.9.0, 1.9.1, 1.10.0, 1.10.1, 1.10.2, 1.11.0, 1.12.0, 1.12.1, 1.13.0, 1.13.1, 2.0.0, 2.0.1)ERROR: No matching distribution found for torch2.0.1+cu117
這個報錯如下圖所示:
所以說說明torch2.0.1+cu117這個版本無法安裝,這提示我們需要把后綴+cu117刪除,此外torchvision0.15.2+cu117 這句話中的+cu117也需要刪除
刪除之后再執(zhí)行
pip install -r requirements.txt
出現(xiàn)問題5報錯
問題5:
報錯內(nèi)容:
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.torchaudio 2.0.1 requires torch==2.0.0, but you have torch 2.0.1 which is incompatible.
問題5報錯如下:
我安裝的是torch2.0.1,但是他這里提示需要torch2.0.0版本,所以有錯。
原因是我在pip的時候沒有安裝python解釋器,無法選擇代碼的解釋器而導致的。
解決方案
在服務其中安裝python插件,如下圖所示
安裝之后,將解釋器選擇為矩池云中有的這個python3.10.9這個版本(其他版本行不行我暫時沒試)
關(guān)鍵:然后先點擊右上角運行一次代碼,一定要先運行一次代碼!??!,此時他會提示沒有安裝相關(guān)的包,然后在終端輸入
pip install -r requirements.txt
這是發(fā)現(xiàn)沒有報錯,安裝成功??!
隨后即可正常運行代碼
關(guān)鍵?。?!正常安裝成功的操作流程
下面總結(jié)一下使用vscode ssh 在矩池云服務器上配置環(huán)境的正確流程。
-
租用矩池云服務器,通過vscode和ssh連接到服務器。這一步可參考矩池云的官方文檔矩池云文檔
-
在自己的電腦上使用以下代碼生成requirements文件(需要先安裝pipreqs包),刪除版本沖突的內(nèi)容,此外出現(xiàn)問題請參考上面幾小節(jié)提到的。
pipreqs ./ --encoding=utf-8
-
將生成的requirements.txt文件上傳至矩池云網(wǎng)盤,通過vscode和ssh連接到服務器之后,先安裝python插件,選擇解釋器,再運行你想要運行的文件,此時會提示沒有相關(guān)的module,是因為我們還沒有配環(huán)境。但是一定要先運行一次文件!?。?/strong>。
-
運行文件過后,在終端中輸入,此時即可成功安裝
pip install -r requirements.txt
-
此外一些vscode擴展,比如ipykernel(使代碼可以在交互環(huán)境中運行),在需要的時候,vscode會提醒你進行安裝
-
配置完成之后不要忘了在矩池云中保存環(huán)境,方便下次使用。
備注
1.我為何不在vscode的終端中裝pipreqs包?
理論上,在vscode中輸入以下代碼,也可以裝pipreqs這個包
pip install pipreqs
但是我實測,在vscode中輸入代碼裝包,會出現(xiàn)無法連接的情況,導致超時。
2.在vscode終端中輸入conda list 和 在anaconda promot中輸入conda list存在不同
3.矩池云查看進程輸出日志
輸入以下代碼可以查看終端中的輸出日志
tail -f /root/log/run.log
這句話加了-f,意思是讀取正在改變的日志,而且實時更新也就是循環(huán)讀取,這也就意味著輸入此段代碼后,輸入別的代碼都沒用,因為終端正在讀取此日志。
需要配合ctrl+c退出正在查看狀態(tài)。
此外如下圖所示,是矩池云提供的讀取日志的方法,這種方法是查看一次日志,不會進入正在讀取狀態(tài),效果等價于tail /root/log/run.log
注意,每一次運行都會生成一個輸出日志。
終端常用命令
查看CUDA版本
nvidia-smi
顯示當前文件夾下的內(nèi)容
dir
或
ls
進入某一目錄(舉例,進入/root/log)
cd /root/log
進入當前盤根目錄
cd\
進入上一級目錄
cd..
查看輸出日志(循環(huán)讀取)文章來源:http://www.zghlxwxcb.cn/news/detail-820878.html
tail -f /root/log/run.log
查看輸出日志(非循環(huán)讀?。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-820878.html
tail /root/log/run.log
到了這里,關(guān)于使用pipreqs生成requirements文件,并在服務器(矩池云)上通過requirements文件安裝環(huán)境采坑記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!