简单上手 PIPENV

devtools/2024/9/24 21:21:12/

文章目录

      • pipenv简介
      • 安装使用
        • 安装
        • 创建虚拟环境
        • 安装python
        • 进入虚拟环境
      • pipfile和pipfile.lock文件分析
      • pipenv优势
      • 本人遇到的坑

pipenv_1">pipenv简介

Pipenv,全称为 Python Development Workflow for Humans,旨在为开发项目自动创建和管理虚拟环境并管理 python 包,简言之,就是virtualenvpip 的集合体,通过创建指定 python 版本的虚拟环境和安装依赖包,提供各个项目隔离的开发环境。

虚拟环境
简单来讲,虚拟环境就是隔离你项目中安装的库的一个环境。想象一下,如果想在自己的电脑做几个不同的项目,而不同的项目需要不同版本的库,都放在相同的环境下可能会带来意想不到的麻烦,很可能会遇到库版本冲突的问题。比如项目A需要numpy1.0,而项目B需要numpy1.15。而pip安装的库只有一个版本,而且是全局的。在虚拟环境下安装的库都会被隔离在该环境中,不会与其他环境冲突。通常,我们为每个项目都创建一个虚拟环境,以此来隔离我们的工作环境。

安装使用

安装
$ pip install pipenv   #安装
$ pipenv –version   #输出版本信息
$ pipenv --help   #查看pipenv用法
创建虚拟环境

先cd到目标目录下

$ pipenv install   #创建虚拟环境,会使用本地默认版本的py
//制定py版本可以
$ pipenv --python 3.6 #指定使用Python3.6的虚拟环境
$ pipenv --two        #使用系统的Python2在创建虚拟环境
$ pipenv --three      #使用系统的Python3在创建虚拟环境

执行命令之后,文件夹会生成两个文件,pipfile和pipfile.lock。
如果命令执行前项目目录中不存在 Pipfile 文件,该命令将会创建一个 Pipfile 文件。如果已经有Pipfile 文件已经存在,则会根据这个Pipfile生成虚拟环境。

$ pipenv install --ignore-pipfile   //在生产环境中只需要代码和Pipfile.lock,就可以创建和开发环境一样的环境
$ pipenv install --dev   //另一个开发环境做开发,则将代码和Pipfile复制过去

由于Pipfile里面没有所有子依赖包或者确定的版本,因此pipnev install可能会更新未指定模块的版本号。
假如该命令更新了一些依赖包的版本,由于我肯定还会在新环境做单元测试或者功能测试,因此我可以确保这些包的版本更新是不会影响软件功能的;然后我会pipenv lock并把它发布到生产环境,因此我可以确定生产环境也是不会有问题的。

python_36">安装python
# 安装命令
pipenv install beautifulsoup4   #在项目所在虚拟环境中安装beautifulsoup4
pipenv install parsel==1.3.1    #安装parsel并指定其版本
pipenv install --dev nose2      #安装nose2包并将其关联为只在开发环境中需要的包# 卸载命令
pipenv uninstall beautifulsoup4 #在项目所在虚拟环境中卸载beautifulsoup4
pipenv uninstall --all          #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
pipenv uninstall --all--dev     #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包# 更新命令
pipenv update requests          #在项目中更新requests包
pipenv update                   #更新项目中所有的包
pipenv update --outdated        #查看现有包哪些已经过期#查看命令
pipenv grash                    #显示现有的依赖包
pipenv lock                     #更新Pipfile.lock文件锁定当前环境的依赖版本

无论是生产环境还是开发环境的包都会写入一个Pipfile里面。
接下来如果在开发环境已经完成开发,如何构建生产环境的东东呢?这时候就要使用Pipfile.lock了,运行以下命令,把当前环境的模块lock住, 它会更新Pipfile.lock文件,该文件是用于生产环境的,你永远不应该编辑它。

进入虚拟环境
$ pipenv shell   //进入虚拟环境
$ exit   //退出虚拟环境
$ pipenv run 命令   //在不进入虚拟环境的情况下使用虚拟环境运行代码

pipfilepipfilelock_67">pipfile和pipfile.lock文件分析

pipfile

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true[dev-packages][packages]
django = "==2.2.3"
markdown = "*"[requires]
python_version = "3.6"

source:设置镜像地址,即从哪下载虚拟环境所需要的包
packages:指定项目依赖的包,即你安装了的包
dev-packages:指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。
requires:中指定目标Python版本

pipfile.lock

{"_meta": {"hash": {"sha256": "cd71ab6b94ffbcbc30cf1354920845e3f2bfde04169acdafbfe573b5262ae4c6"},"pipfile-spec": 6,"requires": {"python_version": "3.6"},"sources": [{"name": "pypi","url": "https://pypi.org/simple","verify_ssl": true}]},"default": {"django": {"hashes": ["sha256:4d23f61b26892bac785f07401bc38cbf8fa4cec993f400e9cd9ddf28fd51c0ea","sha256:6e974d4b57e3b29e4882b244d40171d6a75202ab8d2402b8e8adbd182e25cf0c"],"index": "pypi","version": "==2.2.3"},"markdown": {"hashes": ["sha256:5ad7180c3ec16422a764568ad6409ec82460c40d1631591fa53d597033cc98bf","sha256:9c71241ec237505535eabff7a38b1307250f16cea174bb1e505c3e032f108867"],"index": "pypi","version": "==3.2"},"pytz": {"hashes": ["sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d","sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"],"version": "==2019.3"},"sqlparse": {"hashes": ["sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177","sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"],"version": "==0.3.0"}},"develop": {}
}

lock包含了所有依赖包的确定版本,保证了生产环境的完整性和稳定性。一般自动生成,不应手动修改。

pipenv_145">pipenv优势

1、它可很方便的管理包依赖关系。卸载的时候,可以自动检查依赖库是否被其他包依赖,来选择是否彻底删除。也可以通过 pipenv graph 来查看各个包的依赖关系图。
2、支持Python2 和 Python3,在各个平台的命令都是一样的。
3、集成了pipvirtualenv两者的功能,且完善了两者的一些缺陷。
4、各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。

对比virtualenv
pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。同时,还有一个是之前用 requirements.txt 的时候通常还需要一个额外的开发 requirements.txt ,这个在 pipenv 里也合并成了单个文件。

本人遇到的坑

我在本地开发好了之后,将项目部署到云服务器上(阿里云的UBUNTU16.04)。
先将pipfile.lock和代码拉到云上,在创建虚拟环境时,pipenv install --ignore-pipfile 命令报错,提示无"zlib"模组,排查之后,发现是因为在创建环境的时候没有指定py版本,ubuntu系统本来自带py2.7,但是这里需要用py3.6,py3.6里有内置"zlib"模组。如果用其他没有内置zlib的python版本,需要下载zlib之后再重新编译python
指定py版本又遇到了pip的报错,需要检查pip是不是安装在py3.6下,我是因为有py3.5的环境,pip在py3.5下,所以报错。重新安装了pippython3.6的site-packages下,
并且添加环境变量,就可以解决了。

部分参考链接:
https://blog.csdn.net/Hanniel/article/details/94199734
https://www.jianshu.com/p/d08a4aa0008e
https://www.jianshu.com/p/49a34f25acee


http://www.ppmy.cn/devtools/108726.html

相关文章

[代码已更新]2024数学建模国赛高教社杯C题:农作物的种植策略 思路代码文章助攻手把手保姆级

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码的参考助攻, 会提供2024年高教社国赛C的全套参考内容(python 以及matlab 两种)(一…

【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)

数据操作 N维数组是机器学习和神经网络的主要数据结构其中 2-d 矩阵中每一行表示每一行表示一个样本 当维度来到三维的时候则可以表示成一张图片,再加一维就可以变成多张图片,再加一维则可以变成一个视频 访问元素 冒号表示从冒号左边的元素到冒号右…

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!&#xff0…

如何通过k8s来降低运营成本?

通过k8s来降低运营成本从大方面上分为两类:资源配置和自动运维。下面具体来聊聊。 资源配置方面 资源配置主要是通过资源使用率来减少成本。 超卖 多数服务都有资源浪费的情况,特别是业务系统多数为IO密集型。CPU利用率很低,这时候可以进行超…

前端 Vue3 项目开发—— ESLint prettier 配置代码风格

ESLint & prettier 介绍 如果你用的是 pnpm create vue 来创建项目,那么创建项目时就会让你选择是否添加 ESLint 和 prettier 我们在上一篇博客中详细介绍过 ESLint,可以说上一篇博客是这篇博客的先修知识,所以各位小伙伴们请先去看看我…

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 …

K8S 发布应用

前言 昨儿个用 unbuntu20.04 又装了一次K8S 用的 kubeadm containerd Cilium (CNI) 又重新撸了一遍 这里只记录 应用发布的笔记 正文 #创建deployment kubectl create deployment nginx --imagenginx #我这边大约30秒后显示为 ready kubectl get deployments kubectl desc…

华为云征文|Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查

引出 4核12G-100G-3M规格的Flexus X实例使用测评第3弹:Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查 什么是Flexus云服务器X实例 官方解释: Flexus云服务器X实例是新一代面向中…