安装
pip install pipenv
使用和配置
设置虚拟环境文件创建在项目根目录
添加环境变量:
WORKON_HOME
=PIPENV_VENV_IN_PROJECT
创建虚拟环境时,自动换用指定的pip源
添加环境变量:
PIPENV_TEST_INDEX
=https://pypi.tuna.tsinghua.edu.cn/simple
Mac或linux上
export WORKON_HOME=PIPENV_VENV_IN_PROJECT export PIPENV_TEST_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
基本使用
首次创建虚拟环境,并指定python版本
pipenv --python 3.18
删除虚拟环境,在项目根目录下
pipenv --rm
激活虚拟环境
pipenv shell
若在powershell中
pipenv powershell
退出虚拟环境
直接在虚拟环境命令行输入
deactivate
安装依赖
在项目根目录下执行命令:
单个包
pipenv install package_name
根据requirements.txt文件
pipenv install -r requirements.txt
卸载依赖
单个
pipenv uninstall package_name
虚拟环境中的全部
pipenv uninstall --all
卸载所有开发相关的包
pipenv uninstall --all-dev
进阶操作
根据已有的pipenv虚拟环境文件,重建虚拟环境
cd到
Pipfile.lock
所在目录pipenv sync
另一个相似命令参数:
--deploy
pipenv install --deploy
这个命令同样会安装或更新依赖,使其与
Pipfile.lock
匹配,但它具有额外的校验逻辑- 发现当前环境中存在
Pipfile.lock
未记录的包,或者已安装包的版本与锁定文件不匹配,该命令会报错并阻止安装,而不是尝试去修复或更新这些差异 - 主要用于部署阶段,作为一个安全网来防止未经预期的依赖变化影响到生产环境。它确保部署过程不会因为依赖不匹配而引入潜在的错误
- 发现当前环境中存在
安装特定版本包到虚拟环境
pipenv install numpy==1.18.5
对于只在开发过程中才需要而生产环境中不需要的包的安装(如:测试框架、文档生成工具等),使用
--dev
参数pipenv install --dev pytest
查看当前环境中已经安装的包和版本
pipenv graph
导出所有依赖到requirementes.txt
方法一(不含dev依赖):pipenv,在项目根目录下
pipenv lock -r > requirementes.txt
- 有的版本会报错,说没有
-r
选项,其实导出是成功的
- 有的版本会报错,说没有
方法二:pip(会包含dev依赖),在虚拟环境内
pip freeze > requirements.txt
方法三:pipenv(含开发依赖)
pipenv lock -r --dev > requirementes.txt
查看所有过时的包
pipenv update --outdated
升级依赖
单个包升级,无版本
pipenv install -U package_name
单个包升级,有版本
pipenv install requests==2.28.1
升级所有,无版本
仅限于Pipefile.lock中有记录
pipenv update
Pipfile 和 pipefile.lock
Pipefile
- 作用:
Pipfile
是pipenv
用来存储项目直接依赖和开发依赖的文件,它替代了传统的requirements.txt
文件。 - 内容: 包含了项目所需的Python包及其版本范围(允许的版本号范围),还可以指定环境变量、索引URL等元数据。通过
pipenv install <package>
命令添加依赖时,pipenv
会自动维护这个文件,记录下包名和其兼容的版本范围。 - 优点: 相比于固定版本号,版本范围能更好地处理包之间的兼容性问题,同时也便于升级和维护。
- 作用:
Pipfile.lock
- 作用:
Pipfile.lock
则是一个更详细的依赖描述文件,它锁定了每个依赖的具体版本号,包括直接依赖和这些依赖的间接依赖(也就是所有的子依赖)。 - 生成与更新: 通过运行
pipenv lock
命令生成或更新,这个命令会根据Pipfile
中的依赖关系和版本约束,确定一个确切的依赖版本集合,并记录在Pipfile.lock
中。 - 目的: 确保项目在不同环境下的依赖安装结果一致,这对于团队开发、持续集成(CI)和持续部署(CD)尤其重要,因为这可以避免“在我机器上能跑”的问题,保证所有环境下的依赖都是相同的。
- 优点: 提供了一种可复现的依赖管理方式,确保了项目的可移植性和稳定性。
- 作用:
总结:
Pipfile
更偏向于开发时的灵活管理,而Pipfile.lock
则是在部署和团队协作时保证环境一致性的重要工具。- 在开发过程中频繁变动的是
Pipfile
,而Pipfile.lock
应该在每次准备部署或分享代码之前更新,以确保依赖的精确复现
Tips
- 在激活的pipenv内使用
pip install
安装的包不会记录到pipenv的相关文件中,也就对该包失去管理 - 所以,强烈推荐在使用pipenv相关的虚拟环境时,包的安装和卸载都是用
pipenv install/uninstall package_name
替代pip install/uninstall package_name
。
- 在激活的pipenv内使用