Python 虚拟环境

Python 之所以强大,除了语言本身的特性外,更重要的是拥有无所不及的第三方库。强大的软件库,让开发者将精力集中在业务上,而避免重复造轮子的浪费。但众多的软件库,形成了复杂的依赖关系,加上 Python2 和 Python3 旷日持久之争,对采用 Python 开发的项目造成了不少困扰,所以 Python 建议,通过虚拟环境工具为项目创建纯净的依赖环境

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 环境的隔离。

为了让开发容易区分当前环境是否虚拟环境以及是那个虚拟环境,命令提示符前会加上特殊标记,例如:

通过virtualenv 工具构建(Python3.3之前)

在 python3.3 之前,只能通过 virtualenv 创建虚拟环境,首先需要安装 virtualenv

pip install virtualenv

安装完后,在你需要创建虚拟环境的项目目录下创建一个名为 myvenv 的虚拟环境:

virtualenv --no-site-packages myvenv

参数 --no-site-packages 的意思是创建虚拟环境时,不复制主环境中安装的第三方包,也就是创建一个 “干净的” 虚拟环境

virtualenv 还有很多参数,用于不同的使用场景,例如:

  • -p: 用于指定 Python 解析器,就是安装好的 Python 应用程序,默认为当前环境中的 Python

  • --no-pip:不需要安装 pip,默认为安装

  • --clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

通过venv模块构建(Python3.3以后)

Python3.3 之后,可以用模块 venv 代替 virtualenv 工具,好处是不用单独安装,3.3 及之后的版本,都可以通过安装好的 Python 来创建虚拟环境:

python -m venv myvenv

可以在当前目录创建一个名为 myvenv 的虚拟环境

venv 有些参数,不过相比 virtualenv 少了些,这里简单介绍几个:

  • --without-pip: 不需要安装 pip,默认为安装

  • --clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

因为 venv 是依附于一个 Python 解析器创建的,所以不需要指定 Python 解释器版本

激活venv

虚拟环境创建好后,需要激活才能在当前命令行中使用,可以理解成将当前命令行环境中 PATH 变量的值替换掉

通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本

Windows 系统:

激活方式

1.命令行提示符(<myvenv> 是你自己的虚拟环境目录)

<myvenv>\Scripts\activate.bat

2.powershell 命令行(<myvenv> 是你自己的虚拟环境目录)

<myvenv>\Scripts\activate.ps1

也可以之间进入到activate.bat的目录下直接输入activate.bat激活

powershell下直接输入 .\activate.ps1直接激活

退出venv

退出虚拟环境很简单,只需要执行 deactivate 命令就行,这个命令也在虚拟环境的脚本目录下,因为激活时,将脚本目录设置到 PATH 中了,所以可以直接使用

deactivate

退出虚拟环境相当于将 PATH 恢复成原来的

与开发工具配合

虽然通过激活脚本,很容易切换到虚拟环境,但是在实际开发中,还是不够方便,而且现在很多开发工具,特别是提供 Python 解析环境的开发工具,都可以和虚拟环境配合,在开发过程中几乎无感,对开发工作是很大的帮助

Visual Studio Code

VS Code 是个后起之秀,功能强大且具有丰富的插件资源,无疑是这两年发展最快的综合开发工具。现在的版本配置 Python 虚拟环境很简单,只需要选择一个 Python 解释器就好了

  • 同时按下 Ctrl+Shift+P, 在弹出的命令窗口中输入 "解析器",
  • 然后在下拉列表中选择 "Python:选择解析器",这里会缓存一些已经创建好的解析器,
  • 如果没有想要的,可以选择 "Enter interpreter path" 来选择解析器路径,即已经创建好的虚拟环境脚本文件夹中的 Python 程序,就可以创建一个新的解析器

选择 Python 解析器

如果编辑的是 Python 代码文件,在状态栏中也可以选择和切换解释器,更为方便

部署虚拟环境流程

之所以在开发时选择虚拟环境,除了避免库之间的冲突,还有重要的原因是方便部署,因为虚拟环境是独立的,仅包含了项目相关的依赖库,所以部署的效率更高,风险更小

一般部署流程是:

  1. 开发完成后,使用 pip freeze > requirements.txt 命令将项目的库依赖导出,作为代码的一部分

  2. 将代码上传到服务器

  3. 在服务器上创建一个虚拟环境

  4. 激活虚拟环境,执行 pip install -r requirements.txt,安装项目依赖

怎么运行项目,需要看项目的具体情况

  • Web 项目 Web 项目一般使用 Django、Flask 的 Web 开发的提供 Web 服务的项目,部署时需要一个 Web 容器,作为程序的运行环境,容器的配置中都有一个虚拟环境的设置,其实是指定 Python 解析器的路径,将其设置为虚拟环境的目录或者 Python 解析器就可以了,启动时就用使用虚拟环境,并与其他环境隔离。例如 uWSGI 配置文件中 home 参数是用来指定解析器的。

  • 服务类项目 服务类项目就是需要以服务的形式长时间运行的,例如之前介绍的 公交闹钟,或者一些定时爬虫之类的,对于 Linux 而言,当前主流的服务方式是 Systemd,是一种比 init 更先进的服务管理工具,在服务脚本中, 设置 ExecStart 执行命令为全路径的虚拟环境的 Python 解析器,服务启动时,使用独立的虚拟环境了。Windows 服务,对于达成 EXE 包的,不需要配置虚拟环境,因为打包时已经考虑了环境问题了,如果是脚本运行的话,需要指定全路径的 Python 解析器

  • 单次运行项目 对于一些测试或者实验性质的项目,大多数情况下手动执行,只要在激活的虚拟环境下,或者用特定的 Python 解析器运行就好了,和在开发过程中运行区别不大

其他虚拟环境管理工具

  • virtualenvwrapper:是对 virtualenv 的一个封装,还有针对 vim 用户和 emacs 用户的 扩展,能支持 bash/ksh/zsh

  • virtualenvwrapper-win:针对 Windows batch shell 的 virtualenvwrapper

  • pyenv:用来解决这类问题。它可以安装、卸载、编译、管理多个 python 版本,并随时将其中一个设置为工作环境

  • pyenv-win:针对 Windows 的 pyenv

有兴趣的话可以试用一下

Python VScode 配置虚拟环境(virtualenv)相关推荐

  1. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...

  2. mac安装python虚拟环境_详解Mac配置虚拟环境Virtualenv,安装Python科学计算包

    最近正在自学Python做科学计算,当然在很多书籍和公开课里最先做的就是安装Numpy, Scipy, Matplotlib等包,不过每次安装单独的包时,都会有各种问题导致安装失败或者调用失败. 比如 ...

  3. python 使用安装虚拟环境 virtualenv

    目录 1.安装virtualenv 2.Ubuntu使用python3创建虚拟环境目录 3.激活虚拟环境 4.关闭虚拟环境 5.查看python版本 1.安装virtualenv pip instal ...

  4. vscode运行虚拟环境virtualenv时报错:\Scripts\Activate.ps1,因为在此系统上禁止运行脚本

    Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利.尝试新的跨平台 PowerShell https://aka.ms/pscore6PS ...

  5. Python中的虚拟环境-virtualenv

    更低层次: virtualenv virtualenv 是一个创建隔绝的Python环境的 工具.virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包. 它可 ...

  6. Jetson nano : 配置虚拟环境virtualenv。

    Anaconda官方不支持aarch64架构,所以Jetson nano不能直接使用Anaconda,可以使用Archiconda或者virtualenv. 简单说说virtualenv使用. 安装p ...

  7. ubuntu中vscode配置python_ubuntu下vs code的python虚拟环境的配置

    0.pyhton3 用venv配置虚拟环境 原本因为ubuntu desktop 1804自带了的python3已经有了venv,我记得ubuntu server 1804是有venv的 结果运行,提 ...

  8. Python的虚拟环境配置(pyenv+virtualenv)

    一.为什么需要配置虚拟环境 Python 2和Python 3之间存在着较大的差异,并且,由于各种原因导致了Python 2和Python 3的长期共存.在实际工作过程中,我们可能会同时用到Pytho ...

  9. Vscode配置Python虚拟环境

    1.在Vscode中打开终端 2.windows输入python -m venv 虚拟环境名 如 python -m venv env Mac输入python3 -m venv 虚拟环境名 如 pyt ...

最新文章

  1. cocos2dx基础篇(9)——触碰事件Touch
  2. 平均值,方差计算(sss)
  3. python opencv输出mp4_10分钟学会使用YOLO及Opencv实现目标检测
  4. linux卸载gdb命令,【Linux学习】GDB调试器基本命令必知必会(一)
  5. ConcurrentProgramming:wait()和notify()和synchronized
  6. WCF 第二章 契约 系列文章
  7. 求助(十万火急):关于httpwebrequest发送请求绑定ip的问题.
  8. [基础]sizeof和strlen
  9. 带你看JDK源码之HashMap
  10. 客户分段模型(Customer Segmentation Models)
  11. Anti-alias的前世今生-常用反走样算法总结
  12. centos7 oracle11gR2安装
  13. Oracle:ORA-00054 资源正忙 -- 锁表的解决方法
  14. mac风扇控制_如何监视和控制Mac的风扇
  15. 快速保存网页资料——fireshot与PDFdownload
  16. windowsmobile软件_经验:CSPJ/S初赛知识点整理(NOIP硬件与软件基础)
  17. MPAndroidChart的详细使用——BarChart叠状条形图(四)
  18. Mac 开机密码忘记
  19. 老李分享:JAVA性能监控工具
  20. ESP8266WiFi模块AT指令入门指南

热门文章

  1. 适用于人工智能开发的编程语言,主要有哪些?
  2. 阿里云负载均衡SLB,HTTPS动态网站部署负载均衡,实现高并发流量分发
  3. DNS解析及负载均衡
  4. 前轮转向中的数学模型
  5. 使用JVMTI实现Java源码加密及SpringBoot项目包加密解决方案实践总结
  6. php免费加密hp源码加密,HP源码加密工具(php-beast)php7版下载
  7. alertdialog报错_AlertDialog异常:Resources$NotFoundException: Resource ID #0x0 in AlertDialog
  8. 一款强大的芯片nRF52840及利用蓝牙5.0实现数据远程采集
  9. mitmproxy 使用
  10. 鉴机:粉丝买了一台宝峰uv5r对讲机,竟是假的?