写Python不懂虚拟环境,就像装修不带口罩,迟早要出问题
你觉得自己Python学得不错了。pip install一敲,包就装好了。代码跑起来,好像啥都挺顺。直到有一天,你帮同事跑个项目,或者从github扒拉下来一个老旧代码库,你一运行,报错。再运行,又报错。你以为是代码问题,查了半天,发现是包的版本不对。
这种滋味很熟悉吧。我经历过很多次,每次都想摔键盘。其实这就是没养成装虚拟环境的习惯。你想想装修工人,进到新房子里,满屋子灰尘,人家第一件事就是戴个口罩。不戴口罩也能干活,但干完活,鼻子嗓子全受不了。Python项目也是这样。你不给每个项目单独搞一个环境,就像是把所有灰尘都吸进一个肺里。
装虚拟环境能干嘛呢?很简单。一个项目需要Flask的旧版本,另一个需要新版本。没有虚拟环境,你只能用一套Python解释器和一套包。你升级了Flask,老项目挂了。你降级了Flask,新项目不干了。两边都别扭,两边你都伺候不好。戴上虚拟环境这个“口罩”,每个项目都有自己的小空间。包装在各自的环境里,互不干扰。
有人觉得麻烦。每次新建项目,要激活环境,还要装依赖。其实也就多敲两行命令的事。比起后面花半天去追根溯源,这几秒钟真的很划算。我见过一个同事,为了省事,把所有包都装到全局环境里。后来他电脑上的Python完全乱套了,卸载重装好几次。最后他干脆不用Python了,换语言了。你想想,因为一个习惯不好,导致你放弃一门语言,那不是亏大了吗。
虚拟环境怎么用呢?说白了就是装一个叫venv的模块。Python自带了这个工具。你打开终端,进到项目文件夹,敲一行python -m venv venv,就生成了一个文件夹。这个文件夹就是你的新环境。然后你激活它,Windows上敲venv\Scripts\activate,Linux或者mac上敲source venv/bin/activate。之后你装的任何包,都会在这个环境里。项目做完了,把环境删了就行,电脑干干净净。
还有一个事。你项目要分享给别人,或者部署到服务器。你只需要一个包含所有包清单的文件。这个文件可以用pip freeze > requirements.txt生成。别人拿到你的代码,先创建虚拟环境,然后pip install -r requirements.txt,就能把你的环境一模一样的复制过去。再也不会出现“我这边跑得好好的你那里为啥报错”这种闹心事了。
我刚开始也不重视虚拟环境。觉得是小问题,不值当专门学。后来吃了亏,才明白这不是小问题。这就像你每次出门都记得带钥匙,这是一种习惯。习惯不好,锁会把你挡在外面。环境管理不好,代码会把你挡在外面。写Python不懂虚拟环境,就像装修不带口罩,迟早要出问题。别等问题来了再后悔,现在就动手吧。