# Mac下操作Python开发环境小结 Mac下的Python环境比较乱,系统自带了一个基础的,Xcode *貌似* 也自带了一个,要做科学计算Anaconda肯定要来一份,Anaconda创建的各种环境很容易被自动搜索到。同时,Home brew也搞了一套自己的东西。直到现在,我也不清楚下面: ``` ╰─ where python /usr/local/bin/python /usr/bin/python ``` 看到的这俩货分别是谁装进去的…… 要搞开发的话,肯定是需要完全控制环境。由于Python与系统耦合较深,日常升级什么的也难免,所以第一原则是只用虚拟环境开发。需要什么东西尽量新建虚拟环境,不要往系统目录里面搞。下面总结几点: 0. 由于`Python2/Python3`这个历史问题,写命令要养成写`python2/python3/pip2/pip3`的习惯——无论在哪里。直接写不带数字的命令不一定调用到谁。 1. 避免使用系统级`pip`。这玩意儿覆盖起东西一点都不含糊,弄脏了就很难收拾。这个习惯同样适用于带有包管理的Linux。有一次在Manjaro下pip了一个包,后面发现pip过的包居然干扰`pacman`升级。 2. 科学计算去Anaconda独立搞。 3. 网页开发的比较麻烦,因为Anaconda不好移植,所以还是想用`Virtual Env`,但是`brew`由于包管理器的某些兼容问题,提供的包并不好用。又不想`pip`安装。最后发现`python3 -m venv --help`提供了一个虚拟环境管理器,应该是Python3以后官方自带的,这个挺好用的。 4. 一般给网页开发虚拟环境的`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`。 5. 如果环境已经坏了,解决方法是手动删掉所有损坏的链接,然后在这个地方重新新建虚拟环境: ``` // 删除当前目录下所有链接文件: find . -type l -delete // 新建虚拟环境 python3.6 -m venv . ``` 6. 当然,如果可能比较好的办法是,新建虚拟环境时就选择不要文件链接方式,而是完整复制一套运行环境过来。这个可以通过`file bin/python3`看输出信息是文件还是链接来确定。 7. 虚拟环境里面的`pip3`就可以为所欲为了。比如升级所有`pip`包:`pip freeze --local | grep -v '^-e' | cut -d = -f 1 | xargs -n1 pip install -U` 8. [中科大开源软件源站](https://mirrors.ustc.edu.cn/)真是业界良心,诚意满满,比清华那小家子气的限速站的好用多了。