通过Anaconda中的conda包管理,可以建立不同的虚拟环境,就像docker一样,每个虚拟环境中的可以安装不同版本的包,避免互相冲突。
具体操作如下:
1、首先在所在系统中安装Anaconda。可以打开命令行输入conda -V检验是否安装以及当前conda的版本。
2、conda常用的命令。
1)conda list 查看安装了哪些包。
2)conda env list 或 conda info -e 查看当前存在哪些虚拟环境
3)conda update conda 检查更新当前conda
3、创建Python虚拟环境(如python3.6)。
使用 conda create -n your_env_name python=3.6
anaconda 命令创建python版本为3.6、名字为your_env_name(笔者这里创建了一个pycareonly)的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。
4. 将包安装到指定的虚拟环境
笔者尝试了先用conda activate your_env_name,然后pip install的方式,结果悲剧地发现还是安装在了主环境下,造成了之前的程序不能正常使用了。
例如scikit-learn里的包就出错了:
目前是参考了https://www.zhangshengrong.com/p/JKN8EkGeX6/
安装包的时候指定安装虚拟环境所在的目录:
5. 在jupyter-notebook中切换不同的conda kernel
命令行输入:
conda install nb_conda_kernels
如果报错如下:
RemoveError: 'requests' is a dependency of conda and cannot be removed from conda's operating enviro
说明conda不够新,那么需要:
conda update conda
然后还不行,还需要在虚拟环境中安装jupyter:
conda install -y jupyter
然后退出虚拟环境,进入jupyter-notebook就可以了。
目前只搞定了在jupyter-notebook中切换不同的conda kernel,在spyder中切换还没有搞定。
貌似也要在虚拟环境中安装spyder。
6. pip install --user的坑
目前电脑上有三个地方有python的包,分别是:
目录1:C:\Users\xuzh\AppData\Roaming\Python\Python36\site-packages(当使用pip install --user时,会将python包安装到此目录下)
目录2:c:\Users\xuzh\Anaconda3\Lib\site-packages\
目录3: c:\Users\xuzh\Anaconda3\envs\pycareonly\Lib\site-packages\
所有通过pip install --user安装的包都会被安装在目录1下。
这三个目录在我的电脑上是这么个顺序:
目录1->目录2或者目录3
如果目录1下有包就导入目录1下的,如果目录1下没有再根据目前的环境判断是导入2或者3
这一点从python的path也可以验证。
这是base环境下的python路径
这是pycareonly虚拟环境下的路径:
可以看出AppData\Roaming\Python\Python36\site-packages都是在site-packages上面的
结论是pip install --user和虚拟环境是冲突的,无法起到隔离包的作用。
不要使用pip install --user的方法,而是要尽量使用虚拟环境。
7. 后记
通过在jupyter-notebook中切换虚拟conda环境+virtualenv结合vscode使用,目前可以满足绝大部分的需求了。
参考: