目录
- 问题描述
- 问题1:
- 问题2:
- 发现问题
- 问题解决
- 问题3:
- 问题4:
- 问题5:
- 解决方案
- 关键!!!正常安装成功的操作流程
- 备注
- 1.我为何不在vscode的终端中装pipreqs包?
- 2.在vscode终端中输入conda list 和 在anaconda promot中输入conda list存在不同
- 3.矩池云查看进程输出日志
- 终端常用命令
问题描述
今天用requirements文件想在服务器上安装环境,遇到了许多的坑,在这里记录一下,有需要的朋友可以看看这里有没有记录你存在的问题。
问题1:
报错内容:
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/home/ktietz/src/ci/alabaster 161192154452/work!
在网上看到的方法:
在终端上,使用这段代码在自己电脑上的生成requirements文件
pip freeze > requirements.txt
然后将requirement.txt文件上传到服务器上,在服务器上的终端运行下面这段代码,在服务器上安装对应的环境。
pip install -r requirements.txt
这时候报错如下图
报错内容是不存在这个路径,所以我打开requirement.txt文件,发现文件内容如下,发现这个生成的txt文件并不是我们想要的格式,还生成了一堆奇怪的地址,导致在服务器上无法进行环境安装。
于是我又查阅网上的资料,有人说可以在终端里运行下面这行代码
pipreqs ./ --encoding=utf-8
注意到这里pipreqs也是一个包,需要使用pip的方式来安装,这就产生了问题二
问题2:
报错内容:
pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
发现问题
我用的anaconda来管理的环境,我一共有两个环境,一个是自带的base环境,一个是我创建的DL环境(deep learning),打开anaconda promot,分别输入以下代码,分别表示进入DL环境,并在DL环境中安装pipreqs这个包
conda activate DL
pip install pipreqs
之后我在vscode的终端中运行
pipreqs ./ --encoding=utf-8
结果报错:(图中输入的是pipreqs ./,如果输入pipreqs ./ --encoding=utf-8一样报错)
查找网上资料,说遇到这种情况可以输入以下代码来解决:
pip3 show -f pipreqs
然而,在我输入这段代码后,出现了新的报错
我明明已经在DL环境里装了pipreqs,而且我vscode的解释器里面也设置的是DL环境,为何说找不到这个包?
问题解决
我猜测,我是在vscode的终端中运行的代码,而终端可能与我选择的解释器无关,所以我是不是在base环境里装一个pipreqs包就可以了呢?
于是,我在anaconda promot中输入以下代码,分别表示退出当前环境(DL),然后在base环境中装pipreqs包
conda deactivate
pip install pipreqs
在base环境中安装pipreqs包成功之后,输入下面代码
pipreqs ./ --encoding=utf-8
之后等待时间有点长,可能需要二三十秒,在文件夹中生成了一个requirements.txt文件(如果文件夹中已有requirements.txt文件他会报错,需要先把原有的文件删掉),我们打开这个文件,如下图所示。
这里有一些问题,为何一个包会出现两个版本?
于是我查了下我base环境下和DL环境下的matplotlib包的版本
发现,果然是两个环境中版本不一样,它在生成的时候都生成了。
然后我查了torch包,也是相同的情况,然而,numpy包却情况不同
在两个环境中,numpy的版本均是1.24.3,那么为何requirement.txt里面却有一个1.23.5的版本?
这个可能是个bug,目前还不知道为什么,我采取的方式是手动删除一个版本,这就引出了问题3
问题3:
报错内容:
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文件里面有两个版本的,会冲突,所以需要删掉冲突的版本,如下图
然后出现问题4,仍然会报错
问题4:
报错内容:
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也需要删除
删除之后再执行
pip install -r requirements.txt
出现问题5报错
问题5:
报错内容:
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这个版本(其他版本行不行我暂时没试)
关键:然后先点击右上角运行一次代码,一定要先运行一次代码!!!,此时他会提示没有安装相关的包,然后在终端输入
pip install -r requirements.txt
这是发现没有报错,安装成功!!
随后即可正常运行代码
关键!!!正常安装成功的操作流程
下面总结一下使用vscode ssh 在矩池云服务器上配置环境的正确流程。
-
租用矩池云服务器,通过vscode和ssh连接到服务器。这一步可参考矩池云的官方文档矩池云文档
-
在自己的电脑上使用以下代码生成requirements文件(需要先安装pipreqs包),删除版本冲突的内容,此外出现问题请参考上面几小节提到的。
pipreqs ./ --encoding=utf-8
-
将生成的requirements.txt文件上传至矩池云网盘,通过vscode和ssh连接到服务器之后,先安装python插件,选择解释器,再运行你想要运行的文件,此时会提示没有相关的module,是因为我们还没有配环境。但是一定要先运行一次文件!!!。
-
运行文件过后,在终端中输入,此时即可成功安装
pip install -r requirements.txt
-
此外一些vscode扩展,比如ipykernel(使代码可以在交互环境中运行),在需要的时候,vscode会提醒你进行安装
-
配置完成之后不要忘了在矩池云中保存环境,方便下次使用。
备注
1.我为何不在vscode的终端中装pipreqs包?
理论上,在vscode中输入以下代码,也可以装pipreqs这个包
pip install pipreqs
但是我实测,在vscode中输入代码装包,会出现无法连接的情况,导致超时。
2.在vscode终端中输入conda list 和 在anaconda promot中输入conda list存在不同
3.矩池云查看进程输出日志
输入以下代码可以查看终端中的输出日志
tail -f /root/log/run.log
这句话加了-f,意思是读取正在改变的日志,而且实时更新也就是循环读取,这也就意味着输入此段代码后,输入别的代码都没用,因为终端正在读取此日志。
需要配合ctrl+c退出正在查看状态。
此外如下图所示,是矩池云提供的读取日志的方法,这种方法是查看一次日志,不会进入正在读取状态,效果等价于tail /root/log/run.log
注意,每一次运行都会生成一个输出日志。
终端常用命令
查看CUDA版本
nvidia-smi
显示当前文件夹下的内容
dir
或
ls
进入某一目录(举例,进入/root/log)
cd /root/log
进入当前盘根目录
cd\
进入上一级目录
cd..
查看输出日志(循环读取)
tail -f /root/log/run.log
查看输出日志(非循环读取)
tail /root/log/run.log