virtualenv系列 (2) · 系统环境与虚拟环境

news2024/11/26 4:50:54

文章目录

  • 1. 怎样算是一套Python环境?
  • 2. 系统环境 VS 虚拟环境
  • 3. 虚拟环境最佳实践

1. 怎样算是一套Python环境?

首先,我们得先弄清楚:怎样算是一个Python环境?然后再去区分系统环境和虚拟环境。简单地说,在安装了Python之后,我们就已经获得了一套Python环境,一套完整的Python环境应该包括:

  • Python语言本身:Python解释器以及安装目录下一系列的可执行文件
  • Pip:其实它只是Python标准库中的一个包,只是这个包比较特殊,是Python的包管理工具,可以查找、下载、安装和卸载各种Python包,考虑到它的特殊性,特意将其列出
  • 已下载的各种依赖包:这也是Python环境的重要组成部分,通过pip下载的依赖包会存放于Python安装目录\Lib\site-packages\目录下

2. 系统环境 VS 虚拟环境

接下来,我们看一下所谓的“系统环境”与“虚拟环境”。在Virtualenv等工具引入之前,Python是没有“虚拟环境”这一概念的,一个Python环境指的就是在本地操作系统上安装的Python,由于Python自身版本的兼容性问题,Python用户通常会在操作系统上安装多个不同版本的Python,也就形成了多套Python环境共存的局面,我们把这些实际安装在操作系统上的Python环境统称为“(Python)系统环境”,或者叫“(Python)本地环境”。下图是我本机的一个示例,我在C:\Python\Python 3.7.9C:\Python\Python 3.8.6上分别安装了Python 3.7.9Python 3.8.6,因此在我的本地有两套Python系统环境:

请添加图片描述
显然,两个版本的Python系统环境并不能满足纷繁复杂的Python项目对不同包的依赖需求,于是,我们要通过Virtualenv等工具来创建虚拟环境。本质上,一套虚拟环境就是一套独立的Python环境,它包含我们在开始时列举出的一套完整Python环境的全部组成部分:Python解释器 + Pip + 未来将会下载的各种依赖包。使用Virtualenv可以帮助我们自动构建一套新的Python环境,它从一个已有的“Python系统环境”中拷贝Python解释器和Pip,但不拷贝系统环境中的任何包(也就是site-packages目录下的文件),这样,我们就可以得到一个“纯净”的Python环境。我们把这样的环境称为“虚拟环境”。

朴素一点说,虚拟环境就是借助工具便捷复制出的一套独立的Python环境,并重定向了Python的环境变量。理论上,我们可以方便地创建出任何多个虚拟环境,这要比在本地安装Python系统环境来得简单实用的多,且没有任何副作用:

请添加图片描述
对于虚拟环境有两点需要特别强调一下:

  1. 虚拟环境必须以一个Python系统环境/本地环境为基础(镜像)构建,以上图所示的案例,我们是无法创建出基于Python 3.9.x的虚拟环境的,因为本地并未安装Python 3.9.x

  2. 为了保证新建的虚拟环境是一个“纯净”的Python环境,Virtualenv不会拷贝原系统环境中的包,如果我们在一个新建的虚拟环境中使用pip list检查一下系统安装的包就会发现它含有标准库:

Package    Version
---------- -------
pip        19.0.3
setuptools 40.8.0
wheel      0.33.1

3. 虚拟环境最佳实践

虚拟环境的标准用法是面向一个Python项目构建一个独立的虚拟环境,即Virtual Environment Per Project,所以在一台Python用户的计算机上,典型的Python环境布局往往是这样的:

请添加图片描述

  1. 伴随项目构建的虚拟环境最好放在项目根目录下,与项目的其他资源(代码,文档等)统一放置,这样便于管理。
  2. 虚拟环境目录应该添加到git的ignore文件中,不应加入版本控制
  3. 可以使用.前缀隐藏虚拟环境目录(如果你希望让工程目录看上去更规范一些的话)

最后是一点点探索和思考。为每一个项目构建独立的虚拟环境花费的存储成本还是很高的,一种可能的折中方案是:我们可以按照大的技术领域细分出几种虚拟环境,里面的包选择当前的主流版本,然后在创建该领域的项目时,使用同一个虚拟环境,这特别适用于以学习和研究为目的项目,对版本差异并不敏感,主要的依赖包非常明确。例如:我们可以面向Web应用开发和数据分析分别创建虚拟环境,同类型项目共用同一虚拟环境:

请添加图片描述
归纳起来说就是:我们可以从不同的维度抽象出一些具有普遍适用性的虚拟环境供多个项目共享,减少虚拟环境的数量。一些可行的维度包括:技术堆栈:Web还是数据?主要工具的版本:Spark2还是Spark3?TF1还是TF2?等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM基于web的家教管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

阿里5位高级架构师耗时两年共同研发《Redis入门手册》

在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访…

喜报!Coremail两大方案入选“2022年软件行业典型应用案例”

12月5日,由中国软件行业协会联合中软国际有限公司、江苏省软件行业协会主办的2022中国程序员节在江苏南京圆满落幕,本次活动聚焦当前我国对数字技术创新及应用发展的现实需求,以开源创新、软件根技术、平台工具等热点议题,探讨影响…

Spring Boot 配置文件 · properties 基本语法 · yml 基本语法 · yml 配置不同数据以及 null · yml 配置文件读取

一、配置文件作用二、配置文件的格式三、properties 配置文件说明3.1 properties 基本语法3.2 读取配置文件3.3 properties 缺点分析四、yml 配置文件说明4.1 yml 基本语法4.2 yml 与 properties 格式对比4.3 yml 配置不同数据类型以及 null4.4 yml 配置读取4.4.1 读取配置文件…

Win11十二月系统更新了什么内容?

微软今天发布了12月最新的累积更新补丁,根据Microsoft 支持页面,build 22621.963 现在会在用户 OneDrive 上的存储空间不足时在“设置”应用程序中警告用户,将 Windows Spotlight 与主题设置相结合,修复任务管理器应用程序的界面问…

SSM垃圾分类网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 1,系统:Vindows10 2.软件:IDEA.SQLyog 3.数据库环境:ySQL 4.开源框架:sp…

毕业设计-基于SpringBoot幼儿园管理系统

环境:开发工具:idea,数据库:MySQL5.7 jdk1.8 架构:SpringBoot,前端HTML 主要功能 管理员: 用户管理(编辑用户、删除用户、添加用户、查询指定用户) 角色管理(…

软件测试进阶——测试划分

文章目录按照测试对象划分界面测试可靠性测试容错性测试文档测试兼容性测试易用性测试安装和卸载测试安全测试性能测试按照是否查看代码黑盒测试白盒测试灰盒测试按照开发阶段划分单元测试集成测试系统测试回归测试冒烟测试验收测试按照实施组织划分α测试β测试按照是否运行划…

数据可视化常用工具推荐

数据可视化是将数据分析的结果以图形、表格等形式展示出来,这样能我们更加清晰、明了的理解分析结果、判断数据走势等,让没有进行过数据分析的人也能清楚的了解数据中所含有的规律、趋势等。下面小编将向大家介绍几种常用的数据可视化工具,分…

计算机毕业设计php+vue基于微信小程序的高校新生报到管理小程序

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理程序应运而生,各行各业相继进入信息管理时代,高校新生报到管理小程序就是信息时代变革中的产物之一。 任何程序都要…

外汇天眼:爆雷跑路!DingHui索要高额佣金,结果客户一分钱没拿到!

我们都知道,外汇交易佣金是外汇平台杠杆进入中国市场时的产物,也可以将其简单的理解为是在自己原本的手续费之外,额外增加的一些交易成本。 不过随着外汇市场的发展,在外汇交易平台进行交易也是越来越正规化,现如今正…

16-luogu-P1012-[NOIP1998 提高组] 拼数

文章目录[NOIP1998 提高组] 拼数题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示大神代码分析总结[NOIP1998 提高组] 拼数 题目描述 设有 nnn 个正整数 a1…ana_1 \dots a_na1​…an​,将它们联接成一排,相邻…

shell语法总结二(持续补充)

文章目录一、函数1、函数的定义格式2、案例13、案例2二、函数参数三、输入/输出重定向1、标准输入输出2、输出重定向:2.1、语法如下所示:2.2、案例:输出重定向会覆盖文件内容,请看下面的例子:2.3、如果不希望文件内容被覆盖&#…

不同时期土地政策

土地政策​ 本篇文章主要总结新中国近代以来的土地政策,根据中国共产党的建立的前后时间分为两个部分。建党前主要是太平天国的《天朝田亩制》、孙中山的“旧三民主义”和新三民主义,建党后的大革命时期、土地革命时期、抗日战争、解放战争、新中国成立初…

Java中判断字符串是否为空

文章目录0 写在前面1 字符串.isEmpty2 .equals(字符串)3 字符串.length()>0注意事项0 写在前面 isEmpty(); "".equals(); .lenth()>01 字符串.isEmpty 这个方法是比较常用的, 格式:字符串.isEmpty();结果为true代表字符串为空&#xf…

5个超酷的Python学习工具,不看后悔。

工欲善其事必先利其器,一个好的工具能让起到事半功倍的效果,Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法,下面这几个工具给我的工作也带来了很多便利,推荐给追求美好事物的你。 Python Tutor Python Tut…

已解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 文章目录报错代码报错翻译报错原因解决方法帮忙解决报错代码 粉丝群一个小伙伴想用Python读取json报错,但是…

Anaconda和Python的安装源配置

Anaconda安装: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda换源: 清华anaconda镜像: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://…

计算机系统实验-BufLab

一.实验题目及目的 1.实验题目 程序运行在linux环境中,从输入获得一个字符串,将这个字符串放入指定的buf处,buf的大小为32,需要分析栈帧、buf位置等信息,通过输入字符串使缓冲区溢出,完成指定的函数调用等…

聊聊什么是gRPC

前言 现如今,微服务变得越来越流行,而服务间的通信也变得越来越重要,服务间通信本质是交换信息,而交换信息的中介/桥梁正是我们的API。 诚然,目前构建API最受欢迎的仍然是使用Restful(HTTP-JSON&#xff…