我之前一直用virtualenv。那东西本身没什么大问题,就是每次创建环境都要敲一大串命令。项目多了以后,目录里散落着几个.env或者venv文件夹。看着烦,找不到哪个环境对应哪个项目。
有个叫pipenv的工具。它把pip和virtualenv的功能合并了。你不再需要先创建虚拟环境再激活。一个pipenv install就搞定环境和依赖。它会生成Pipfile和Pipfile.lock两个文件,记录项目依赖。这样你就不用手动维护requirements.txt了。
换个电脑或者同事克隆项目,直接pipenv install就能还原一模一样的环境。这个特性拯救过我两次。有一次在公司电脑上开发得好好的,回到家发现环境炸了。后来我用pipenv重建,喝了口水的功夫就恢复了。
还有个更轻量的方案叫poetry。它比pipenv更规范,依赖解析更快。poetry用pyproject.toml管理项目元数据和依赖。这个文件是Python社区现在推的新标准。你不需要再写setup.py和setup.cfg那些老古董了。
poetry有个贴心的功能。你poetry add requests,它自动安装依赖并写入pyproject.toml。如果依赖之间版本冲突,它会告诉你哪个包和哪个包不兼容。以前你自己用pip装包经常遇到“把系统搞乱”的情况,用poetry就很少了。
团队协作时pipenv和poetry的好处更明显。锁文件保证大家拉下来的依赖版本一模一样。你不用担心“我本地能跑,测试环境就报错”这种问题了。之前我同事就因为这个加了两小时班。要是早用这些工具,他早该下班了。
如果你只是偶尔写个小脚本,不想折腾这些工具。那conda或许更适合你。conda不光管Python包,顺带还管非Python的依赖。比如你装numpy,它能把底层的BLAS库也一并搞定。这点pipenv和poetry做不到。
选择什么工具取决于你的场景。团队项目建议上poetry或者pipenv。个人项目或者刚入门的用virtualenv也够了。但说实话,既然有更好用的,何必跟自己过不去呢。