-
安装
pip install pipenv -
使用和配置
-
设置虚拟环境文件创建在项目根目录
添加环境变量:
WORKON_HOME=PIPENV_VENV_IN_PROJECT -
创建虚拟环境时,自动换用指定的pip源
-
添加环境变量:
PIPENV_TEST_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
-
-
Mac上
bashexport WORKON_HOME=PIPENV_VENV_IN_PROJECT export PIPENV_TEST_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple -
基本使用
-
首次创建虚拟环境,并指定python版本
bashpipenv --python 3.18 -
删除虚拟环境,在项目根目录下
bashpipenv --rm -
激活虚拟环境
sqlpipenv shell若在powershell中
sqlpipenv powershell -
退出虚拟环境
-
直接在虚拟环境命令行输入
sqldeactivate
-
-
安装依赖
sqlpipenv install -r requirements.txt
-
-
进阶操作
-
根据已有的pipenv虚拟环境文件,重建虚拟环境
cd到
Pipfile.lock所在目录sqlpipenv sync -
另一个相似命令参数:
--deploysqlpipenv install --deploy这个命令同样会安装或更新依赖,使其与
Pipfile.lock匹配,但它具有额外的校验逻辑- 发现当前环境中存在
Pipfile.lock未记录的包,或者已安装包的版本与锁定文件不匹配,该命令会报错并阻止安装,而不是尝试去修复或更新这些差异 - 要用于部署阶段,作为一个安全网来防止未经预期的依赖变化影响到生产环境。它确保部署过程不会因为依赖不匹配而引入潜在的错误
- 发现当前环境中存在
-
安装特定版本包到虚拟环境
sqlpipenv install numpy==1.18.5 -
对于只在开发过程中才需要的包的安装(如:测试框架、文档生成工具等),使用
--dev参数sqlpipenv install --dev pytest -
查看当前环境中已经安装的包和版本
sqlpipenv lock -r
-
-
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内使用
【pipenv】—— 虚拟环境管理工具近乎全面的总结
MaiXiaochai2024-09-14 5:06
相关推荐
@forever@3 小时前
【JAVA】LinkedList与链表程序员爱钓鱼3 小时前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)程序员爱钓鱼3 小时前
Python实战:用高德地图API批量获取地址所属街道并写回Excelreasonsummer5 小时前
【教学类-97-06】20251105“葡萄”橡皮泥黏贴(小班主题《苹果与橘子》)卖个几把萌5 小时前
【16】Selenium+Python 接管已打开谷歌浏览器像风一样的男人@5 小时前
python --两个文件夹文件名比对(yolo 图和label标注比对检查)lllsure6 小时前
【Python】Dict(字典)tianyuanwo6 小时前
Rust开发完全指南:从入门到与Python高效融合如何原谅奋力过但无声7 小时前
TensorFlow 2.x常用函数总结(持续更新)程序员-小李7 小时前
基于 Python + OpenCV 的人脸识别系统开发实战