Pipenv:Python 依赖管理,一个工具就够了
文章目录
Pipenv:Python 依赖管理,一个工具就够了
Pipenv 在 GitHub 上拿到了 25,071 Star,由 Python 官方机构 PyPA 维护。
Python 的包管理历史包袱不少。最早只有 Python 本身,没有正式的包管理工具。后来 easy_install 出现了,能装但卸载费劲。再后来 pip 成了标配,配合 virtualenv 隔离环境,用 requirements.txt 导出依赖列表。这套组合拳能用,但用过的都知道痛点在哪:pip 管安装,virtualenv 管隔离,requirements.txt 管记录,三个工具各管各的,协同全靠开发者自己。
Pipenv 把这些事全合成了一步。

1、pip + virtualenv 的麻烦在哪
requirements.txt 没有 lock 机制,依赖版本漂移是家常便饭。这次装的是 Django 4.2,下次 pip install 可能就变成了 4.3,中间某个子依赖的小版本变动就能让项目崩掉。
requirements.txt 也没有 hash 校验。包有没有在传输中被篡改,完全不知道。安全漏洞扫描得靠外部工具补位,PyUp Safety 之类的服务得单独跑。
Pipenv 把这些坑全填了。
2、Pipfile 和 Pipfile.lock
Pipenv 的核心设计是用两个文件替代 requirements.txt。
Pipfile 是声明文件,记录你直接依赖了哪些包,分 [packages] 和 [dev-packages] 两个区域。Pipfile.lock 是锁定文件,精确记录每一层依赖的版本号和 hash 值。这套思路来自 Ruby 的 Bundler 和 Node.js 的 Yarn,Python 生态一直缺这么个东西。
实际效果很直接:把 Pipfile.lock 提交到 Git,其他人 clone 下来跑 pipenv install,装出来的依赖树跟你一模一样。不会再有"我机器上跑得好好的"这种对话。
hash 校验在每次安装时自动进行,对照 lock 文件验证包完整性。pipenv check 可以扫描已知安全漏洞,输出受影响的包和修复建议。

3、日常操作
新建项目:
pipenv --python 3.11
自动创建虚拟环境,生成 Pipfile。
安装依赖:
pipenv install requests
pipenv install pytest --dev
一行命令完成安装、Pipfile 更新、Pipfile.lock 同步三件事。--dev 标记的包写入 [dev-packages],生产环境不会装。
进入虚拟环境:
pipenv shell
不进 shell 也能直接跑命令:
pipenv run python main.py
pipenv run pytest
查看依赖树:
pipenv graph
逐层展示依赖关系和版本约束,排查冲突时很实用。
锁定依赖:
pipenv lock
把当前环境的所有依赖版本精确锁定到 Pipfile.lock。
4、自动化细节
Pipenv 在自动化上做了不少功夫。进项目目录会自动向上查找 Pipfile 位置,以此确定项目根目录。没有 Pipfile 会自动创建,没有虚拟环境会自动建一个到标准路径。目录下如果有 .env 文件,会自动加载环境变量进 shell。
如果系统装了 pyenv 或 asdf,Pipenv 能自动安装指定版本的 Python,不需要手动装好再配环境。
Shell 补全支持 bash、zsh、fish。安装 pip install "pipenv[completion]" 后配好 shell 配置,Tab 键就能补全命令和包名。
5、适合谁
Python 开发者,不管是个人项目还是团队协作,Pipenv 都能省去环境管理的重复劳动。还在用 requirements.txt 手动维护的项目,跑 pipenv install -r requirements.txt 就能迁过来,Pipfile 会自动生成。
对在意安全性的团队,Pipfile.lock 的 hash 校验和 pipenv check 漏洞扫描是实打实的防线。对 CI/CD 流程,确定性构建能保证每次部署的依赖环境完全一致。
ck` 漏洞扫描是实打实的防线。对 CI/CD 流程,确定性构建能保证每次部署的依赖环境完全一致。
[外链图片转存中…(img-jz5dHCKr-1781687088114)]
更多推荐
所有评论(0)