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的优势到底在哪里?
你说的这一些基本上确实和 virtualenvwrapper 差不多,通过 pipenv shell 可以达到和 workon 类似的效果。
不过 pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。同时,还有一个是之前用 requirements.txt 的时候通常还需要一个额外的开发 requirements.txt ,这个在 pipenv 里也合并成了单个文件。
pipenv 还提供了安全检查功能,可以查看你使用的库有没有安全问题。
Pipenv的核心优势是把pip和virtualenv两个工具打包成一个,用起来更顺手。它主要解决两个痛点:
-
依赖锁定:
Pipfile和Pipfile.lock是绝配。Pipfile里你写要用的包(比如flask = "*"),pipenv install之后会自动生成Pipfile.lock,里面锁死所有次级依赖的具体版本。这样在服务器上pipenv install就能完全复现你的开发环境,彻底告别“在我机器上好好的”这种问题。 -
环境管理自动化:不用再手动
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 命令里了。不是每个人都接受切换环境变量,多少有点上下文混乱,对自动化运维脚本也很不友好。

