Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法


Posted in Python onJuly 23, 2019

virtualenv简介

含义:

virtual:虚拟,env:environment环境的简写,所以virtualenv就是虚拟环境,顾名思义,就是虚拟出来的一个新环境,比如我们使用的虚拟机、docker,它们都是把一部分的内容独立出来,这部分独立的内容相当于一个容器,在这个容器只呢个,我们可以“为所欲为”----安装需要的依赖包,软件..,同时这个容器是与外界相互独立的,容器与容器直接也是互相独立不影响。

为何要用虚拟环境:

【前提概要】

Django也是一个非常流行的web框架。由于Django的迭代更新非常快,也比较频繁,所以有一些过时的东西需要丢弃掉,一些新的东西需要加进来,从而导致不同的版本之间不兼容。比如Django1.3、Django1.4、Django1.8之间就有很大的差异性。

或者是说,以Python的版本举例,现在工作中使用的Python版本与Python2.x和Python3.x两种。

【故事背景】

假设要进行Python web开发,使用的是Django。手上还有两个老项目A和B需要维护,而新项目C也正在开发中。这里项目A使用的是django1.3,项目B使用的是django1.4,而新项目C使用的是Django1.8。那么问题来了,如何同时在本地进行ABC这三个项目的开发和维护?

正常的模式可能是这样:现在在A项目上有一个BUG需要修复,于是,先执行下面的命令,删除掉原来的版本:

pip3 uninstall django

然后再执行下面的命令安装django1.3

pip3 install django==1.3

数分钟后,bug修复完毕,好,现在进行新项目C的开发了,然后又要重复上面的故事。

好了,这还是最理想的情况。最不理想的情况就是基于django的第三方依赖也是跟Django版本相关的,于是除了install和uninstall Django之外,还要uninstall和install其依赖,Orz,这特么的就尴尬了...

VirtualEnv能做什么呢?

virtualenv可以搭建虚拟且独立的Python运行环境,使得单个项目的运行环境与其它项目独立起来。同时也可以用于在一台机器上创建多个独立的Python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装。

virtualenv是一个非常不错的Python虚拟环境的创建工具,它最大的好处在于:可以让每个Python项目单独使用一个环境,而不会影响系统环境,也不会影响其它项目的环境。

virtualenv可以用于创建独立的Python环境,在这些环境里面可以选择不同的Python版本或者不同的Packages,并且可以在没有root权限的情况下在环境里面重新安装新套件,互相不会产生任何影响,我们可以简单的认为虚拟环境就是一个沙箱系统,我们可以在里面“为所欲为 ”情况下还不会影响外面。

virtualenv安装和使用

virtualenv本质上是个python包, 使用pip安装:

pip3 install virtualenv

在工作目录下创建虚拟环境(默认在当前目录):注意需要自定义虚拟环境的名字!

创建虚拟环境:

cmd命令创建(创建目录为cmd命令当前目录,所以最好切换到所需要的目录下在进行创建)

(1) virtualenv env_t1 (创建纯净环境)

(2) virtualenv --system-site-packages env_t2 (创建环境,继承原安装的模块)

创建虚拟环境有2中模式,一个是纯净模式,一个是基于系统环境的创建(自带了系统装的所有模块)

-# 基于系统环境的创建模式,里面的模块其实是对系统的模块的一个引用,在虚拟环境中是卸载不掉的,因为它只是一种引用关系,除非系统卸载的模块,它才会没了。

-# 纯净模式,里面的不包含系统的模块,需要自己下载安装,从头开始,所以这是在虚拟环境下安装的,你可以在后期卸载。

一般来说,推荐使用纯净模式创建虚拟环境,这样根据自己的需求去安装第三方模块,同时如果想卸载的话也可以在虚拟环境中选择性的卸载。这样自由度更大,而不像另外一种模式,系统里有啥它都引用过来,而且还在虚拟环境中删除不了,影响加载速度等。

Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法

Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法

使用pip3 list 来查看当前环境下安装的模块列表

激活该虚拟环境:

-windows进到目录里,的Script文件夹输入:activate

-linux:soruse env1/Script/activate

退出虚拟环境:

-deactivate

在pycharm中使用虚拟环境:

-files--settings--Project--Project Interpreter--add选择虚拟环境路径下的python.exe即可

三、pipreqs模块的介绍和使用

当运行别人项目的时候,首先需要安装项目的依赖,不然就无法运行,Python的pipreqs模块就给我们提供了自动生成项目依赖内容的功能

安装:

pip3 install pipreqs

使用:

# 然后在项目所在的目录下使用命令生成包含依赖内容的文件

pipreqs ./

如果出现编码格式错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 776: illegal multibyte sequence

解决方法在命令后面指定编码格式:

pipreqs ./ --encoding=utf8

如果已经生成过一次依赖包文件requirements.txt,但是又项目新增了一下模块,此时再在后面添加--force覆盖参数重写即可

pipreqs ./ --encoding='utf8' --force

拿到依赖包文件我们可以快速自动下载依赖一键安装:

pip3 install -r requirements.txt

tips:导出所有已安装的第三方模块:

pip3 freeze > package.txt

以上这篇Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
bat和python批量重命名文件的实现代码
May 19 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Python实现发送QQ邮件的封装
Jul 14 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
Python中拆分字符串的操作方法
Jul 23 #Python
python实现电子书翻页小程序
Jul 23 #Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 #Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 #Python
微信公众号token验证失败解决方案
Jul 22 #Python
django 消息框架 message使用详解
Jul 22 #Python
django 邮件发送模块smtp使用详解
Jul 22 #Python
You might like
php批量删除数据
2007/01/18 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
php取出数组单个值的方法
2018/03/12 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
关于Vue中axios的封装实例详解
2019/10/20 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
pytorch 常用线性函数详解
2020/01/15 Python
python3 实现口罩抽签的功能
2020/03/11 Python
python实现梯度法 python最速下降法
2020/03/24 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
python 递归相关知识总结
2021/03/03 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
不用游标的SQL语句有哪些
2012/09/07 面试题
元旦晚会主持词
2014/03/24 职场文书