想要彻底了解Windows虚拟环境?这一篇墙裂推荐!
作者:互联网
前段时间介绍了Windows下创建虚拟环境的具体步骤,详细请戳链接:https://www.cnblogs.com/weijia-home/p/15024935.html
可能有些朋友对某些细节概念方面的知识还有些陌生,那么今天来补充一下与虚拟环境相关的一些基础概念和工具。
一些基本概念
为什么Python如此强大,受到人们的推崇
1.自身语言的特性,简单易写,这一点想必大家都很清楚。
2.拥有无所不及的第三方库。强大的软件库,让开发者将精力集中在业务上,不必要在简单没有意义的代码上浪费时间(避免重复造轮子的浪费)
为什么创建虚拟环境
为了避免因为版本造成的互不兼容,为项目创建纯净的依赖环境
python 版本
Python 版本指的是 Python 解析器本身的版本。Python有两个大版本,分别是Python2和Python3。但是Python3 不能与 Python2 兼容,导致一些软件库需要设配两种版本的 Python,同时开发者可能需要在一个环境中,部署不同版本的 Python,对开发和维护造成了麻烦。因此出现了版本管理器 Pyenv,类似于 nodejs 的 nvm,可以创建出相互隔离的 Python 环境,并且可以方便的切换环境中的 Python 版本,但和 Python 虚拟环境关系不大。
python 包库
包库也有很多其它的叫法,如:项目、软件源,意思就是别人已经写好的代码。Python库就是用Python写好的程序代码,模块,项目,包的集合。只要你想调用,都是现成的,可以发布、下载和管理。打个比方,就像你平时用的生活用品,你总不可能所有的都自己制作,生产,是要去买的。库就像一个超市,你要什么就去里面寻找。好处很明显,即自己就没必要重复造那些麻烦又没有技术含量的轮子了。
其中 pypi (Python Package Index) https://pypi.org/ 是官方指定的软件包库,基于其上的 pip 工具就是从这里查找、下载安装软件包的。为了提高下载速度,世界上有很多 Pypi 的镜像服务器,在国内也有多个软件源,例如阿里的软件源是:http://mirrors.aliyun.com/pypi/simple/。除此之外,还有其他软件源,如正对科学计算的 anaconda 的软件源 https://repo.anaconda.com/
具体参考链接:https://www.cnblogs.com/weijia-home/p/15017889.html
python 包管理器
首先得弄懂为什么需要Python包管理器,是因为软件包源中的软件包数量巨大,版本多样,不依靠适当的工具很难以管理,很复杂。故需要借助于软件源管理工具,例如 pip、conda、Pipenv、Poetry 等
-
pip 是最常用的包管理工具,通过
pip install <packagename>
命令格式来安装软件包,使用的是 pypi 软件包源 -
conda 多用作科学计算领域的包管理工具,功能丰富且强大,使用的软件包源是 Anaconda repository 和 Anaconda Cloud,conda 不仅支持 Python 软件包,还可以安装 C、C++ 、R 以及其他语言的二定制软件包。除了软件包管理外,还能提供相互隔离的软件环境。
-
Pipenv 是 Kenneth Reitz 在2017年1月发布的Python依赖管理工具,现在由PyPA维护。Pipenv 会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作
-
Poetry 和 Pipenv 类似,是一个 Python 虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布。你可以把它看做是 Pipenv 和 Flit 这些工具的超集。它可以让你用 Poetry 来同时管理 Python 库和 Python 程序
很多包管理工具不仅提供了基本的包管理功能,还提供了虚拟环境构建,程序管理的等功能
Python 虚拟环境
虚拟环境是一个包含了特定 Python 解析器以及一些软件包的自包含目录,不同的应用程序可以使用不同的虚拟环境,从而解决了依赖冲突问题,而且虚拟环境中只需要安装应用相关的包或者模块,可以给部署提供便利。
在工作学习过程中,会不可避免的同时开发多个工程项目。 当出现下列情况:
------两个工程依赖同一个包,但需要的版本不相同,工程A依赖v1.0.0 的包,而工程B依赖的是v2.0.0的包。由于Python无法根据版本来区分包的安装路径,所以这里就会发生版本冲突
------有的项目需要使用Python2来进行开发,有的项目则是需要Python3来进行开发。Python无法分开环境,此时两个环境开始打架,彼此傻傻分不清楚。
以上情况就需要创建虚拟环境,将开发环境进行隔离,让彼此不受影响。
综上所述,因为Python 应用在开发工程项目时,经常需用不同版本的包或者不同版本的解析器,所以不能有一个能适应所有 Python 应用的软件环境,很多时候不同的 Python 应用所依赖的版本是冲突的,满足了其中一个,另一个则无法运行,所以这个时候就需要虚拟环境来将不同版本隔离,使其互不干扰。
构建虚拟环境原理
主要是利用了操作系统中环境变量以及进程间环境隔离的特性
操作系统的环境变量可以为程序提供信息和做信息交换介质,进程可以共享操作系统中的环境变量,也可以为进程指定环境变量,其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序 a.exe,存放在 D:\MyProgram 中,在命令行中执行 a.exe ,会得到提示“ 无法找到程序 a.exe”,为了让系统找到,可以将 D:\MyProgram 路径加入到 PATH 环境变量中,当输入 a.exe 时,操作系统就会从 PATH 所提供的路径中逐个查找,这时就可以找到了。Linux 和 MacOS 具有相似的特性,甚至比 Windows 的功能更丰富。
Python 虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python 环境的隔离。(我愿称之为狸猫换太子)
为了让开发容易区分当前环境是否虚拟环境以及是那个虚拟环境,命令提示符前会加上特殊标记,例如:
或者:红框中的路径就是你目前项目运行的解释器的路径,如果这个解释器不是你最初安装Python的路径,那么说明你目前处在虚拟环境当中。以下就是我安装虚拟环境的路径:
实际开发中虚拟环境与开发工具配合
虽然通过激活脚本,很容易切换到虚拟环境,但是在实际开发中,还是不够方便,而且现在很多开发工具,特别是提供 Python 解析环境的开发工具,都可以和虚拟环境配合,在开发过程中几乎无感,对开发工作是很大的帮助
Visual Studio Code
简称“VS Code”,是一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, 可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。
VS Code 是个后起之秀,功能强大且具有丰富的插件资源,无疑是这两年发展最快的综合开发工具。现在的版本配置 Python 虚拟环境很简单,只需要选择一个 Python 解释器就好了
同时按下 Ctrl+Shift+P, 在弹出的命令窗口中输入 "解析器",然后在下拉列表中选择 "Python:选择解析器",这里会缓存一些已经创建好的解析器,如果没有想要的,可以选择 "Enter interpreter path" 来选择解析器路径,即已经创建好的虚拟环境脚本文件夹中的 Python 程序,就可以创建一个新的解析器
选择 Python 解析器
如果编辑的是 Python 代码文件,在状态栏中也可以选择和切换解释器,更为方便
选择 Python 解析器
Pycharm
Pycharm 应该是功能最好的 Python 开发工具,转为 Python 开发而生,除了基本的开发功能外,还提供项目创建、打包、测试等丰富功能,有很大的市场占有率
创建项目时,在项目创建对话框中,可以创建或者选择已经已有的解析器
选择 Python 解析器
选择创建新的解析器时,需要选择创建虚拟环境的工具,如 virtualenv;指定虚拟环境的目录;选择 Python 基础解析器,同 virtualenv 工具的 -p 参数的效果;以及是否要继承基础解析器的第三方库 和 是否将这个虚拟环境作为默认环境,即创建其他项目时默认选择
如果选择已存在的解析器,和 VS Code 差不多,可以选择已经缓存的或者指定解析器的路径
部署虚拟环境
请戳链接:https://www.cnblogs.com/weijia-home/p/15024935.html
介绍的非常详细,新手友好!
总结
今天主要了解了 Python 虚拟环境的相关概念和工具,并简单描述了实际工作中的一些使用方式,以便能在开发过程中使用。多学多练嘛
标签:解析器,Windows,创建,墙裂,Python,虚拟环境,版本,软件包 来源: https://www.cnblogs.com/weijia-home/p/15031871.html