pipenv是一个 Python 包和虚拟环境管理工具,它整合了pip(包管理)和virtualenv(虚拟环境)功能,简化项目依赖管理流程。
Pipenv 虚拟环境的原理和工作机制
1. 创建和管理虚拟环境
自动创建独立虚拟环境
当你在项目目录运行pipenv install或pipenv shell时,pipenv会为该项目自动创建一个隔离的虚拟环境。这个虚拟环境通常存放在用户目录的某个地方(比如 macOS/Linux 是~/.local/share/virtualenvs/下的一个文件夹),而不是项目目录内。
通过virtualenv技术实现隔离
pipenv本质上是调用底层的virtualenv(或 Python 3.3+ 自带的venv)来创建虚拟环境,保证项目环境与系统环境隔离。
2. 管理依赖文件
Pipfile 和 Pipfile.lock
Pipfile用来声明项目的依赖包(类似requirements.txt,但更现代且支持分组)
Pipfile.lock记录依赖包的具体版本和哈希,确保可复现的环境
自动同步依赖
pipenv install会根据Pipfile自动安装依赖,并更新Pipfile.lock。
3. 环境切换和激活
激活虚拟环境
使用pipenv shell会自动激活该项目的虚拟环境,打开一个新的 shell,环境变量配置正确。
命令前缀运行
也可以用pipenv run python或pipenv run pytest,在虚拟环境中执行命令,无需手动激活。
4. 环境定位和复用
环境不放项目目录
这样避免项目目录臃肿,并且同一个虚拟环境能被多个项目复用(如果它们的 Python 版本和依赖匹配)。
基于项目路径命名环境
pipenv根据项目的路径哈希来命名虚拟环境文件夹,保证唯一性。