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.rhkb.cn/news/447655.html

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

相关文章

k8s杂记

在node节点内部使用kubectl: rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.con…

PL/SQL Developer如何连接Oracle数据库(汉化)

简介 PL/SQL Developer是一种用于Oracle数据库开发的集成开发环境(IDE)。它提供了一个可视化的界面,使开发人员能够方便地编写、调试和执行PL/SQL代码。PL/SQL Developer还具有其他功能,如数据库对象浏览器、SQL编辑器、数据导入…

JavaScript | 定时器(setInterval和clearInterval)的使用

效果图如下&#xff1a; 当用户第一次看到这个页面时&#xff0c;按钮是不可点击的&#xff0c;并显示一个5秒的倒计时。倒计时结束后&#xff0c;按钮变为可点击状态&#xff0c;并显示“同意协议”。这样做的目的是确保用户有足够的时间阅读用户协议。 <!DOCTYPE html>…

AI核身-金融场景凭证篡改检测YOLO原理

引言 YOLO (You Only Look Once) 模型是一种先进的实时目标检测算法&#xff0c;它在计算机视觉领域具有重要的地位。YOLO以其速度和准确性而闻名&#xff0c;能够快速识别图像和视频中的各种物体。这使得它在自动驾驶、安全监控、机器人技术、医学影像分析等众多领域都有着广…

HTML+CSS总结【量大管饱】

文章目录 前言HTML总结语义化标签常用标签H5新的语义元素H5的媒体标签\<embed> 元素&#xff08;少用&#xff09;\<object>元素&#xff08;少用&#xff09;\<audio>\<video> 元素包含关系iframe元素嵌入flash内容常用表单inputselect CSS总结权重样…

【JAVA毕业设计】基于Vue和SpringBoot的渔具租赁系统

本文项目编号 T 005 &#xff0c;文末自助获取源码 \color{red}{T005&#xff0c;文末自助获取源码} T005&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

Go 语言应用开发:从入门到实战

Go 语言应用开发&#xff1a;从入门到实战 引言 Go&#xff08;Golang&#xff09;是由 Google 开发的一种开源编程语言&#xff0c;设计初衷是提高编程效率&#xff0c;尤其是在高并发场景下表现出色。Go 语言以其简洁、易学、高效并发的特性&#xff0c;逐渐成为开发者的首…

如何将mov格式的视频转换mp4?5种解决方法任你选!

MOV即QuickTime影片格式&#xff0c;它是Apple公司开发的一种音频、视频文件格式&#xff0c;用于存储常用数字媒体类型。然而&#xff0c;它的兼容性主要局限于苹果生态系统。有时&#xff0c;我们需要IOS和Mac设备的视频图片保存到安卓手机或Windows系统中&#xff0c;却发现…

在线matlab环境

登陆https://ww2.mathworks.cn/ 在线文档https://ww2.mathworks.cn/help/index.html 在线环境[需要先登陆]

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

虚拟机VMware Workstation下CentOS7与主机Windows系统的文件夹共享

虚拟机设置&#xff1a; Linux中安装&#xff1a; yum install open-vm-tools# 判断是否共享&#xff0c;显示共享文件夹则为成功&#xff1a; vmware-hgfsclient# 挂载&#xff1a; vmhgfs-fuse .host:/ /mnt/hgfs/

ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。

场景&#xff1a; 虚拟机新创建一个最小化的ubuntu服务器&#xff0c;使用finalshell连接服务&#xff0c;发现连接不上。 1. 查看防火墙ufw 是否开启&#xff0c;22端口是否放行 2. 查看是否安装openssh server, 并配置 我的问题是安装了openssh server 但是没有配置root可…

数据挖掘学习笔记:朴素贝叶斯 | Python复现

数据挖掘学习笔记&#xff1a;朴素贝叶斯 机器学习系列&#xff08;四&#xff09;&#xff1a;朴素贝叶斯&#xff08;华强买瓜版&#xff09; - yyxy的文章 - 知乎 十分钟&#xff0c;让你再也忘不掉贝叶斯分类 - VoidHaruhi的文章 - 知乎 《机器学习》&#xff08;西瓜书&am…

Web自动化Demo-Kotlin+Selenium

1.新建工程 打开Aqua&#xff0c;点击New Project选中Kotlin&#xff0c;配置如下&#xff1a; 然后在build.gradle.kts文件中添加依赖 plugins {kotlin("jvm") version "1.9.23" }group "org.example" version "1.0-SNAPSHOT"rep…

【尚硅谷】FreeRTOS学习笔记(更新中更新时间2024.10.12)

在网上看到的一段很形象的描述&#xff0c;放在这里给大家娱乐一下。 裸机开发&#xff1a;n个人拉屎&#xff0c;先进去一个拉完&#xff0c;下一个再来。看门狗&#xff1a;如果有人拉完屎还占着&#xff0c;茅坑刷视频&#xff0c;把他拖出去中断系统&#xff1a;n个人拉屎&…

2-2 数据库的介绍

无处不在的数据库 信息化社会&#xff0c;无处不在的就是数据。数据包括数据的存储和数据的计算&#xff0c;编程语言可以归纳为数据计算的一类。 数据库就是存储数据的一个库。 数据库如何存储数据&#xff1f; 可以分为3个层级&#xff0c;分别是库&#xff0c;表&#x…

一、el-table的滚动条加粗并解决遮挡内容问题

近期接到产品提的需求&#xff0c;反馈用户说table里面的滚动条过小&#xff0c;不方便拖动&#xff0c;希望加粗&#xff0c;然后我就研究了下如何加粗&#xff0c;发现加粗后会导致遮挡内容的问题&#xff0c;并予以解决。以下是实现和解决的方法和步骤。 先看看官网的滚动条…

JavaScript 入门

1. HTML、CSS、JavaScript 之间的关系 HTML&#xff1a;网页的结构&#xff08;骨&#xff09; CSS&#xff1a;网页的表现&#xff08;皮&#xff09; JavaScript&#xff1a;网页的行为&#xff08;魂&#xff09; 2. 引入方式 3种引入方式&#xff0c;语法如下&#xff…

安科瑞ARB5弧光保护在船舶中压配电板中的应用-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

AMD新推EPYC与MI325X,挑战英伟达AI市场地位

在人工智能&#xff08;AI&#xff09;加速器领域&#xff0c;AMD近日于美国旧金山举办的“推进人工智能”&#xff08;Advancing AI Event&#xff09;活动中&#xff0c;宣布了一系列新产品的发布&#xff0c;直接对标英伟达&#xff0c;意图在AI芯片市场占据更大份额。 AMD新…