Python 入门(二、什么是 Python 的虚拟环境)

Python 入门第二课 ,Python 的虚拟环境...... by 矜辰所致

前言

本来以为环境搭建好了,就直接开始敲代码了,但是一直看到一个专业词汇:虚拟环境。

对于习惯了嵌入式 C 语言开发博主来说,一开始确实有点不明白,特意花了一些时间去了解,也算是有了一定的了解。

那本文的内容就是来讲讲什么是 Python 的虚拟环境。

对于我们单纯学习 Python 来说,虚拟环境不是必须的,学习的时候直接在系统真实环境中操作也是没问题的,只是学会使用虚拟环境对于今后的应用来说是必须的。

Python 入门系列文章:
Python 入门(一、使用 VSCode 开发 Python 环境搭建)
.
我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

目录

  • 前言
  • 一、Python 开发的虚拟环境
    • 1.1 什么是虚拟环境
    • 1.2 为什么要虚拟环境
  • 二、创建虚拟环境
    • 2.1 常用工具
      • 2.1.1 Conda 与 Venv 对比
    • 2.2 创建虚拟环境
  • 结语

一、Python 开发的虚拟环境

1.1 什么是虚拟环境

Python 的虚拟环境是一个用于创建隔离的 Python 环境的工具。它允许你为不同的项目安装不同的依赖,而不会相互冲突。

虚拟环境可以包含自己独立的 Python 解释器、库和工具,它们与系统 Python 真实环境是分开的。

对于初学者来说,上面的解释或许还是会有些迷糊,要搞清楚什么是虚拟环境,我们首先要清楚 Python 的真实环境是怎样的。

我们从最开头说起,我们运行一个简单的 python 程序,使用 python hello.py 执行程序,这个 python 哪里来的,程序中import 的模块在哪里来的:

在这里插入图片描述

  • python 命令可以执行,是因为我们安装时候添加了环境变量 PATH,当我们在命令行中运行程序时,系统会根据PATH配置的路径列表依次查寻是否有可执行文件 python ,所以可以执行 python 命令。
  • 程序中 import 的模块怎么来的呢?
    import的模块包含两类,一类称为标准库(类似于 C语言标准库一样的),随着python的安装而安装;
    另一类称为第三方库,使用 pip 工具或者自己手动安装的包。

程序得以运行时因为存在必要的环境,这里我们称之为 Python 真实环境,如下图:

( 参考了某园博主:救苦救难韩天尊 的 Python 相关文章的示意图 )

在这里插入图片描述

那么虚拟环境呢,可以理解为把真实环境复制了一份,供项目单独使用。但不是全部复制,其中 Python 标准库非常大,把标准库复制到虚拟环境不太实际,其实除了大小问题,还有包括安全性,一致性等问题,标准库是 Python 安全模型的一部分,复制标准库可能会导致安全问题,标准库中的模块是与 Python 解释器紧密相关的。每个 Python 版本都有特定版本的标准库,这些模块通常与解释器的内部实现相匹配。使用全局解释器的标准库可以确保一致性和兼容性。

所以 虚拟环境不包含标准库,还有虚拟环境把 python.exe 放到了 Scripts 目录下,如下图的虚拟环境目录结构:

在这里插入图片描述

1.2 为什么要虚拟环境

为什么要虚拟环境?

在进行 Python 实际项目开发时,我们需要根据需求下载不同的库。如果一个项目需要库 A 的1.0 版本,而另一个项目需要 库 A 的 2.0 版本。如果我们在全局环境中,安装 A 的1.0 版本和2.0 版本,可能出现版本冲突,或许只能存在一个版本、那我们也不可能在用第一个项目的时候安装 1.0版本,然后到第二个项目的时候卸载 1.0 版本,安装 2.0 版本,这样不断的更新或卸载相应的库的开发工作及其混乱。

这个时候 Python 虚拟环境就能发挥它的作用,为每个项目提供一个互不干扰的 Python 运行环境。

综合来说,Python 开发使用虚拟环境的好处如下:

  • 环境隔离:
    虚拟环境允许开发者为每个项目创建一个独立的环境,其中包含自己的 Python 版本和依赖库。这样可以防止不同项目之间的依赖冲突。
  • 依赖管理:
    在虚拟环境中,你可以自由地安装、卸载和升级库,而不会影响到全局 Python 环境或其它项目。
  • 版本控制:
    虚拟环境使得开发者可以为特定项目指定特定版本的库,即使这些版本在全局环境中不可用或与其它项目不兼容。
  • 安全性:
    通过隔离环境,可以减少全局环境中安装的库带来的安全风险。
  • 开发与生产环境一致性:
    虚拟环境确保了开发环境与生产环境的一致性,有助于减少“在我的机器上可以运行”的问题。
  • 易于共享和复现:
    虚拟环境可以通过 requirements.txt 文件或其它方式轻松地在不同机器或开发者之间共享,其他人员可以根据这份文件在各自的虚拟环境中一键安装相同版本的依赖,确保代码在各个开发环境中表现一致,使得项目更容易被其他人理解和复现。
  • 简化部署:
    在部署应用时,虚拟环境可以简化部署过程,因为只需要复制环境和代码,而不需要关心服务器上的全局 Python 环境。
  • 测试和调试:
    在虚拟环境中,开发者可以更容易地测试不同版本的库,以及在隔离的环境中调试问题。

二、创建虚拟环境

2.1 常用工具

在 Python 开发中,创建虚拟环境可以使用多种工具,实际上作为我们初学者来说,首先就使用好一种就好了,但是这里提到了,我们就简单了解一下:

venv:

这是 Python 自带的虚拟环境管理工具,从 Python 3.3 版本开始内置于标准库中。
它创建轻量级的虚拟环境,每个环境拥有自己的 Python 解释器和一套独立的 Python 库。
使用方法简单,
如 python -m venv myenv 创建环境,
使用
source myenv/bin/activate(Linux/macOS)

myenv\Scripts\activate(Windows)激活环境。

virtualenv:

在 Python 3.3 之前,virtualenv 是创建虚拟环境的事实标准工具。
它允许用户创建多个隔离的 Python 环境,并且可以为每个环境选择不同的 Python 版本。
通过 pip install virtualenv 安装,
然后使用 virtualenv myenv 创建环境。

pipenv:

pipenv 是一个相对较新的工具,它结合了 pip 和 virtualenv 的功能,自动处理依赖和虚拟环境。
它使用 Pipfile 和 Pipfile.lock 来管理依赖,确保了更好的可重复性和更清晰的依赖关系。
通过 pip install pipenv 安装,
然后使用 pipenv install 来创建并管理环境。

conda:

conda 是一个功能强大的包和环境管理器,它是 Anaconda 发行版的一部分,但也可以在Miniconda 中独立使用。
conda 可以管理 Python 和其他语言的包,非常适合数据科学和机器学习项目。
它支持创建隔离的环境,并且可以处理复杂的依赖关系。
使用 conda create --name myenv python=3.8 创建环境,
使用 conda activate myenv 激活环境。

pyenv:

pyenv 是一个用于管理多个 Python 版本的工具,它允许用户在同一台机器上安装和管理多个 Python 版本。
它不是虚拟环境管理工具,而是一个版本管理工具,但它可以与 virtualenv 或 conda 结合使用。
通过 git clone https://github.com/pyenv/pyenv.git ~/.pyenv 安装,
然后使用 pyenv install 3.8.0 安装特定版本的 Python。

这些工具各有特点,选择哪个工具取决于你的具体需求,比如项目复杂度、是否需要管理非Python依赖项、是否需要跨平台支持等。对于大多数Python项目,venv 和 pipenv 通常是首选,因为它们简单且足以满足大多数需求。如果你在数据科学领域工作,可能会更倾向于使用 conda。

2.1.1 Conda 与 Venv 对比

这里为什么单独拿 Conda 与 Venv 对比,是因为我们使用 VSCode 开发时候,创建虚拟环境的时候,默认是在这两种工具中选择:

在这里插入图片描述

所以我们单独说明一下这两者的区别:

  1. 创建虚拟环境的命令不同

    • 使用venv创建虚拟环境,可以使用 Python 内置的venv模块。例如,在 Windows 上使用命令python -m venv myenv,在 Linux/macOS 上使用python3 -m venv myenv
    • 使用conda创建虚拟环境,需要使用conda create --name myenv python=3.8这样的命令。
  2. 包管理系统不同

    • venv创建的虚拟环境使用 Python 的标准包管理系统pip来安装和管理包。
    • conda创建的虚拟环境使用conda自己的包管理系统来安装和管理包,也可以使用pip
  3. 平台无关性

    • venv是 Python 的标准库模块,因此在 Python 的不同平台上都可以使用,不依赖于任何特定的包管理器。
    • conda是一个跨平台的包管理系统,可以在 Windows、Linux 和 macOS 等操作系统上使用。
  4. 生态系统不同

    • venv创建的虚拟环境通常更轻量级,适用于纯 Python 项目,主要用于管理 Python 包,不适合管理非 Python 依赖项。
    • conda是一个更强大的生态系统,可以管理 Python 包以及其他语言的包和依赖项,更适合复杂的项目,特别是涉及到多种语言或非 Python 依赖项的项目。
  5. 适用场景

    • 如果你的项目是纯 Python 项目,并且希望使用 Python 的标准包管理工具,那么使用venv是一个不错的选择。
    • 如果你需要更强大的包管理和跨语言支持,以及更丰富的生态系统,那么conda可能更适合你的需求。
  6. 性能和资源占用

    • venv在处理纯 Python 项目时更为轻量和快速,占用的磁盘空间和内存通常低于conda
    • conda由于旨在管理多个语言的环境,其占用的磁盘空间和内存通常高于venv,特别是安装Anaconda时,预装的众多科学包会占用相当的空间。
  7. 社区支持和资源

    • venv作为Python的内置模块,享受着Python官方的支持,有广泛的社区支持和资源。
    • conda拥有一个活跃的开发者和用户社区,尤其是在数据科学和科学计算领域,有强大的支持和丰富的资源。

总的来说,选择 venv 还是 conda 应基于你的具体项目需求、个人偏好以及所需的功能复杂度。理解这两个工具的优势和局限性,可以帮助你做出更明智的决策。

这里推荐一篇文章有具体的说明两者之间的区别:

Conda对比Venv:谁是Python环境管理的王者?

2.2 创建虚拟环境

我们做了简单的了解,回到我们的 VSCode 环境中,我们自己来操作一下,创建一个虚拟环境试试。

我们打开 VSCode 的命令面板(Ctrl + Shift + P),输入 “Python”,找到创建环境的选项,如下图:

在这里插入图片描述

选择创建虚拟环境,就会弹出下面界面,让我们选择是使用 Venv 还是 Conda ,这里还要注意,这里选择虚拟环境是在当前目录下面,要注意自己处在的目录

在这里插入图片描述

这里测试呢,我们直接选择第一个 Venv 工具(因为这是 Python 自带的工具,如果选择下面的 Conda,我们并没有安装过还会提示你需要安装 Conda ,也创建不了 ),

会弹出版本选择,因为电脑上只安装一个版本的 Python ,所以这里治愈后一个选项,前面的五角星表示推荐的版本:

在这里插入图片描述

点击版本都就自动创建好了一个虚拟环境,创建完成以后和以前会有一些变化,如下图:

在这里插入图片描述

虽然我们上面介绍虚拟环境的时候,讲到了 venv 用什么指令创建,用什么指令激活,

但是在 VSCode 创建的虚拟环境,它会自动激活,直接使用就可以了。

编译的效果如下图:

在这里插入图片描述

这里虚拟环境的适用范围, 我们创建的时候是在当前目录下面,在上图中就是Python_Project 这个文件夹,等于在这个文件夹下面的 .py 文件,都会使用我们新建的这个虚拟环境。

所以我们并不需要把 hello.py ,放到 .venv 文件夹下面,当然放进去,也是可以正常运行的:

在这里插入图片描述

但是我们上一节课讲到过在 VSCode 中 Python 程序的调试,我们需要用到 .vscode 中的配置, .vscode 需要和需要调试的 hello.py 在同级目录,才能正常的使用调试功能。

结语

本文我们详细的了解了一下 Python 的虚拟环境,我们知道了虚拟环境在 Python 开发中的重要用途。也知道了如何在 VSCode 中创建 Python 的虚拟环境,在今后我们的基础学习过程中,都会在今天创建的虚拟环境下进行了。

那从下节课开始,我们就可以开始 Python 的基础语法学习了。

好了,本文就到这里,谢谢大家!

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

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

相关文章

centos celery 日志管理

celery经常会产生大量日志,长时间累计下来会对服务器造成一定的压力 1 配置 logrotate 进行日志拆分 logrotate 是 Linux 系统中常用的日志管理工具。我们将使用它来管理 Celery 的日志文件,确保日志文件不会无限增长,并定期拆分、归档和删…

Spring集成Redisson及存取几种基本类型数据

目录 一.什么是Redisson 二.为什么要使用Redisson 三.Spring集成Redisson 1.添加依赖 2.添加配置信息 3.添加redisson配置类 四.Redisson存取各种类型数据 1.字符串(String类型) 存储 获取 2.object对象类型 1.实体类信息 2.存储 3.获取 3.List集合类型 第一种…

在java 中如何实现执行linux命令,通过post接口代理出来?

接口方式输入命令得返回结果 public AjaxResult doPost(HttpServletRequest request, HttpServletResponse response, String command) throws ServletException, IOException {// 设置响应内容类型 text/plain // response.setContentType("application/json"…

【Python】Qwen-VL-7B box

VLLM-Qwen2-VL-7B-Instruct import cv2# 读取图像 image_path haibaoA.png # 替换为图像的路径 image cv2.imread(image_path)# 定义框的坐标 (x1, y1) 是左上角,(x2, y2) 是右下角 x1, y1 200, 550 # 左上角坐标 x2, y2 799, 750 # 右下角坐标 h, w image.…

Unite Shanghai 2024 团结引擎专场 | 团结引擎 OpenHarmony 工程剖析

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中,Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析,详细讲解 XComponent 如何与引擎结合,UI 线程和引擎线程的关联以及 ts/ets 的代…

ijkMediaPlayer+ TextureView 等比全屏播放视频(避免拉伸)

TextureView默认以fitxy的方式加载surface数据,如果需要等比全屏播放视频,避免拉伸,可以采用Matrix对TextureView进行变换 废话不多说,直接上代码 public class BaseIjkPlayer implements TextureView.SurfaceTextureListener{/…

smbms项目(1)

目录 一、项目搭建准备工作 二、登录功能实现 三、注销功能实现 四、登录拦截实现 一、项目搭建准备工作 1、搭建一个maven web项目 2、配置Tomcat 3、测试项目是否能够跑起来 4、导入项目中会遇到的jar包(servlet、jsp、mysql驱动、jstl、standard&#xf…

python+大数据+基于Spark的共享单车数据存储系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

Golang | Leetcode Golang题解之第464题我能赢吗

题目&#xff1a; 题解&#xff1a; func canIWin(maxChoosableInteger, desiredTotal int) bool {if (1maxChoosableInteger)*maxChoosableInteger/2 < desiredTotal {return false}dp : make([]int8, 1<<maxChoosableInteger)for i : range dp {dp[i] -1}var dfs …

浙江省发规院产业发展研究所调研组莅临迪捷软件考察调研

2024年10月10日下午&#xff0c;浙江省发展与规划院产业发展研究所调研组一行莅临迪捷软件考察调研&#xff0c;绍兴市府办、区发改、区经信、迪荡街道等相关领导陪同。 调研组一行参观了迪捷软件的展厅与办公区&#xff0c;深入了解了迪捷软件的公司发展历程、运营状况、产品…

Ubuntu 上使用 Nginx 实现反向代理并启用 HTTPS(详细教程)

拒绝使用宝塔&#xff0c;虽然宝塔很好用方便&#xff0c;但是他非常占用资源&#xff0c;所以我正在尝试转换我使用服务器的方式&#xff0c;通过命令来才做这些&#xff0c;下面是我的详细步骤。 在这篇教程中&#xff0c;我们将详细介绍如何在 Ubuntu 系统上使用 Nginx 搭建…

【论文#码率控制】ADAPTIVE RATE CONTROL FOR H.264

目录 摘要1.前言2.基本知识2.1 蛋鸡悖论2.2 基本单元的定义2.3 线性MAD预测模型 3.GOP级码率控制3.1 总比特数3.2 初始化量化参数 4.帧级码率控制4.1 非存储图像的量化参数4.2 存储图像的目标比特 5.基本单元级码率控制6.实验结果7.结论 《ADAPTIVE RATE CONTROL FOR H.264》 A…

go clean command

文章目录 1.简介2.格式3.选项4.示例5.应用场景6.小结参考文献 1.简介 在 Go 语言的开发过程中&#xff0c;管理依赖和构建缓存是非常重要的。随着项目的迭代&#xff0c;旧的缓存和不再需要的依赖可能会影响构建的效率和准确性。 Go 提供了一个非常实用的命令 go clean&#…

第J5周:DenseNet+SE-Net实战(TensorFlow版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc; 本周任务&#xff1a; ●1. 在DenseNet系列算法中插入SE-Net通道注意力机制&#xff0c;并完成猴痘病识别&#xff0…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…

linux 设置tomcat开机启动

在Linux系统中&#xff0c;要配置Tomcat开机自启动&#xff0c;可以创建一个名为 tomcat.service 的 systemd 服务文件&#xff0c;并将其放置在 /etc/systemd/system/ 目录下。以下是一个基本的服务文件示例&#xff0c;假设Tomcat安装在 /usr/local/tomcat 路径下&#xff1a…

Java:玩家打怪小游戏

今天&#xff0c;我们尝试用Java来做一个“打怪小游戏”&#xff0c;听名字就知道&#xff0c;我们是应该创建几个成员和怪物&#xff0c;还有知道知道成员和怪物的血量&#xff0c;一次攻击的伤害等等。。当然我们的游戏攻击模式是“回合制”&#xff08;其实是别的方法&#…

Element-ui官方示例(Popover 弹出框)

Element-ui官方示例&#xff08;Popover 弹出框&#xff09;&#xff0c;好用的弹出框。 使用 vue-cli3 我们为新版的 vue-cli 准备了相应的​Element 插件​&#xff0c;你可以用它们快速地搭建一个基于 Element 的项目。 使用 Starter Kit 我们提供了通用的项目模版&#…

SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法&#xff0c;并通过代码示例和案例分析&#xff0c;帮助新…

数据使用方法:

MySQL的存储引擎&#xff1a; 存储引擎的类型 MyISAM、InnoDB 、Memory、CSV等9种。 设置表的存储引擎&#xff1a; 数据表的存储位置 将查询结果插入新表 更新数据&#xff1a; 数据更新 更新数据记录 UPDATE 表名SET 字段1值1,字段2值2,...,字段n值 n [WHERE 条件]; 示例&a…