7.python虚拟环境详解
1.为什么创建虚拟环境?
和其他⼤多数现代编程语⾔⼀样,Python对包和模块的下载、存储以及管理有其⾃⼰的⼀套⽅法,Python的包⼀般都存在⼏个特定的地⽅,⼤部分系统包会存在sys.prefix指定的路径下;⼤部分第三⽅包,⽐如easy_install或pip会将包存放在site-packages所指定的路径下。
Python应⽤程序通常会使⽤不在标准库内的软件包和模块,应⽤程序有时需要特定版本的库,由于Python导⼊模块不能区分模块版本,这意味着⼀个Python安装可能⽆法满⾜每个应⽤程序的要求。当我们同时开发多个⼯程时,不同的⼯程会将第三⽅的包存放在相同的路径下。如果有两个⼯程依赖同⼀个包,但是所需要的版本却不⼀样,例如应⽤程序A需要特定模块的1.0版本但应⽤程序B需要2.0版本,由于Python⽆法根据版本来区分包的安装路径,所以这⾥就会发⽣版本冲突,安装版本1.0或2.0将导致某⼀个应⽤程序⽆法运⾏。
这个问题的解决⽅案是创建⼀个虚拟环境(),⼀个⽬录树,其中安装有特定Python版本以及许多其他包,然后不同的应⽤将可以使⽤不同的虚拟环境,从⽽解决需求相冲突。应⽤程序 A 可以拥有⾃⼰的安装了 1.0 版本的虚拟环境,⽽应⽤程序 B 则拥有安装了 2.0 版本的另⼀个虚拟环境。如果应⽤程序 B 要求将某个库升级到 3.0 版本,也不会影响应⽤程序 A 的环境。使⽤虚拟环境的另⼀个好处是:保持开发
环境的简洁、有序。
如果还没理解怎么办?结合具体场景再理解⼀遍
java和javascript的相同点
在实际项⽬开发中,我们通常会根据⾃⼰的需求去下载各种相应的框架库,如Flask,Django,Scrapy,Beautiful Soup等,但是可能每个项⽬使⽤的框架库并不⼀样,或使⽤框架的版本不⼀样,这样需要我们根据需求不断的更新或卸载相应的库。这样的Python环境操作会给开发环境和项⽬造成很多不必要的⿇烦,管理也相当混乱。
具体场景1:假设两个Python项⽬A和B,这两个项⽬都需要使⽤同⼀个第三⽅模块tensorflow。如果这两个项⽬使⽤相同的tensorflow版本,也许不会有什么问题。但是,当A和B项⽬使⽤不同的tensorflow版本时即A使⽤tensorflow 0.70版本;B使⽤tensorflow 0.80版本。由于Python导⼊模块不能区分模块版本,导致项⽬A和项⽬B不能使⽤tensorflow的不同版本。
具体场景2:项⽬安装Flask框架flask-0.10.1版本,命令⾏输⼊sudo pip install flask==0.10.1,会将flask-0.10.1安装
到/usr/local/lib/python3.5/dist-packages路径下;如果在⼀台电脑上,想开发多个不同的项⽬,需要⽤到同⼀个包的不同版本,如果使⽤上⾯的命令,在同⼀个⽬录下安装或者更新,新版本会覆盖以前的版本,其它之前的项⽬就⽆法运⾏了。
2.什么是虚拟环境?
虚拟环境是⽤于依赖项⽬管理和项⽬隔离的Python⼯具,允许Python站点包(第三⽅库)安装在本地特定项⽬的隔离⽬录中,⽽不是全局安装(即作为系统范围内的Python的⼀部分)。即Python虚拟环境的主要⽬的是为了给不同的⼯程创建互相独⽴的运⾏环境。虚拟环境可以搭建独⽴的Python运⾏环境,使得单个项⽬的运⾏环境与其他项⽬互不影响,每⼀个⼯程都有⾃⼰的依赖包。并且,虚拟环境的数量没有限制,我们可以轻松地⽤virtualenv或者pyenv等⼯具来创建多个虚拟环境。
⽩话:python中通过虚拟化出来⼀个空间,从电脑独⽴开辟出来的环境,与主环境完全隔离。通俗的来讲,虚拟环境就是借助虚拟机docker 来把⼀部分内容独⽴出来,我们把这部分独⽴出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。避免项⽬中对于环境要求,造成的插件版本混乱。
简单概括:
概念:⼀个独⽴的局部的 Python 环境;完全模拟系统全局 Python 环境的使⽤,如安装、卸载包到逻辑操作等
作⽤:让项⽬运⾏在⼀个独⽴的局部的 Python 环境中,使采⽤不同环境的项⽬互不⼲扰。
3.搭建虚拟环境的过程和常见的使⽤⽅法
1).安装virtualenv软件包
前提必须安装好python环境,并检查电脑系统环境path是否有python路径,使⽤虚拟环境需要借助virtualenv或pyvenv,(其中pyvenv是较新的⼯具,和virtualenv的使⽤⽅法类似),它们的使⽤⾮常简单。这⾥主要讲解virtualenv,virtualenv 是⼀个创建隔绝的Python环境的⼯具,⾸先安装virtualenv(如果使⽤Python 3,它⾃动默认安装了pyvenv)。
1 pip install virtualenv
它会默认安装到你的python库⽂件lib中,可以看安装完成的地址,⾥⾯给出了安装之后的库地址
2).创建虚拟环境(virtualenv基本使⽤)
(1). 通过上⾯的步骤安装成功之后,⾸先确定好要放置虚拟环境的⽬录(我⼀般习惯在项⽬当中建⽴⼀个⽬录⽤来存放给这个项⽬使⽤的虚拟环境),然后进⼊你想要创建python虚拟环境的⽬录下,没有合适的就创建⼀个空⽂件夹即可:
1 mkdir filename      # 可以新建⼀个名为filename的空⽂件夹,⽤来存放即将创建的虚拟环境
2 cd filename        # 进⼊到这个空⽂件夹下
(2). cd 到存放虚拟环境的的地址,就可以创建虚拟环境了,执⾏下⾯的命令会在当前所在⽬录进⾏创建(若省略名字将会把⽂件均放在当前⽬录):
1 virtualenv envname      # venvname为虚拟环境⽬录名,⽬录名⾃定义
(3). 创建虚拟环境时可以加上版本号指定 Python 版本,不然默认系统全局下的 Python 环境:(Linux系统下是Python2的虚拟环
境,Windows系统下是⾃⼰安装好的系统全局python版本,如果系统上有多个版本的 Python,您以通过运⾏python3或您想要的任何版本来选择特定的Python版本)
1 virtualenv -p python3 test_env1      # -p参数指定Python解释器程序
2
3 virtualenv -p /usr/local/bin/python3.5 test_env2  # -p参数指定Python解释器程序(路径)
(4). 创建虚拟环境时可以继承系统三⽅库 ,添加参数--system-site-packages,即项⽬检索库的时候,也会到系统的三⽅库中,不添加时,默认只到虚拟环境中查库:
1 virtualenv --system-site-packages envmane
【补充】:虚拟环境到底长啥样?执⾏virtualenv envname命令之后,就会在当前的⽬录中创建⼀个⽂件夹,并在其中创建包含Python解释器,标准库和各种⽀持⽂件的副本的⽬录,⽣成如下的⽬录结构:(Linux或Mac系统下)
1├──bin
2│├──activate
3│├──activate.csh
planned4│├──activate.fish
5│├──easy_install
6│├──easy_install-3.5
7│├──pip
8│├──pip3
9│├──pip3.5
10│├──python->python3.5
11│├──python3->python3.5
12│└──python3.5->/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
13├──include
14├──lib
stacklands15│└──python3.5
16│└──site-packages
17└──pyvenv.cfg
bin: ⽤于管理虚拟环境的⽂件,bin⽬录下有⼀个重要的脚本⽂件activate,这个脚本就是⽤来将其所在的虚拟环境设置为当前Python的运⾏环境
include: 编译Python包时所需要的C头⽂件
lib: Python⾃带及第三⽅的库这其中还包含有⼀些Python的⼯具和可执⾏⽂件等副本。这些⽂件⽤来保证Python代码可以独⽴于系统环境⽽运⾏。
【注意】:1.上⾯的结构是在Linux或Mac系统下,这⾥的bin⽬录在Windows系统下叫Scripts⽬录;
     2.Windows与 Mac 不同的是,虚拟环境的 bin ⽬录下只有 activate 脚本,没有 deactivate 脚本。
3). 激活虚拟环境
⾸先确保cd到存放虚拟环境⽂件夹⽬录下,选择要激活的虚拟环境(例如选择envname):
1 envname\Scripts\activate        # 在Windows上python安装教程mac
2
3 source envname/bin/activate    # 在Unix或MacOS上
(这个脚本是为bash shell编写的,如果使⽤ csh 或 fish shell,则应该改⽤activate.csh或activate.fish脚本)。进⼊之后就可以通过pip 命令安装、升级和移除各种需要的框架依赖包和软件包了,此时使⽤pip安装的包都将会放在已激活的这个虚拟环境⽂件夹中,与全局安装的Python隔离开。
4). 退出虚拟环境
在激活的虚拟环境中,执⾏命令 deactivate:
1 deactivate
执⾏完上⾯的代码,将会回到系统默认的Python解释器,包括已安装的库也会回到默认的。即我们的shell提⽰符回归到了正常状态,同时Python的环境也切换到了全局的系统环境。
5). 删除虚拟环境
直接删除虚拟环境所在⽬录即可:
1  rm -rf venvname
4.虚拟环境的配置(统⼀管理虚拟环境)
通过上⾯的步骤其实已经完成虚拟环境virtualenv的安装和使⽤了,虚拟环境的引⼊解决了我们关于环境冲突的问题,但是它同时也带来了⼀个问题,就是虚拟环境过多所带来的管理问题,它需要我们记住每⼀个虚拟环境的⽬录,才能进⼊虚拟环境并操作,因此这⾥的virtualenv不是最完美的,因为virtu
al的启动、停⽌脚本都在特定⽂件夹,可能⼀段时间后,就会有很多个虚拟环境散落在系统各处,很难再
记住它们的名字或者位置。
鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使⽤virtualenvwrapper,virtualenvwrapper就是专门⽤来解决虚拟环境管理问题的⼀个⼯具,它提供了⼀系列命令使得虚拟环境⼯作变得便利,它把你所有的虚拟环境都放在⼀个地⽅,我们可以很⽅便地⽤它来实现对虚拟环境的创建,删除,拷贝,并且可以轻松地在不同环境间进⾏切换。
1). 安装virtualenvwrapper(确保virtualenv已安装)
1 pip install virtualenvwrapper      # Linux和Mac系统
2 pip install virtualenvwrapper-win  # Windows使⽤该命令
2). 配置环境变量
(1). 为什么配置虚拟环境?安装完virtualenvwrapper之后,此时mkvirtualenv这个命令还不可以直接使⽤,原因是我们还没有配置虚拟环境的环境变量,包括workon我们也⽆法使⽤。拿Linux系统举例,当
安装第三⽅包的时候,会先source⼀下virtualenvwrapper.sh这个⽂件(执⾏脚本⽂件的意思),因为mkvirtualenv指令是在virtualenvwrapper.sh这个⽂件⾥⾯,也就是执⾏virtualenvwrapper.sh这个⽂件的时候,才可以运⾏像mkvirtualenv这样的指令;所以把source /usr/local/bin/virtualenvwrapper.sh 这段代码添加到⼀个⽂件⾥⾯,每次只要打开这个⽂件,就会执⾏。
(2). 查看⼀下virtualenvwrapper.sh的路径:
1 which virtualenvwrapper.sh    # 假设路径为/usr/local/bin/virtualenvwrapper.sh
(3). Linux或Mac系统下配置:
1# 1、在~(家⽬录)下创建⽬录⽤来存放虚拟环境(有就不⽤)
2 mkdir .virtualenvs
3
4 vim ~/.bashrc        # 打开.bashrc配置⽂件
5
6# 添加如下内容:
7 export WORKON_HOME=$HOME/.virtualenvs          # virtualenvwrapper存放虚拟环境⽬录
8 source /usr/local/bin/virtualenvwrapper.sh    # virtrualenvwrapper会安装到python的bin⽬录下,该路径是python安装⽬录下bin/virtualenvwrapper.sh
9
10 source ~/.bashrc    # 读⼊配置⽂件,⽴即⽣效
此时创建虚拟环境时所有的虚拟环境都位于/home/下的隐藏⽬录.virtualenvs下;创建虚拟环境需要联⽹;创建成功后, 会⾃动⼯作在这个虚拟环境上;⼯作在虚拟环境上, 提⽰符最前⾯会出现 “虚拟环境名称”。
如果~/.bashrc⾥⾯的内容改为export WORKON_HOME=~/Envsname,这样会在WORKON_HOME变量指定的⽬录下新建名为Eenvsname 的虚拟环境。
(4). Windows系统下配置:
给虚拟环境安装⽬录设置⼀个专门的⽬录,Windows系统下安装完virtualenvwrapper-win,再创建虚拟环境时,会默认放在C:\Users\电脑⽤户名\Envs⽬录中。
如果这样满⾜不了我们的需求,我们想把项⽬放在其他盘(或其他位置),就需要我们⾃⼰配置⼀下环境路径,通过设置WORKON_HOME路径,给我们的python虚拟环境指定⼀个存放位置:
> 新建要存⼀个⾃⼰想要放虚拟环境的⽂件夹:例如 D:\codeworkpace\python\envs
> 配置电脑系统环境变量,->新建系统变量 -> 变量名:WORKON_HOME ->指定路径:D:\codeworkpace\python\envs
配置完环境变量就会在WORKON_HOME所在的路径下创建集中存放虚拟环境的⽬录了。
3). virtualenvwrapper基本使⽤指令
1 mkcirtualenv 虚拟环境名称# 创建虚拟环境
2
3 workon                    # 查看当前的虚拟环境⽬录(列出所有虚拟环境列表)
创建网站应该先做什么
4
5 workon 虚拟环境名称# 切换到指定虚拟环境(进⼊虚拟环境)
6
7 deactivate                # 退出虚拟环境
8
9 rmvirtualenv 虚拟环境名# 删除虚拟环境(先退出再删除)
10
11 which python              # 查看虚拟环境的python的路径
1 conda create -n xxxx python=3.5    # 创建指定python版本的xxxx虚拟环境:
2
switch是电子产品吗
3 conda activate xxxx    # 进⼊xxxx环境
4
5 conda deactivate      # 退出(关闭环境)
6
7 conda remove -n your_env_name(虚拟环境名称) --all    # 删除虚拟环境
8
9 conda remove --name your_env_name  package_name    # 删除虚拟环境中的某个包
10
11# 查看已安装环境(显⽰所有的虚拟环境,conda默认(⾃带)有⼀个base环境)
12 conda info –e
13 conda info –envs
14 conda env list
【注意】:conda离线创建环境时:需要将错误信息⾥有⼀项是offline mode:false 改为 offline mode:true ,不然创建不成功
1 conda config --set offline true
【补充】:安装时可能出现的bug
1).  anaconda装环境遇到⽆法定位程序输⼊点OPENSSL_sk_new_reserve……问题:⾸先进⼊Anaconda\DLLS⽬录,查看libssl-1_1-
x64.dll的⽇期;然后进⼊Anaconda\Library\bin⽬录,⽐较两者⽇期;如果不⼀致,将DLLS中的替换到bin中的;最后再执⾏conda create -n xxxx python=3.5
即可。
最后补充俩指令:
查看虚拟环境中安装的包:pip freeze 或 pip list
查看⽂件⾥⾯的内容,例如⽂件:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。