python创建虚拟环境的三种方式(代码片段)

王张飞 王张飞     2022-10-20     242

关键词:

Python创建虚拟环境的三种方式比较

Python创建虚拟环境的三种方式

首先:为什么需要虚拟环境?

在使用Python语言时,通过pip(pip3)来安装第三方包,但是由于pip的特性,系统中只能安装每个包的一个版本。但是在实际项目开发中,不同项目可能需要第三方包的不同版本,迫使我们需要根据实际需求不断进行更新或卸载相应的包,而如果我们直接使用本地的Python环境,会导致整体的开发环境相当混乱而不易管理,这时候我们就需要开辟一个独立干净的空间进行开发和部署,虚拟环境就孕育而生。

这里,我们以Pycham创建新项目时候环境选择的环境为切入点,如下所示:

Pipenv vs Virtualenv vs Conda

1. Virtualenv

Virtualenv 是目前最流行的 Python 虚拟环境配置工具,同时支持Python2和Python3,也可以为每个虚拟环境指定Python解释器。

请预先安装pip或者pip3(安装pip的三种方式),以pip3为例,一旦正常安装pip后,可使用以下命令安装Virtualenv:

pip3 install virtualenv

在终端或命令提示符下进入(cd)选择的目录搭建一个虚拟环境

virtualenv venv

如果存在多个python解释器,可以选择指定一个Python解释器(比如python3.6),没有指定则由系统默认的解释器来搭建(变更默认的python版本可以看看 % post_link Python/使用update-alternatives管理多个版本的Python %):

virtualenv -p /usr/bin/python3.6 venv

将会在当前的目录中创建一个名venv的文件夹,这是一个独立的python运行环境,包含了Python可执行文件, 以及 pip库的一份拷贝,但第三方包需要重新安装。
要开始使用虚拟环境,其需要被激活:

source env/bin/activate

停用虚拟环境:

deactivate

virtualenv 的一个最大的缺点就是,每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate。这时候virtualenvwrapper出现了,它对不同的虚拟环境使用不同的目录进行管理,并且还省去了每次开启虚拟环境时候的 source 操作,使得虚拟环境更加好用。

pip3 install virtualenvwrapper

vim ~/.bashrc开始配置virtualenvwrapper:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

接着执行 source ~/.bashrc(或./zshrc)。

注意:修改.bashrc还是.zshrc取决于你使用的那种 shell。

Virtualenv相关命令总结:

  • workon: 打印所有的虚拟环境;
  • mkvirtualenv xxx: 创建 xxx 虚拟环境,可以–python=/usr/bin/python3.6 指定python版本;
  • workon xxx: 使用 xxx 虚拟环境;
  • deactivate: 退出 xxx 虚拟环境;
  • rmvirtualenv xxx: 删除 xxx 虚拟环境。
  • lsvirtualenv : 列举所有的环境。
  • cdvirtualenv: 导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages。
  • cdsitepackages: 和上面的类似,但是是直接进入到 site-packages 目录中。
  • lssitepackages : 显示 site-packages 目录中的内容。

总结:Virtualenv的优点:

  1. 使得不同Python应用的开发环境相互独立
  2. 开发环境升级不影响其他应用的开发环境,也不会影响全局的环境(默认开发环境是全局开发环境),因为虚拟环境是将全局环境进行私有的复制,当我在虚拟环境进行 pip install 时,只会安装到选择的虚拟环境中
  3. 它可以防止系统中出现包管理混乱和版本的冲突

2. Pipenv

pipenv 是 Pipfile 主要倡导者、requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile、pip、click、requests和virtualenv,能够有效管理Python多个环境,各种第三方包及模块。

pipenv所解决的问题:

  • requirements.txt 依赖管理的局限
  • 多个项目依赖不同第三方库、包版本问题
  • 依赖分析

pipenv的特性:

  • pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷
  • 过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock,后者存放将包的依赖关系,查看依赖关系是十分方便。
  • 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。
  • 通过加载.env文件简化开发工作流程。
  • 支持Python2 和 Python3,在各个平台的命令都是一样的。

pip是用于安装和管理软件包的包管理器。

可使用以下命令安装pipenv:

pip3 install pipenv

接下来,通过使用以下命令创建一个新环境,在指定目录下创建虚拟环境, 会使用本地默认版本的python:

pipenv install

如果要指定版本创建环境,可以使用如下命令:

pipenv --two  # 使用当前系统中的Python2 创建环境
pipenv --three  # 使用当前系统中的Python3 创建环境
pipenv --python 3  # 指定使用Python3创建环境
pipenv --python 3.6  # 指定使用Python3.6创建环境
pipenv --python 2.7.14  # 指定使用Python2.7.14创建环境

激活虚拟环境:

pipenv shell

删除虚拟环境:

pipenv --rm

使用exit退出当前虚拟环境。

3. Conda

Anaconda(官方网站)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。Anaconda也有自己的虚拟环境系统,称为conda。conda包和环境管理器包含于Anaconda的所有版本当中。

conda是包及其依赖项和环境的管理工具。
适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。
适用平台:Windows, macOS, Linux
用途:

  • 快速安装、运行和升级包及其依赖项。
  • 在计算机中便捷地创建、保存、加载和切换环境。

可以通过以下命令创建虚拟环境:

conda create --name environment_name python=3.6

激活虚拟环境:

conda activate

conda环境的卸载:

conda remove -n environment_name --all

参考资料

  1. https://zhuanlan.zhihu.com/p/163023998
  2. https://blog.csdn.net/zxbylx1120471286/article/details/107187517
  3. https://blog.csdn.net/weixin_40922744/article/details/103721870?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control
  4. https://blog.csdn.net/sinat_28442665/article/details/86292354

python创建虚拟环境的三种方式(venv|pipenv|conda)(代码片段)

...拓展参考插画引言什么是虚拟环境?虚拟环境是一个Python环境,其中安装的Python解释器、库和脚本与安装在其他虚拟环境中的那些是隔离的,而且(默认情况下)安装在系统Python中的任何库(即作为操作系... 查看详情

ubuntu添加虚拟网卡的三种方式(代码片段)

...加一块虚拟网卡:sudoifconfigeno1:1192.168.0.10up以上命令创建了一个叫eno1:1的虚拟网卡,地址是192.168.0.10。 查看详情

类加载的三种方式比较(代码片段)

虚拟机加载类的途径1、由new关键字创建一个类的实例在由运行时刻用new方法载入如:Dogdog=newDog();2、调用Class.forName()方法通过反射加载类型,并创建对象实例如:Classclazz=Class.forName(“Dog”);Objectdog=clazz.newInstan... 查看详情

python项目生成requirements的三种方式

...默认安装到全局的环境中如果上面的命令不能安装到指定Python版本的虚拟环境中,则可用pycharm,进入命令行,运行:参考:python生成requirements.txt的两种方法python脚本之家(jb51.net)我的项目在conda环境中使用的软件包-python黑洞网(py... 查看详情

创建servlet的三种方式(代码片段)

第一种方式,实现Servlet接口1packagecom.example.servlet;23importjava.io.IOException;45importjavax.servlet.Servlet;6importjavax.servlet.ServletConfig;7importjavax.servlet.ServletException;8importjavax.servlet.Ser 查看详情

centos添加环境变量的三种方式(代码片段)

...对当前用户永久生效三、系统所有用户永久生效CentOS添加环境变量的三种方式,以添加php环境变量为例,假定php的安装目录为/usr/local/php5一、仅对当前会话临时生效[root@bogon~]#exportPATH=$PATH:/usr/local/php5/bin二、仅对当... 查看详情

centos添加环境变量的三种方式(代码片段)

...对当前用户永久生效三、系统所有用户永久生效CentOS添加环境变量的三种方式,以添加php环境变量为例,假定php的安装目录为/usr/local/php5一、仅对当前会话临时生效[root@bogon~]#exportPATH=$PATH:/usr/local/php5/bin二、仅对当... 查看详情

react创建组件的三种方式及区别(代码片段)

React创建组件具体的三种方式:1.函数式定义的无状态组件2.es5原生方式React.createClass定义的组件3.es6形式的extendsReact.Component定义的组件 虽然有三种方式可以定义React组件,但是它们有什么不同呢?什么情况下应该使用哪种定... 查看详情

并发编程(壹):创建线程的三种方式及其对比(代码片段)

创建线程的三种方式及其对比1.继承Thread类(1).继承Thread类。并重写run()方法,该方法无参数,无返回值;(2).创建子类实例,并实例化对象;(3).通过start()方法启动,注意:不是通过run()方法启动。publicclassThreadDemoextendsThreadpublicvoid... 查看详情

rdd的三种创建方式(代码片段)

由一个已经存在的Scala集合创建。valseq:immutable.Seq[Int]=1.to(10)valrdd1:RDD[Int]=sc.parallelize(seq)由外部存储系统的文件创建。包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等。//读取外部文件系... 查看详情

rdd的三种创建方式(代码片段)

由一个已经存在的Scala集合创建。valseq:immutable.Seq[Int]=1.to(10)valrdd1:RDD[Int]=sc.parallelize(seq)由外部存储系统的文件创建。包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等。//读取外部文件系... 查看详情

linux系统之apache虚拟主机的三种实现方式(代码片段)

...installhttpdhttpd-manual.noarch2.放行防火墙服务3.查看httpd进程4.创建测试网站文件创建index文件,测试访问五、三种虚拟主机的配置方法1.基于域 查看详情

大数据必学java基础(七十六):创建线程的三种方式(代码片段)

文章目录创建线程的三种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口创建线程的三种方式一、继承Thread类在学习多线程之前,以前的代码是单线程的吗?不是,以前也是有三个线程同时执行的。现在... 查看详情

centos添加环境变量的三种方式(代码片段)

CentOS添加环境变量的三种方式,以添加php环境变量为例,假定php的安装目录为/usr/local/php5 一、仅对当前会话临时生效[[email protected]~]#exportPATH=$PATH:/usr/local/php5/bin二、仅对当前用户永久生效编辑~/.bash_profile文件,在PATH=$PATH... 查看详情

java反射获取class对象的三种方式,反射创建对象的两种方式(代码片段)

Java反射获取class对象的三种方式,反射创建对象的两种方式1、获取Class对象在JavaAPI中,提供了获取Class类对象的三种方法:第一种,使用Class.forName静态方法。前提:已明确类的全路径名。第二种,使用.class方法。说明:仅适合... 查看详情

python爬虫的三种数据解析方式(代码片段)

数据解析方式    -正则  -xpath  -bs4 数据解析的原理:标签的定位提取标签中存储的文本数据或者标签属性中存储的数据正则#正则表达式单字符:.:除换行以外所有字符[]:[aoe][a-w]匹配集合中任意一个字符\\d:数字[... 查看详情

python读取文件内容的三种方式并比较(代码片段)

本次实验的文件是一个60M的文件,共计392660行内容。程序一:defone():start=time.clock()fo=open(file,‘r‘)fc=fo.readlines()num=0forlinfc:tup=l.rstrip(‘\n‘).rstrip().split(‘\t‘)num=num+1fo.close()end=time.clock()printend-startprin 查看详情

springboot工程创建的三种方式

一、通过IDEA的springInitializer创建1.打开创建项目面板File->New->Project->SpringInitializr2.填写Maven坐标,选择项目依赖环境3.选择SpringBoot版本和工程依赖包4.填写工程代码路径,创建项目二、访问:http://start.spring.io1.在页面选择好项... 查看详情