项目场景:
1、pip install 已经成功但换到screen或者conda中再pip list却没有
2、Mac无法使用conda中的pip,由于pip更新后总是使用本机的pip
问题描述:
尽管已经source activate 环境
pip -V
which pip
发现pip并不是指向conda虚拟环境中的pip
原因分析:
pip太多造成冲突,默认指向本机或anconda/bin下的pip
可能在使用screen外面还没有detactive这个环境,需要先在外面detactive再在screen里面激活
解决方案:
使用pip3
注意查看pip3和python3是否是正在使用的环境中的pip和python
直接使用
/Users/Shuker/opt/anaconda3/envs/facett/bin/pip install 包
也可以将该pip的名字改为condapip(随便改一个不一样的),然后用condapip来调用
使用anconda-project
复杂
Linux中的虚拟环境管理
- pip可以管理Python依赖,但是pip包都是源码包,得在安装时编译,常常由于系统环境的原因而编译失败。此外pip也不能用来安装官方版的opencv这样的原生库。
- pyenv可以管理Python版本Virtualenv和venv可以创建虚拟环境,让多个项目之间的Python依赖隔离开,不会在项目之间冲突。
- pipenv把pip、pyenv和virtualenv的功能整合到一起,但是仍然没有解决源码编译的问题和原生库的安装问题。
- conda是个包管理器,可以支持二进制包,所以不需要安装时从源码编译了,而且也可以装原生库。但是,一些 pip 里的 Python 库在 conda 里找不到。
- anaconda是用Conda管理的Python科学计算发行版。
- conda Forge是另一个Python发行版,要比Anaconda的包更丰富。但这里有个坑就是conda Forge和anaconda并不完全兼容,如果你有一个项目同时用到anaconda和conda Forge里的包,有可能会挂。
- anaconda Project可以在一个项目里创建多个虚拟环境,既可以管理conda依赖,也可以管理pip依赖,但还是缺了CUDA这样的系统包和一些命令行工具。
- apt之类的系统包管理工具可以安装系统包,但是会受到操作系统发行版的限制,比如说Ubuntu 14.04里就装不了CUDA 9。
- Docker可以在容器里装一个操作系统发行版,从而可以方便的切换操作系统版本。但是容器和宿主必须要共享操作系统内核,所以没办法在macOS直接运行Linux发行版的docker容器。
- nvidia-docker可以把宿主的GPU设备文件和驱动挂载到Docker容器里,但是只支持Linux。
经验
1.如果临时写几行不在项目里的代码,用操作系统全局的 Anaconda 环境。
2.如果需要创建多个数据挖掘或科学计算的项目,那么用 Anaconda Project 隔离这些项目,不要用pipenv。
3.如果需要创建多个Python网站的项目,那么用 pipenv 隔离这些项目,不要用 conda。
4.用Anaconda Project管理的项目中,如果需要安装纯Python库,优先用pip包,如果是需要额外编译的库,优先用conda包。
5.如果需要隔离系统环境,用Linux版的Docker,在容器里安装系统依赖。conda和Linux发行版都有的二进制包,优先用conda装。因为发行版发布周期慢,版本旧。