Pipenv:Python 项目的依赖管理,一个工具全搞定
Pipenv:Python 项目的依赖管理,一个工具全搞定
Python 开发者多少都经历过这种场景:项目 A 要求 requests2.18,项目 B 要求 requests2.28,两个项目共用一个系统 Python 环境,装完这个那个就挂。于是你开始用 virtualenv 创建隔离环境,然后发现还得单独用 pip 管理包,还要手动维护一个 requirements.txt 文件。三个工具来回切,烦不胜烦。
Pipenv 干的事情很直接:把 pip 和 virtualenv 合成一个工具,用一个 Pipfile 替掉 requirements.txt,再自动生成 Pipfile.lock 锁定所有依赖的精确版本。

为什么需要 Pipenv
Python 的包管理历史上经过了几个阶段。最早是 Easy Install,能装但不好卸。后来有了 pip,安装卸载都没问题,但 pip 不处理虚拟环境隔离,于是又得搭配 virtualenv 一起用。
问题在于 pip 和 virtualenv 是两个独立工具,各自的配置文件、锁文件、工作流都不统一。requirements.txt 只记录包名和版本范围,没有哈希校验,也分不清生产依赖和开发依赖。项目一复杂,环境就容易出问题。
Pipenv 的方案是提供一个统一入口。创建项目时自动建立虚拟环境,安装包时自动更新 Pipfile,锁定版本时自动生成 Pipfile.lock。哈希校验写在 lock 文件里,每次安装都会验证,从源头避免依赖篡改。
核心操作
Pipenv 的命令设计尽量保持简洁:
pipenv install # 安装 Pipfile 中所有依赖
pipenv install requests # 安装指定包并写入 Pipfile
pipenv install pytest --dev # 安装开发依赖
pipenv uninstall requests # 卸载包并从 Pipfile 移除
pipenv lock # 重新生成 lock 文件
pipenv graph # 查看依赖树
pipenv shell # 进入虚拟环境的 shell
安装完之后,项目目录下会有一个 Pipfile 和一个 Pipfile.lock。Pipfile 记录你声明的依赖,Pipfile.lock 记录解析后的完整依赖树及其哈希值。
团队协作时,把这两个文件提交到版本库。其他成员 clone 下来后执行 pipenv install,就能还原出完全一致的环境。

跨平台与自动环境管理
Pipenv 在 Linux、macOS、Windows 上都能用。如果系统装了 pyenv 或 asdf,Pipenv 会自动安装项目需要的 Python 版本,不用手动切换。
项目根目录下放一个 .env 文件,Pipenv 会自动加载其中的环境变量。本地开发时数据库密码、API 密钥之类的配置不用写进代码里。
实际体验
Pipenv 上手很快。pip install --user pipenv 装好之后,进项目目录跑 pipenv install 就行。它会自动检测当前有没有虚拟环境,没有就创建一个,然后把 Pipfile 里的包全装上。
依赖有冲突的时候,Pipenv 会报错告诉你哪些包版本不兼容。比 requirements.txt 报一堆 traceback 好排查得多。
运行脚本可以用 pipenv run python your_script.py,不用先 pipenv shell 再手动激活环境。CI/CD 流程里这个非交互式的执行方式比较方便。
Pipenv 是 PyPA(Python Packaging Authority)官方维护的项目,目前 GitHub 上有 25000 多个 star。如果你还在用 pip + virtualenv + requirements.txt 的组合,可以考虑换过来看看。
pip + virtualenv + requirements.txt 的组合,可以考虑换过来看看。
更多推荐

所有评论(0)