Mac下的Python环境比较乱,系统自带了一个基础的,Xcode 貌似 也自带了一个,要做科学计算Anaconda肯定要来一份,Anaconda创建的各种环境很容易被自动搜索到。同时,Home brew也搞了一套自己的东西。直到现在,我也不清楚下面:
╰─ where python /usr/local/bin/python /usr/bin/python
看到的这俩货分别是谁装进去的……
要搞开发的话,肯定是需要完全控制环境。由于Python与系统耦合较深,日常升级什么的也难免,所以第一原则是只用虚拟环境开发。需要什么东西尽量新建虚拟环境,不要往系统目录里面搞。下面总结几点:
Python2/Python3
这个历史问题,写命令要养成写python2/python3/pip2/pip3
的习惯——无论在哪里。直接写不带数字的命令不一定调用到谁。pip
。这玩意儿覆盖起东西一点都不含糊,弄脏了就很难收拾。这个习惯同样适用于带有包管理的Linux。有一次在Manjaro下pip了一个包,后面发现pip过的包居然干扰pacman
升级。Virtual Env
,但是brew
由于包管理器的某些兼容问题,提供的包并不好用。又不想pip
安装。最后发现python3 -m venv --help
提供了一个虚拟环境管理器,应该是Python3以后官方自带的,这个挺好用的。python2/3
可执行文件是取自brew
安装的Python。有一个问题是:如果是链接过去的,brew
升级Python后再进行brew cleanup
时会不经警告地损坏这些链接。再次使用时会发现虚拟环境中可执行文件没法调用(但系统path
内存在的其他python
可执行文件可能会给你一种这几个文件还能执行的假象,很坑),错误信息类似
/usr/local/Cellar/python/3.6.4/Frameworks/Python.framework/Versions/3.6/Resour: bad interpreter: No such file or directory
。
// 删除当前目录下所有链接文件:
find . -type l -delete
// 新建虚拟环境
python3.6 -m venv .
file bin/python3
看输出信息是文件还是链接来确定。pip3
就可以为所欲为了。比如升级所有pip
包:pip freeze --local | grep -v '^-e' | cut -d = -f 1 | xargs -n1 pip install -U