Pipenv使用指南:轻量级虚拟环境管理工具详解

news2024/11/15 23:01:35

前言

终于能够挤出一点时间来总结最近学到的一些技术知识点了,博主这两周被居家隔离-集中隔离-居家隔离来回折腾,现在终于是得到解放能够空出的时间来写写博客了,但是项目又催的紧,写博文的时间还是有限,这周我会尽量更新博文带来更多干货知识,一直以来谢谢大家的支持!学习是一个不断坚持的动态过程,学以致用才是关键。

一、为什么使用pipenv?

首先我们要明白pipenv存在的开发驱动是什么,对于python虚拟环境来说已经有virtualenv了,在anaconda直接切换一下环境就好了,那么为什么要使用pipenv这个虚拟管理工具呢?

再者就是为什么要使用虚拟环境,我们直接将所有的库都集中安装到一个环境中,想怎么使用就怎么使用,直接调取任何库就可以完成功能,为啥要将其他的库给分开呢?

那么首先来讲讲将所有库都集成到一个环境下带来的问题,可能前期会觉得特别方便,但是等到开发的项目越来越多或者是有打包的需求的话,就很麻烦了,总结一下共有三点弊端:

  • 库之间版本调试,切换问题。对于每个库来说都有兼容与不兼容的python版本,一些特殊的库,比如Jython库就不支持3.x以上的库,仅支持2.7的。如果你的项目需要使用到例如此类的库,但是总不可能将原来的python版本给完全删除重新装过该版本的库。那么环境管理工具就派上用场了。
  • 使用pyinstaller打包成为一个exe程序,一般来说如果使用原始的环境去打包的话,那么由于pyinstaller的特性会使得打包的文件过于巨大。那是因为pyinstaller打包会将整个环境的依赖库统一打包起来,而一些该程序没有用到的库会造成冗余问题。
  • 包之间的依赖版本冲突,有时候集成了过多包会造成这个情况,相互依赖之间的包版本会冲突,但是如果都集中到一个环境里面就很难排查。

故有以上场景就诞生了不同python环境集成各种不同版本不同包的需求,那么让我们再来了解一下这些虚拟环境管理工具的对比。

virtualenv

  • 一个操作系统下,可以有多个“操作系统级别的”Python解释器;
  • 每个Python解释器有一个指向自己的pip工具,两者一一对应;
  • 通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;
  • 每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages。

virtualenvwrapper

virtualenvwrapper是对virtualenv接口的封装。virtualenvwrapper会将虚拟环境的目录统一保存,不需手动管理,使用起来更加便利;

pipenv

pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而它基于的Pipfile则用来替代旧的依赖记录方式(requirements.txt),pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。

pipenv优缺点

优点:

  • 自动关联项目相关的 virtualenv,能够快速的加载 virtualenv 。
  • 提供的pipenv替代pip并自带一个依赖清单Pipfile,和依赖锁定Pipfile.lock。
  • Pipfile除了依赖清单还支持固定pypi源地址,固定python版本。
  • Pipfile还支持dev依赖清单.pipenv install的包会强制使用Pipfile中的源.
  • 使用pipenv graph命令可以看到依赖树。
  • 可以直接切换python2和python3

缺点:

  • Windows下命令行终端开头没有没有venv的名称,让你不知道是否在虚拟环境中,容易误操作
  • 永久设置了Pipfile文件中的源以后,Pipfile文件中看到的还是官方源,但是实际上是已经走了你设置的源了。

二、使用步骤

1.安装

推荐使用python3版本:

pip3 install pipenv

复制代码

安装完成后可通过

pipenv --version

复制代码

查看版本和检测是否安装成功:

2.创建虚拟环境

使用命令pipenv install,可在当前目录下创建 PipfilePipfile.lock 文件,在虚拟环境目录下新增一个虚拟环境

Pipfile文件: 用于保存项目的python版本、依赖包等相关信息 。

[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"
 
[packages]
requests = "*"
pyyaml = "*"
Django = "*"
 
[dev-packages]
pytest = "*"
 
[requires]
python_version = "3.7"
 
[scripts]
django = "python manage.py runserver 0.0.0.0:8080"
复制代码
  • source 用来设置仓库地址,即指定镜像源下载虚拟环境所需要的包

  • packages 用来指定项目依赖的包,可以用于生产环境和生成requirements文件

  • dev-packages 用来指定开发环境需要的包,这类包只用于开发过程,不用于生产环境。

    • requires 指定目标Python版本
  • scripts 添加自定义的脚本命令,并通过 pipenv run + 名称 的方式在虚拟环境中执行对应的命令 。

Pipfile 文件可以复制到其他项目内,通过执行pipenv install命令, 根据这个 Pipfile 文件生成虚拟环境和依赖包的安装

Pipfile.lock文件: 通过hash算法将包的名称和版本,及依赖关系生成哈希值,保证包的完整性,除修改镜像源,非必要情况不对该文件进行修改。

指定目录存放虚拟环境

存放虚拟环境的目录默认指定是C:\Users\bobo.virtualenvs目录下。

pipenv install --python +版本号
复制代码

可指定python版本创建虚拟环境。

也可以通过:

pipenv install --two           创建指定python2.x版本的虚拟环境
pipenv install --three         创建指定python3.x版本的虚拟环境
复制代码

下载默认的环境。

安装第三方库

pipenv兼容pip命令,同样使用pipenv install + 包名的方式安装第三方库。在此目录下打开pycharm时会默认加载此目录对应的虚拟环境。

在pycharm的 Terminal终端输入命令:

pipenv install requests

复制代码

就可以了

修改镜像源

如果官方源站安装第三方库的速度很慢,安装失败,可以修改镜像源

pipenv兼容pip命令,所以也可以在命令加上参数

pipenv install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

复制代码

若想要永久该虚拟环境的镜像源,则需要打开项目目录下的Pipfile 、 Pipfile.lock 文件,将source栏 url = "pypi.org/simple" 链接内容修改为需要的镜像源,例如修改为清华的镜像源url = "pypi.tuna.tsinghua.edu.cn/simple"

 安装到dev环境

安装调试工具、性能测试工具、python语法工具,这些内容仅在本地环境有用,生产环境不需要这些。

比如单元测试相关的包unittest、pytest,只在开发阶段有用,为了和生产环境的包区分开来,可以通过命令 pipenv install --dev + 包名将其归类到【dev-packages】下。

例如安装pytest到开发环境

pipenv install --dev pytest

复制代码

常用命令

pipenv兼容大部分的pip命令,所以 pip命令能实现的内容,也能通过pipenv命令实现

卸载命令

在项目所在虚拟环境中卸载requests包,并在Pipfile文件移除包名

pipenv uninstall requests 	
复制代码

在项目所在虚拟环境中卸载所有包,并在Pipfile文件移除包名

pipenv uninstall --all 	
复制代码

在项目所在虚拟环境中卸载所有dev环境的包,并在Pipfile文件移除[dev-packages]中的所有包名

pipenv uninstall --all --dev	
复制代码

更新命令

在项目所在虚拟环境中更新requests包,并在Pipfile.lock文件中更新相应版本信息

pipenv update requests 
复制代码

在项目所在虚拟环境中更新所有包,并在Pipfile.lock文件中更新相应版本信息

pipenv update
复制代码

在项目所在虚拟环境中查看已过期的包的信息

pipenv update --outdated
复制代码

根据项目所在虚拟环境的Pipfile文件生成/更新Pipfile.lock文件中的依赖包信息

pipenv lock
复制代码

 查看命令

查看项目位置

pipenv --where	
复制代码

 查看虚拟环境位置

pipenv --venv	
复制代码

 查看虚拟环境python解释器位置

pipenv --py	
复制代码

查看依赖包信息

pipenv graph	
复制代码

激活与退出虚拟环境

使用pipenv install 命令创建虚拟环境时,创建成功会默认激活虚拟环境

若想退出虚拟环境,可输入 exit 退出(仅适用于黑屏终端,pycharm默认打开项目就加载了虚拟环境,只能修改指定的虚拟环境) 目录下存在 Pipfile 、 Pipfile.lock 文件,已创建过虚拟环境,可通过命令 pipenv shell进行激活。

删除虚拟环境

直接在该目录下面打开终端输入:

pipenv --rm
复制代码

该命令无法在pycharm的Terminal终端执行。删除虚拟环境后,如果目录下仍存在 PipfilePipfile.lock 文件,可以通过pipenv install重新进行安装虚拟环境,且重新安装的虚拟环境,名称与删除前一致

生成requirements.txt 文件

pipenv可以像virtualenv一样使用命令生成requirements.txt文件

pipenv lock -r --dev >requirement.txt
复制代码

命令中的--dev并不是说把 Pipfile文件中 [dev-packages]下的包导出,而是把所有依赖包导出。 pipenv还可以通过requirements.txt文件 安装依赖包

pipenv install -r requirement.txt
复制代码

通过pyinstaller导出

首先需要到安装pipenv虚拟环境下的目录安装pyinstaller

pipenv install pyinstaller
复制代码

将依赖包都安装完成后直接:

#开始打包
pyinstaller -Fw -i xx.ico ./xxx.py
复制代码

就好了

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则语言的性质

正则语言的性质 一、正则语言的性质 1.正则语言的泵引理 设LLL是正则语言,则存在与LLL相关的常数nnn满足:对于任何LLL中的串www,如果∣w∣≥n|w|\geq n∣w∣≥n,则我们就能把www打断为三个串wxyzwxyzwxyz使得: y̸ϵ…

2011年专业408

文章目录0 结果1 题目2 思路2.1 思路1(暴力解:排序)2.2 思路2(较优解:归并合并数组)2.3 思路3(较优解:数组指针后移)2.4 思路4(最优解:两个数组的…

ARM BTI指令介绍

目录 一、JOP 二、BTI 三、启用BTI 四、BTI是怎么实现的 一、JOP JOP(Jump-oriented programming)类似于ROP(Return-Oriented Programming)。在 ROP 攻击中,会扫描出useful gadgets(易被攻击的一段代码…

【数据结构】顺序队列的原理及实现

1.什么是队列 队列是一种比较特殊的线性表,特殊就在于它只允许在表的前端来进行删除,在表的后端来进行插入,队列它是一种操作受限制的线性表。插入的一端称为队尾,删除的一端称为队头,队列里没有元素就称它为空队列。…

快速使用代码编辑工具vim+ctags+cscope快捷使用itop3568开发板

当以上配置全部完成后,每当拿到新的工程代码,进入相关代码目录,利用 vim ./命令打 开当前目录, 然后 crtl 生成插件所需文件,最后使用命令:qa!退出 vim。此步只需进行一 次。 在此目录中打开任意代码文件或任意子目录…

jdk8新特性-日期时间

1、介绍 日期时间类在Java开发中是必不可少的,前后端如何传递时间参数、数据库的时间在Java中对应什么类型、Java中时间转换的各种方式有哪些? 2、Date类 Date类是JDK1.0时期推出来的第一代时间类,位于java.util包下,是最常用的…

unctf easy_serialize反序列化字符逃逸

&#xfeff;ctf题目平台&#xff1a;UNCTF - HACKING 4 FUN。web题难度适中 easy_serialize 题目源码&#xff1a; <?php include "function.php"; $action $_POST[action]; $name $_POST[name]; $pass $_POST[pass]; $email $_POST[email]; ​ function …

南京小米java面经(一面)

目录1.java支持多继承吗2.线程的生命周期3.线程和进程的区别4.单例模式有几种5.写一下双重锁的单例6.jvm有哪些区域7.jvm哪些区域是线程共享的&#xff0c;哪些是线程私有的8.gc中判断对象可回收的方式有哪些9.gc垃圾回收算法有哪些10.哪些对象可以作为gc root11.gc中的引用计数…

软件设计师教程(四)程序设计语言基础知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 程序设计语言知识软件设计师…

工资管理系统

一、系统简介 工资管理涉及企业管理的多个方面&#xff0c;如员工基本信息、员工在职离岗、员工考勤、员工加班等等。根据这些信息&#xff0c;在每个月的固定时间&#xff0c;生成全体员工的月工资&#xff0c;部门月工资以及全厂月工资。对于月工资&#xff0c;能够实现按照员…

机器学习【西瓜书/南瓜书】--- 第五章 神经网络

1.神经元模型 1.1 M-P神经元模型 输出函数&#xff1a; 其中θ为阈值&#xff0c; ω i为第i个神经元的连接权重&#xff0c; xi为来自第i个神经元的输入。 1.2 激活函数 阶跃函数&#xff1a; 理论上我们使用阶跃函数。将输入值映射为输出值为0/1&#xff0c;显然1为神经元…

Windows下编译安装OpenCASCADE

OpenCASCADE (以下简称OCC)是一套开源的几何建模系统&#xff0c;提供了曲面、实体等建模方式&#xff0c;已经广泛应用在CAD、CAE、CAM等软件开发。 OpenCASCADE官网已经提供OpenCASCADE的编译安装方法&#xff0c;本文结合实操过程&#xff0c;简述其过程。 零、环境 操作系…

Databend v0.9.0 版本发布

各位社区小伙伴们&#xff0c;历经数月开发&#xff0c;Databend 于 2023 年 1 月 13 日迎来了 v0.9.0 版本的正式发布&#xff01; 这次新版本是 Databend 迈向 1.0 版本的最后一个大版本&#xff0c;也是迄今为止我们对核心代码重构幅度最大的一个版本&#xff01;相较于 v0…

C++ string容器,cha*

目录 1.string基本概念 2.string构造函数,char* 3.string赋值操作 4.string字符串拼接,append 5.string查找和替换,find,replace 6.string字符串比较,compare 7.string字符存取[].at&#xff0c;取&#xff0c;修改单个字符&#xff0c;size返回字符串长度 8.string插入和…

数学建模学习笔记(13)分类模型

分类模型分类问题的基本概念逻辑斯蒂回归&#xff08;Logistic&#xff09;Fisher线性判别分析多分类问题的SPSS求解分类问题的基本概念 分类问题概述&#xff1a;对于给定的一个对象&#xff0c;根据其特征将其划分到多个已给定的类别中的一个。 二分类和多分类&#xff1a;…

题目:两数之和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录描述描述 方式1:暴力遍历 public static int[] twoSum(int[] nums, int target) {int i 0;int j 1;int[] result new int[2];for(int m i;m<nums.length-1;m){…

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法今天小编分享量子点偶联聚合物&#xff0c;一起看看吧&#xff1a;Cds/CdTe-PAA-P4VP/BSA的制备过程&#xff1a;称取86.5mgCdCl2于三口瓶中&#xff0c;加入295mL二次水&#xff08;考虑到在调pH值时会增加溶液的体积&#xf…

(14)工业界推荐系统-小红书推荐场景及内部实践【重排】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

目前音质最好的蓝牙耳机有哪些?2023公认音质最好的蓝牙耳机推荐

随着技术的进步&#xff0c;蓝牙耳机的功能也越来越多样&#xff0c;人们在选择蓝牙耳机时也更能够“精准”地搜索关键词&#xff0c;进行选择。不少人很注重蓝牙耳机的音质&#xff0c;最近看到不少人问&#xff0c;目前音质最好的蓝牙耳机有哪些&#xff1f;下面&#xff0c;…

如何录制视频课程?右下角带人脸的视频怎么录制

现如今网络十分发达&#xff0c;想学习知识也十分简单&#xff0c;只要在网上搜索你想要学习的内容&#xff0c;就会出现许多相关的视频课程。那您知道如何录制视频课程吗&#xff1f;在录制时如何录入人脸&#xff1f;其实一款专业的录屏软件就能轻松搞定。今天小编教大家使用…