刚学Python那段时间,我差点被环境管理劝退。写了一个爬虫程序,三个月后想跑起来。依赖包全乱了,pip list出来一片红。那感觉就像你书桌抽屉塞满了杂物,想找支笔都要翻半天。
第一个方案我选了Anaconda。那时候觉得挺好的,安装方便,界面也漂亮。用conda create建环境,一键搞定。慢慢发现问题了。conda装包特别慢,有时候等半天没反应。更坑的是,conda的源有时候会出问题,装不上包。我试着换清华源,换阿里源,折腾好几次。有一次装TensorFlow,conda和pip混着用,环境直接坏了。我查了很多资料,最后只能删掉重装。
第二个方案是pipenv。朋友推荐的,说这个工具比conda轻量。我用了一段时间感觉还行。用pipenv install装包会比conda快一些。但问题也不少。Pipfile.lock文件特别大,合并代码的时候经常冲突。团队其他人用Windows,我用Mac,锁文件总对不上。有一次项目上线前,环境死活部署不成功。查了三个小时,发现是pipenv的bug。那一次真的把我搞崩溃了。
第三个方案我选了venv加pip加requirements.txt。这个组合看着很简单,一开始我还嫌弃它太原始。用下来发现,简单的东西往往最不容易出错。python -m venv创建环境,source activate进去,然后pip install -r requirements.txt。整个过程几分钟搞定。出了问题也很好查,就是哪个包版本不对或者依赖缺失。没有黑盒问题。
写代码的人最怕什么?最怕工具本身成为障碍。我认识一个哥们,写Python三年了还在用全局环境。他说能跑就行。我觉得他说得对,但也不全对。全局环境装多了包,自己都不知道装过什么。某天一个升级,可能就让老代码挂了。venv这种隔离环境,至少不会互相影响。
现在我每开始一个新项目,先建venv环境。配一个requirements.txt,用pip freeze记录好。换电脑或者给别人用,直接pip install就搞定。真的舒服。conda和pipenv本身不是不好,是你得花时间学它们的规则。规则多了,就多了出错的可能。
写代码这么多年,我明白一个道理。工具是用来服务人的,不是用来折腾人的。如果你也在环境管理上吃过亏,可以试试venv加pip这个方案。别觉得它简单就看不上。很多时候,最简单的方法反而最管用。