请问Python具体怎么配置virtualenv虚拟环境?

2020-08-06 09:52发布

2条回答
aijingda
1楼 · 2020-08-06 10:01.采纳回答

有的时候因为各种原因,在操作系统下,我们会安装很多版本的Python解释器。同样,我们也有可能因为各种原因,需要不同版本的模块,比如Django1.8,Django1.11。再加上pip工具管理器的版本混乱问题。这就使得很多人在Python的环境管理上产生极大的混乱。

通常每个项目,甚至项目不同阶段的版本,需要不同的Python解释器和依赖库。为了清晰明了,安全可靠的管理这些环境,需要为每个项目或每个应用各自建立一套“独立、隔离”的Python运行环境。

virtualenv就是用来为每一个项目创建一套“独立隔离”的Python运行环境的工具。

在Python3.4之前,virtualenv需要独立手动安装后,方可执行。之后的版本中,Python自带了一个venv库,执行Python –m venv就可以达到与virtalenv同样的效果。更多的用户习惯上还是使用virtualenv的方式。

Python多解释器环境加上virtualenv创建的多虚拟环境共存在同一操作系统下的情形一般如下图所示:

image.png-49.5kB

核心要点是:

  • 一个操作系统下,可以有多个“操作系统级别的”Python解释器;

  • 每个Python解释器有一个指向自己的pip工具,两者一一对应;

  • 通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;

  • 每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages。

如果你理解了上面几点,就能明白virtualenv和pip在使用上的区别。

安装virtualenv

下面我安装的是16.0.4版本的virtualenv。更高版本的下面有一定说明,请注意区别。

以windows操作系统为例,要安装virtualenv,建议直接使用当前环境变量下指定的pip,也就是你操作系统默认的那个python版本所绑定的pip,这样方便命令调用。通常如下:

pip install virtualenv

可以在命令行界面中验证安装:where virtualenv

image.png-64.5kB

可以看出,这里的virtualenv是作为一个可执行程序,安装在我系统默认的Python36版本下。而我当前操作系统下其实有3个版本的Python:

image.png-57.4kB

你或许有疑问?那我要虚拟Python2.7的版本怎么办?在2.7下也装一个virtualenv?不需要的!virtualenv可以指定虚拟的Python解释器版本,只要你本地操作系统下安装了这个版本!

建立虚拟环境

如果自己手动管理所有的虚拟环境,通常会建立一个目录,用来放置所有的虚拟环境。这里:mkdir d:\Python_virtualenvs,然后运行: virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django

image.png-112.8kB

-p: 指定你要虚拟的Python版本,这里选择了本地的python2.7

–-no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。

d:\Python_virtualenvs\for_django:表明在该目录下,建立一个叫做for_django的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁建立的。

我们看一眼文件系统中的情况,从截图中可以看出,环境非常干净!

image.png-64.9kBimage.png-78.9kB

重要说明

当前时间2020年2月,virtualenv的最新版本,以20.0.0+为例,已经取消了–-no-site-packages参数,默认直接使用–-no-site-packages模式。有另外一个参数--system-site-packages,作用是可以访问源Python解释器的库,但是要慎用。所以,这里推荐,直接使用默认模式virtualenv -p xxx destination

ps:windows下,命令行中执行activate.bat命令,貌似在提示符前方没有环境标识符了。

使用虚拟环境

命令行下,进入你要使用的虚拟环境的目录下的script文件夹,运行activate命令。或者使用绝对路径的方式调用该命令。

image.png-212.2kB

注意命令提示符(for_django),它表示你当前在for_django这个虚拟环境内。现在,你可以当做一个正常的Python环境使用。例如运行python命令,又或者使用pip安装第三方库pip install requests。这些都被限制和绑定在for_django这个虚拟环境内,不会对操作系统下本地的Python版本和其它的虚拟环境产生任何的影响!

image.png-175.8kB

退出虚拟环境

要退出虚拟环境,只要运行script目录下的deactivate命令就可以了。

要删除虚拟环境,直接删除虚拟环境所在的目录就可以了,注意不要将其它的环境给删了。但是,删除虚拟环境后,所有以前使用该环境的工程都将受到影响。这点很好理解,所以请确保环境不再有需要再删除!

linux操作系统下的使用

对于linux操作系统,使用方法基本类似。只是虚拟环境中的文件路径和脚本调用的方式和windows系统下不太一样,仔细看下图中的bin目录,提供了一个activate脚本,以及一个写入环境变量的deactivate命令。

image.png-38.7kB

image.png-45.5kB

创建虚拟环境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv

启动虚拟环境: $ source my_venv/bin/activate 

退出虚拟环境: $ deactivate 

删除虚拟环境: $ rm –r my_venv

Pycharm结合virtualenv的使用

windows下的开发,很多时候使用命令行并不是那么方便,尤其是在Pycharm开发环境下,频繁切换界面也是种负担。实际上Pycharm可以指定解释器,直接将项目的Python解释器设置为你要使用的虚拟环境就行,如下所示:

在settings中:

image.png-111.9kB

选择Python:image.png-111.4kB

virtualenv配合pip快速建立开发环境

virtualenv虚拟环境配合pip的freeze功能,可以一次性快捷的将整个环境下的第三方模块全部记录下来: pip freeze > d:\requirements.txtimage.png-48.6kB

对应的,也可以用它一次性通过在别的机器上或虚拟环境里,将文件里列出的第三方库安装起来。只需要使用命令:pip install -r requirements.txt

关于Python的任何学习问题都可以加下这个VX号详细了解:ujiuyewtzb。(备注:学编程)

我是大脸猫
2楼 · 2020-08-06 10:16

Python部署虚拟环境的利器——Virtualenv

virtualenv is a tool to create isolated Python environments.

virtualenv 是创建独立Python开发环境的工具,用于解决同一台机器上不同的Python工程的依赖、版本以及间接权限等问题。比如项目foo1依赖Django1.3,而项目foo2依赖Django1.7,而当前全局开发环境为Django1.8,版本的不同会导致项目所需包的版本不兼容等问题,使项目无法正常运行,使用virtualenv来创建相对独立的虚拟环境,可以很好的解决此类问题。此外,值得一提的是,对于项目打包迁移,如部署Web应用项目等应用场景,virtualenv都很有用武之地。

virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。

下面介绍一下与使用Virtualenv相关的技巧。

1.安装Virtualenv

$ pip install virtualenv

//或者由于权限问题使用sudo临时提升权限

$ sudo pip install virtualenv

2.virtualenv创建虚拟环境

1 virtualenv ENV

2 #创建一个名为ENV的目录,并安装了ENV/bin/python

3 #创建了lib,include,bin目录,安装了pip

lib目录 : 所有安装的python库都会放在这个目录中的lib/pythonX.X/site-packages/中 ;

bin目录 : bin/python是当前虚拟环境使用的python解析器 ;

如果在命令行中运行virtualenv --system-site-packages ENV, 会继承/usr/lib/python3.6/site-packages下的所有库, 最新版本virtualenv把把访问全局site-packages作为默认行为

default behavior.

3.激活virtualenv

1 #ENV目录下使用如下命令

2 source ./bin/activate #激活当前virtualenv

3 #当用户名前面出现小括号括起来的虚拟环境名时,表明虚拟环境被成功激活

使用“pip list”指令可查看当前库

4.关闭virtualenv

deactivate

5.指定python版本

可使用-p PYTHON_EXE选项在创建虚拟环境的时候指定Python版本

1 #创建python2.7虚拟环境

2 virtualenv -p /usr/bin/python2.7 ENV2.7

3

4 #创建python3.4虚拟环境

5 virtualenv -p /usr/local/bin/python3.4 ENV3.4

这样可以解决不同项目python版本冲突以及和python库版本不兼容等问题。

6.生成可打包环境

某些特殊需求下,可能没有网络,我们希望直接打包一个ENV,解压后直接使用,这时候可以使用virtualenv --relocatable指令将ENV修改为可更改位置的ENV

#对当前已经创建的虚拟环境更改为可迁移

virtualenv --relocatable ./

7.获得帮助

virtualenv -h


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问