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 相关文章推荐
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python中的全局变量用法分析
Jun 09 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
Python SQLite3简介
Feb 22 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
python2和python3哪个使用率高
Jun 23 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
PHP的面试题集
2006/11/19 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
浅入深出Vue之自动化路由
2019/08/06 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
财务会计专业毕业生自荐信
2013/10/02 职场文书
书法培训心得体会
2014/01/05 职场文书
保安岗位职责
2014/02/21 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
答谢词范文
2015/01/05 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript