Python中pipenv的优势到底在哪里?

看到不少大神推荐 pipenv 加之它的作者就是 requests 的作者 本身对 requests 很是佩服的, 做到了所求即所得 但是尝试 pipenv, 实在是, 找不到吸引的地方

本身开发环境是 pip+virtualenv+virtualenvwrapper pip 解决了 python 的包环境 想创建 python3 环境, mkvirtualenv new_venv -p python3 即可 切换环境是 virtualenvwrapper 的 workon 命令 每一步都非常之方便

pipenv 目前, 我能发现的唯一的优势, 就是能自动更新 requirements 貌似有个小缺点, 就是创建的环境会增加一些字符串, 在有些情况下, 指明解释器麻烦了一点(个人习惯吧) 求教, pipenv 还有什么爽点?

PS: 在写的时候, 想到了为什么要用 pyenv, 因为我电脑里面就没有 python3.5, 只有 3.6 那么 python3.5 环境的创建, 对于我来说确实麻烦了点


Python中pipenv的优势到底在哪里?

6 回复

你说的这一些基本上确实和 virtualenvwrapper 差不多,通过 pipenv shell 可以达到和 workon 类似的效果。

不过 pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。同时,还有一个是之前用 requirements.txt 的时候通常还需要一个额外的开发 requirements.txt ,这个在 pipenv 里也合并成了单个文件。

pipenv 还提供了安全检查功能,可以查看你使用的库有没有安全问题。


Pipenv的核心优势是把pipvirtualenv两个工具打包成一个,用起来更顺手。它主要解决两个痛点:

  1. 依赖锁定PipfilePipfile.lock是绝配。Pipfile里你写要用的包(比如flask = "*"),pipenv install之后会自动生成Pipfile.lock,里面锁死所有次级依赖的具体版本。这样在服务器上pipenv install就能完全复现你的开发环境,彻底告别“在我机器上好好的”这种问题。

  2. 环境管理自动化:不用再手动virtualenv venv && source venv/bin/activate && pip install了。pipenv install自动创建虚拟环境,pipenv shell直接进虚拟环境,pipenv run python script.py在虚拟环境里跑脚本。环境路径它自己管,省心。

简单说,它让Python的包管理和环境隔离变得更简单、更可靠,特别适合中小项目。对于超大项目或者需要极精细控制的情况,你可能还是会回头用pip+venv或者poetry,但Pipenv在易用性和可靠性之间平衡得不错。

总结:自动化的虚拟环境管理和可靠的依赖锁定是它的王牌。

pipenv 的优势不知道其他的,至少一个是它可很方便的管理包依赖关系。卸载的时候,可以自动检查依赖库是否被其他包依赖,来选择是否彻底删除。也可以通过 pipenv graph 来查看各个包的依赖关系图。

用过 pipenv,感觉很卡,又没有解决核心问题。
目前用 pyenv,可以装任意版本 Python,切换目录自动激活虚拟环境,用 pip freeze 生成 requirements.txt ,必要时手动修改,比 pipenv 省心。

pipenv 有没有解决耦合依赖的问题?比如某个功能依赖 libA==1.0.1,另外一个功能却依赖 libA==2.0.1 (换成 libA==1.0.1 会不行)

pipenv 在功能上算是 pip、virtualenvwrapper、requirements 的集合 ,实现的很干净,易用性提升明显。并且不再依赖那种切环境变量的使用方式,改实现到 shell 命令里了。不是每个人都接受切换环境变量,多少有点上下文混乱,对自动化运维脚本也很不友好。

回到顶部