python 虚拟环境的原理分析
创始人
2025-05-29 04:20:48
0

摘要说明:

本文对python虚拟环境的原理,进行了一些简单分析;分析清楚后,当机器中安装了多个版本的python或已经存在多个虚拟环境时,可以很清楚地知道应该如何处理,控制自己所需要运行的python解释器,并安装依赖库到自己指定的python环境中。

一. python 虚拟环境的创建实例

python虚拟环境,是为不同的python项目创建了一个隔离运行环境,拥有自己独立的python解释器和依赖库。创建python虚拟环境的方法有很多,由于python 3.5后,已经自带了默认库venv,因此,就以venv来演示创建虚拟环境。

在Dos命令行模式下,先创建一个总目录venv_demo,用来集中管理虚拟环境;然后,进入该目录:

  • 创建虚拟环境: python –m venv env_A

  • 激活虚拟环境:env_A\scripts\activate

  • 安装依赖库: pip install click (可查看目录: env_A\Lib\site-packages)

  • 启动python解释器:python

  • 退出python 解释器:exit()

  • 退出虚拟环境:deactivate

按以上同样的操作,你可以创建其他名称的虚拟环境,如 env_B, 并安装依赖库pip install tqdm ,不安装click(可查看目录:env_B\Lib\site-packages)。

完成以上2个虚拟环境的创建和依赖库的安装后,可以分别激活不同的虚拟环境,然后在运行python后,观察执行import click , import tqdm的结果,以确认它们确实为2个独立的隔离环境。

二. python虚拟环境的原理分析

请认真理解接下来的几点分析:

  1. 开启的python解释器环境,取决于实际运行的python.exe文件

  1. 依赖库安装的位置,取决于实际运行的pip.exe文件的位置

  1. 执行 python 命令,将根据path路径优先级,查找并运行第1个找到的python.exe

  1. 执行 pip 命令,将根据path路径优先级,查找并运行第1个找到的pip.exe

  1. 可以不用简化的python, pip 命令,而是直接指定要运行的python.exe, pip.exe

如何获知python, pip 命令运行时会首先找到的python.exe,pip.exe的文件位置:

在命令行中,输入:where python 或 where pip , 排在第1位的就是。

如何获知当前正在运行的python.exe的文件位置:

Importsys

sys.executable

充分理解和运用以上原理分析和工具命令,就可以了解和控制需要运行的python环境,并安装依赖库到指定的python库目录。

有时大家不确定具体会运行哪个版本的python或 pip安装的依赖库到哪里去了,关键原因是由于我们已经习惯了只使用 python 或 pip 命令,而具体运行哪个目录下的python.exe,pip.exe, 是操作系统根据path来查找的。而大部分的python安装说明,都是在告诉我们应该如何设置环境变量或激活相应的虚拟环境。而为什么要这么做呢?

其目的就是:在当前命令行运行环境下,通过激活虚拟环境,可将我们指定的环境变量或虚拟环境的目录加到path变量的最前面位置,这样当我们只键入python或 pip时,系统就会优先找到并运行我们需要的python.exe,pip.exe。若path的设置或系统查找的顺序不如所愿,出来的结果就不好理解和控制了。

三. 基于原理分析,对创建虚拟环境实例进行说明

本文第一步中使用的命令和操作看起来没有什么特殊。在以上原理分析的基础上,我们再仔细分析一下具体运行的文件是什么:

序号

命令

说明

1)

创建虚拟环境:

python –m venv env_A

这时,运行的python.exe, 是系统通过path设置,首先找到的python.exe,(可通过where python 来获得),创建的新的虚拟环境的python版本,跟本次运行的python.exe的版本一致。

2)

激活虚拟环境:

env_A\scripts\activate

该命令,明确执行的是

env_A\scripts\activate 命令,该命令执行后,会激活env_A虚拟环境,关键就是把虚拟环境env_A\scripts的路径信息,加到了 path的第1位(查看 activate文件的源代码,可以更清楚地了解到是怎么做的)

3)

安装依赖库:

pip install click

由于已经将env_A\scripts的路径信息加到了path的第1位,因此,执行pip 时,运行的将是 env_A\scripts\pip.exe文件;依赖库安装的位置,也将是 env_A环境中的库目录 env_A\Lib\site-packages

4)

启动python解释器:

python

由于已经将env_A\scripts的路径信息加到了path的第1位,因此,执行python时,运行的将是env_A\scripts\python.exe

5)

退出python 解释器:

exit()

6)

退出虚拟环境:

deactivate

由于已经将env_A\scripts的路径信息加到了path的第1位, deactivate 执行时,运行将是 env_A\scripts\deactivate.bat 文件,退出env_A虚拟环境,将env_A\scripts的路径信息从path中删除。

(查看deactivate.bat文件的源代码,可以更清楚地了解到是怎么做的)

以上都在常规操作,我们用非常规操作再分析一次:

序号

命令

说明

1)

激活虚拟环境:

env_A\scripts\activate

该命令,明确执行的是

env_A\scripts\activate 命令,该命令执行后,就会把虚拟环境env_A\scripts的路径信息,加到 path的第1位

2)

安装依赖库:

env_B\script\pip.exe install yarl

执行 pip, 将会运行 env_A\scripts\pip.exe, 而我们现在指定运行env_B\scripts\pip.exe文件,大家分析一下,yarl依赖库会安装在哪里:

env_A\Lib\site-packages (错)

env_B\Lib\site-packages (对)

3.1)

启动python解释器:

python

import yarl

env_A激活时,执行python,运行的将是env_A\scripts\python.exe,启动的是env_A的python运行环境;但由于没有安装 yarl, 执行 import yarl ,会提示没有该模块

3.2)

启动python解释器:

env_B\scripts\python.exe

import yarl

env_A激活时,

指定运行env_B\scripts\python.exe,启动的是 env_B中的python运行环境;由于已经安装了yarl, 执行 import yarl, 没有问题。

4)

退出虚拟环境:

deactivate

由于已经将env_A\scripts的路径信息加到了path的第1位, deactivate 执行时,运行将是 env_A\scripts\deactivate.bat 文件,退出env_A环境,将env_A\scripts的路径信息从path中删除。

不同的创建python虚拟环境的工具,在具体实现和功能扩展上,可能会有些不同,但需要明确了解并控制运行的python.exe, pip.exe的文件位置,这一要求对我们来说应该是不变的。在理解了这一原理后,可以灵活运用,为自己的项目更方便地创建需要的python环境。

比如stable-diffusion-webui, 就是将虚拟环境目录固定创建在项目的venv目录中,然后结合 webui.bat文件,固定调用 venv 目录中的 python.exe, pip.exe, 来控制和安装项目所需要的python版本和依赖库的安装位置。

相关内容

热门资讯

低代码开发安卓系统,轻松构建高... 你有没有想过,连编程小白也能轻松驾驭的安卓系统开发?没错,就是那种听起来高大上,但实际上门槛低到让你...
华为为啥还用安卓系统,揭秘其在... 你知道吗?华为,这个在手机界大名鼎鼎的中国品牌,竟然还在用安卓系统!是不是觉得有点不可思议?别急,让...
安卓系统的obb文件,功能与使... 你有没有发现,安卓手机里的那些游戏,有时候会突然出现一个叫作“obb文件”的小家伙?别小看了这个不起...
凤凰系统下载教程安卓,体验流畅... 你有没有听说最近超级火的凤凰系统?这款安卓系统可是让不少手机控们兴奋不已呢!今天,我就来给你详细介绍...
电脑安卓系统怎样使用,轻松使用... 你有没有想过,你的安卓系统电脑到底是怎么运作的?是不是有时候觉得它有点儿神秘,有点儿复杂?别担心,今...
ios系统跟安卓系统哪个好,谁... 说到手机操作系统,iOS和安卓绝对是两大巨头,它们就像江湖上的两大门派,各有各的粉丝。那么,iOS系...
mac 系统安装 安卓系统安装... 亲爱的电脑小白们,是不是最近对电脑系统安装跃跃欲试,但又觉得无从下手?别担心,今天我就要来给你详细讲...
提醒安卓系统升级,体验流畅新篇... 亲爱的安卓用户们,是不是觉得手机越来越卡,应用更新总是跟不上潮流?别急,今天我要给你来点干货,告诉你...
安卓系统outlook会议提醒... 你有没有发现,手机上的安卓系统越来越智能了?这不,最近我发现了一个超实用的功能——Outlook会议...
安卓系统专业软件剪辑,打造高效... 你有没有想过,手机里的视频剪辑功能竟然也能如此专业?没错,就是那个我们每天不离手的安卓系统,它竟然能...
模拟安卓系统软件,软件功能与体... 你有没有想过,手机里的世界可以变得更加丰富多彩?没错,就是那种可以像安卓系统一样自由自在地玩耍的世界...
安卓换系统会卡吗,换系统会卡吗... 你有没有想过,你的安卓手机用久了,是不是也会像人一样,反应变得迟钝了呢?没错,这就是我们今天要探讨的...
平板安卓系统自动重启,安卓平板... 你是不是也遇到过这种情况?平板电脑突然间就自动重启了,是不是瞬间感觉心里一紧,心想这可怎么办呢?别急...
findx3安卓系统,安卓系统... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是OPPO Find X3系列的安卓系统。这款系...
安卓系统删除的软件,那些曾陪伴... 手机里的软件越来越多,是不是有时候觉得内存不够用,想清理一下呢?别急,今天就来聊聊安卓系统删除软件的...
白色的手机安卓系统,安卓系统下... 你有没有发现,最近市面上那些白色的手机简直让人眼前一亮呢?尤其是搭载安卓系统的那些,简直就像是一块块...
vico是不是安卓系统,揭秘安... 最近是不是有很多小伙伴在问:“Vico手机,它是不是运行安卓系统呢?”这个问题可真是让人好奇啊!今天...
安卓10系统省电不,安卓10系... 你有没有发现,自从升级到安卓10系统,手机续航能力好像大不如前了?别急,今天就来给你揭秘安卓10系统...
cm14安卓系统,深度定制与极... 你有没有发现,你的安卓手机最近是不是有点不一样了?是不是觉得系统运行得更加流畅,界面也更加美观了呢?...
平板安卓系统咋样升级,轻松实现... 你那平板安卓系统是不是有点儿卡,想给它来个升级大变身?别急,让我来给你详细说说平板安卓系统咋样升级,...