核心
操作背景:
miniconda生成一个py37的子环境
自带了一个pip==21.3.1
核心问题:
我需要降低pip版本到pip==19
操作过程:
python -m pip install pip==19.0.1
或
python -m pip uninstall pip
python -m ensurepip
两种方法均失败
分析:
conda install
pip install
两个方法都可以安装包,是指在随环境生成的原装pip上,如果pip修改版本不当,pip非原装,就会导致装的包不被conda调用,因此pip修改版本需要conda来操作
解决方法:
conda install pip==19.0.1
结果:
完成pip降版本
背景
在复现论文的过程中,需要搭建一个新环境,综合考虑之后python37比较合适,于是在miniconda下创建我需要的环境
conda create -n python37 python=3.7
而我需要pip==19
本次问题出现:linux在miniconda的py37环境下 pip降版本
描述一下我是怎么进入这个坑的
pip降级有两种办法
1.python -m pip install pip==19.0
失败,pip21.3这个一直retry的问题应该是SSL的根源,此路不通
2.卸载了再装
python -m pip uninstall pip
python -m ensurepip
貌似成功了,但是一旦查看
版本不对:pip --version
pip 10.0.1 from miniconda3/envs/py36/lib/python3.6/site-packages/pip (python 3.6)
这是我的另一个环境的pip
试一下能不能用:pip list
No such file or directory
你看它不识别呀,所以还是不对,用conda list查看一下
这个新安装的pip似乎和别人不一样:
它是不被conda调用的
想了一下有了一点feel:
以上不论是哪种方法给pip降级,后来的pip都不是最开始随环境生成时conda安装的pip了,我称之为pip.pip,而原生的是conda.pip
这里就到了我这次最想说的一点:
随环境生成的pip是conda装的pip,用它的本质还是conda操控的安装,因此安装的包可以被识别,
但是重新安装的pip,它和conda没有关系,因此它安装的包conda不认可
其实pip和conda的安装都可以在conda list里面看出来有所不同:
pip装的在后面的来源都清晰标明了,而其他的随环境生成是安装的是来自conda的镜像源
总结:
conda的子环境下,安装方式有两种
conda install
pip install
两个方法都可以安装包,是指在随环境生成的原装pip上,如果pip修改版本不当,pip非原装,就会导致装的包不被conda调用,因此pip修改版本需要conda来操作
解决问题
那既然pip不能直接装自己,就还是用conda安装:
conda install pip==19.0
第一次出错了:
所以我需要确定一下哪些是可以的
conda search pip
就列出来了所有可以用的包,然后对应安装
找一个对应的pip==19.0.1
此时,pip被conda安装成功
结果
pip降版本成功
分析
conda的子环境下,安装方式有两种
conda install
pip install
两个方法都可以安装包,是指在随环境生成的原装pip上,如果pip修改版本不当,pip非原装,就会导致装的包不被conda调用,因此pip修改版本需要conda来操作
比较两个pip
比较1:安装
(conda.pip安装)
find -name urllib3
./miniconda3/envs/hhhh/lib/python3.7/site-packages/urllib3
(卸掉conda.pip安装pip.pip,然后再pip.pip)
./miniconda3/envs/hhhh/lib/python3.7/site-packages/pip/_vendor/urllib3
./miniconda3/envs/hhhh/lib/python3.7/site-packages/urllib3
比较2:卸载
pip.pip安装一个包
卸掉pip.pip安装conda.pip
conda.pip安装一个包
find -name requests
./miniconda3/envs/py37/lib/python3.7/site-packages/pip/_vendor/requests
./miniconda3/envs/py37/lib/python3.7/site-packages/requests
通过卸载测试一下哪个是哪个:
(此时的pip已经是conda版本的了)
pip uninstall requests=conda uninstall requests
卸载掉了conda.pip的,还剩一个就是之前pip.pip安装的:
可以看到,conda.pip与pip.pip安装的路径也是不一样的
pip.pip:
./miniconda3/envs/xxxx/lib/python3.7/site-packages/pip/_vendor/xxx
conda.pip:
./miniconda3/envs/xxxx/lib/python3.7/site-packages/xxx