一文掌握Python虚拟环境-提升你的开发效率

news2024/10/7 20:37:20

在真正开始Python代码编写、编译、运行、调试和开发项目之前,必须要了解下Python的虚拟环境的配置,熟悉使用后,会大大提升后续的开发效率,减少非代码原因导致的问题。virtualenv就是Python中的Virtual Environment-虚拟环境。本文将介绍Python虚拟环境的基础知识、如何使用,以及其工作原理是怎样的。

一 虚拟环境基础知识

Python在开发人员中大受欢迎,最大的原因之一是它广泛且不断扩大的第三方包选择。虚拟环境可以为每个项目创建单独的隔离环境,达到分离不同项目的依赖关系的目的。

Python有针对不同应用程序的各种模块和包。在我们的项目开发中,可能需要一些三方库,那么就需要安装这个库,而另一个项目可能不需要任何其他第三方包,或者是需要其中某些三方包的其他的版本。当不同的Python项目需要相同插件的竞争或不兼容版本时,就会出现问题,导致程序莫名的异常。

另外开发用的电脑,可能同时安装了Python2和Python3,而Python2和Python3又有更多的小版本号,而有些现成的项目可能开发比较早,只支持用Python2编译,而有些则必须要Python3才行,这样如果没有隔离,则也会导致程序无法运行。

因此,虚拟环境此时能够发挥作用,为不同的Python安装版本、或不同的项目创建单独的隔离环境,每个项目可以从其特定的环境中存储和检索包,使用特定的Python版本。

二 如何使用虚拟环境

这里通过具体操作执行进行示例说明。

2.1 安装virtualenv

要创建虚拟环境,需要先安装一个名为virtualenv的模块。首先要确保在计算机上安装了pip。

# 如果计算机上没有安装pip,需使用以下命令先安装pip,不同的操作系统命令会有差异:
sudo apt-get install python-pip

# 然后通过pip来安装virtualenv,安装后可以检查下virtualenv的版本:
pip install virtualenv
virtualenv --version

2.2 创建虚拟环境并激活

成功安装virtualenv之后,可以使用以下命令创建一个特定名称的虚拟环境:

# 创建特定名称的虚拟环境,myvenv可以换成任意你喜欢的名字都行
virtualenv myvenv
# 执行以上命令会创建myvenv的文件夹,包含运行Python项目所需的所有可执行文件

# 如果要指定Python版本,可以通过下面指令来创建虚拟环境:
python2.7 virtualenv myvenv    # 创建使用Python2.7的虚拟环境
# 也可以通过下面的命令来创建虚拟环境,效果和上面的一样的
python3 -m venv myvenv         # 创建使用Python3的虚拟环境

# 在创建好虚拟环境后,还需要用如下命令启用,激活进入特定的隔离环境
source venv/bin/activate
# 如果是在Windows系统下,上面的激活命令略有差异:
venv/Scripts/activate

成功激活进入虚拟环境后,如下图所示,会在命令行前面看到有(.venv)的标志:

成功创建并激活了虚拟环境后,就可以安装项目所需的依赖项和需求,而不会干扰到其他项目了。

2.3 退出虚拟环境

一旦完成了当前项目的工作,可以返回到系统默认环境,只需要使用deactivate命令即可退出。

三 虚拟环境的工作原理

如果没有使用虚拟环境时,Python的第三方包都会被pip安装到Python安装路径的site-packages目录下。当使用虚拟环境时,按照前面的“python3 -m venv myvenv”等方式创建虚拟环境后,可以查看当前目录,会看到几个文件:

  • bin目录:python3、pip3等可执行文件,其实就是是软链接到Python系统目录(或者是复制的副本)的
  • lib/python3.10/site-packages:用于该虚拟环境下安装的三方包的存储目录的

所以,通过venv,会将系统的Python软链接到venv的环境下,当用source命令激活虚拟环境时,就会启用该venv下面的python和pip了,同时过程中安装的三方包都是放在venv/lib/pythonx.x/site-packages下面的,这样系统的Python环境是不会受到任何影响的。

四 虚拟环境的更多用法

4.1 三方包依赖需求生成与重新安装

如前所述,在创建一个新的虚拟环境后,pip和setuptools包会被软链接(或复制)到虚拟环境下,接下来可以安装在环境中使用的任何其他包。对于具有复杂需求的项目,在项目的根目录中最好能保留一个requirements.txt的文件,这个文件列出了项目的三方包依赖的需求。这样,如果需要重新创建虚拟环境,可以使用pip install -r requirements.txt命令重新安装所有需要的包。

在项目的虚拟环境中安装完所需的库后,可使用pip list查看当前所有已安装的库,然后可以通过运行以下命令生成一个文本文件,列出所有项目依赖项:

pip freeze > requirements.txt

那么在其他计算机上重新搭建这个项目的环境时,则可以快速通过如下命令,一次将所有依赖的三方包安装齐全:

pip install -r requirements.txt

4.2 虚拟环境更新升级

虚拟环境中的pip和setuptools副本是该虚拟环境的本地副本,需要独立地进行更新和维护。所以会遇到某些虚拟环境中pip过时的警告,而在其他虚拟环境中则不会,pip必须在每个虚拟环境中分别更新才行。

因此当升级系统上的Python运行时时,使用该版本的Python的虚拟环境是不会自动升级的,这样设计也是合理的,因为无意中升级到新Python版本可能会破坏它们的三方包依赖。

具体的虚拟环境更新升级操作如下:

Python小版本升级:

如果已经升级了一个现有的Python小版本,比如从Python 3.9.5到Python 3.9.7,那么可以在项目目录下通过如下方式升级虚拟环境(不要提前激活虚拟环境,否则可能导致升级失败):

python -m venv myvenv --upgrade

Python大版本升级:

如果已经安装了一个主要的新版本的Python,比如已经有了Python 3.8,现在将安装Python 3.9,那么就不要用上面的升级方式了,而是重新创建一个新的虚拟环境,专门使用新的Python大版本。

五 Visual Studio Code中如何配置venv

除了前面介绍的virtualenv的使用,还有conda也带有虚拟环境的功能。conda在Anaconda和Miniconda里会安装好,对于用来开发数据科学的项目而言应当会用到。

在VS Code中,如果通过命令行方式创建了虚拟环境,并且在项目目录下面,VS Code是能够自动检测到的,如果没有通过前面的命令行方式创建,那么也可以通过下面的方式来创建。在VS Code里通过“Command+Shift+P”调出交互命令,输入Python: env...,如下图:

然后接着可以选择创建虚拟环境的工具,可选的有Venv和Conda:

然后选择该虚拟环境的Python版本:

接下来等待小段时间,等待VS Code中的虚拟环境自动创建完成。

最后,可以编写测试程序,如下所示,通过点击右边的三角形按钮,可以对.py代码进行运行、或调试:

参考文献:

https://blog.loginradius.com/engineering/python-virtual-environments/

Virtualenv and venv: Python virtual environments explained | InfoWorld

How to Set Up a Virtual Environment in Python – And Why It's Useful

venv — Creation of virtual environments — Python 3.11.0 documentation

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

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

相关文章

C#界面里Form.HelpButton 属性的使用

C#界面里Form.HelpButton 属性的使用 Form.HelpButton 属性是获取或设置一个值,该值指示是否应在窗体的标题框中显示“帮助”按钮。 在一般的开发中,很少有人使用这个属性,因为程序比较简单,只要用户一上手就可以使用了。 如果界面比较复杂,或者说功能比较多,就需要使…

04【MyBatis的类型处理器】

四、MyBatis的类型处理器 4.1 typeAliases别名配置 类型别名是为 Java 类型设置一个短的名字,可以方便我们引用某个类。 我们仔细观察mapper.xml配置文件,会发现不管是入参(paramterType)还是出参(ResultType&#…

大数据面试题(三):MapReduce核心高频面试题

文章目录 MapReduce核心高频面试题 一、ReduceTask工作机制 二、请描述mapReduce有几种排序及排序发生的阶段? 1、排序的分类 2、自定义排序WritableComparable 3、排序发生的阶段 三、请描述mapReduce中shuffle阶段的工作流程,如何优化shuffle阶…

Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、平滑翻书效果 与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图,然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍并不相像,…

百度paddle框架 目标检测

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼,常常是伪装起来的好运。 数据集准备 2183张图片,训练集1693张,验证集245,测试集245张。 包含7种昆虫&a…

数据挖掘算法原理与实践:k-均值

目录 第一关:什么是质心 任务描述: 相关知识: 什么是质心: 编程要求: 测试说明: 第二关:动手实现k-均值 任务描述: 相关知识: 一、数据集介绍 二、k-means算法…

基于PHP+MySQL医院管理系统的设计与开发

随着各种医疗条件的发展,人们在寻医就药的时候更希望通过信息化的方式进行挂号等一系列操作,为此各大医院也开发出了配套的医院管理系统,方便医生和患者就诊,本系统就是这样通过PHP和MySQL开发的系统 PHP:MySQL医院管理系统根据实际情况分为了管理员,医生和患者三部…

Ubuntu上安装部署k8s集群

Ubuntu上安装部署k8s集群一、基础环境准备(一)环境说明1.主机说明(二)环境操作1. 设置Master与工作节点的机器名称及配置2. 解析主机3. 写入以下内容(注意IP地址和主机名换成自己的):4. 虚拟内存swap分区关闭5. 开启防…

新零售时代下的实体门店步履维艰,实体门店应该如何起死回生吗?

传统实体店在新零售时代的下,大众的消费习惯早已经发生天翻地覆的变化,因而实体行业受到新型消费带来的冲击,再加上电商平台的迅速崛起与发展,实体门店更加是步履维艰。因此改变是必然,那么传统实体店想要转型走新零售…

万字深剖进程地址空间(全程干货)

目录前言一、程序地址空间1.程序地址空间的简图(1)正文代码(2)初始化数据(3)未初始化数据(4)堆区(5)共享区(6)栈区(7)命令行参数和环境变量2.实验:验证程序地址空间中各个区域的存在3.实验:验证堆区和栈区中地址的增长方向4.实验:如何理解sta…

算法设计与分析 SCAU17104 视频流有效调度

17104 视频流有效调度 时间限制:1000MS 代码长度限制:10KB 提交次数:25 通过次数:9 题型: 编程题 语言: G;GCC;VC;JAVA Description 现在n个视频流要在一条通信链路上一个接一个的传送。视频流i由bi位组成,这些位需要一个常数速率, 在ti秒内被发送。你…

lua-快速入门学习

lua-快速入门学习 安装 centos环境: yum install lua windows: window 下你可以使用一个叫 “SciTE” 的 IDE环 境来执行 lua 程序,下载地址为: Github 下载地址:https://github.com/rjpcomputing/luaforwindows/…

基于JavaSpringmvc+Vue+elementUI大学生求职招聘系统详细设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅👇&#x1f…

前端开发技巧记录

1.取数组最后一位 let arr[1,2,3,4,5] console.log(arr[arr.length-1]) //5 console.log(arr.at(-1)) // 52.用??代替||,判空 ||运算符是左边是‘’ false 0 null undifined等,都会返回后侧的值。而??必须运算符左侧的值为null或undefined时&#x…

智能家居系统 QT

一 环境范围设置 &#xff08;1&#xff09;界面添加新控件 在mainwindow.ui 添加控件&#xff1a; 控件的类型 文本内容 对象名&#xff08;唯一&#xff09; 是否有槽函数 QLabel <温度< lable_随意 否 QLabel <湿度< lable_随意 否 QLabel <光…

CTF-misc练习(https://buuoj.cn)之第一页

一、金胖子 1.打开gif&#xff0c;看到有东西闪过&#xff0c;把gif分帧保存 2.就得到flag&#xff1a; 二、二维码 1.分析压缩包&#xff1a; 2.解压图片&#xff0c;分析图片&#xff0c;还有一个隐藏文件&#xff1a; 3.分离图片&#xff1a; 4.图片需要输入密码&#xff…

android studio 加载html文件(备忘)

android studio版本&#xff1a;2021.2.1 例程名称&#xff1a;htmlFile 我做的一个小东西需要一个软件协议之类的&#xff0c;之前直接用textview做&#xff0c;修改起来太麻烦&#xff0c;所以改成加载html文件&#xff0c;即解决了txt可能被修改的问题&#xff0c;如果下次…

python 3 - Clipspy模块使用

一、clipspy安装&#xff1a; Clipspy底层是基于clips规则引擎开发、支持python3的一个模块&#xff0c;在python3的工程中&#xff0c;可以通过调用clipsy的API接口实现clips规则引擎。 在线安装&#xff1a; pip install clipspy 当出现Successfully installed字样时&…

从零开始的深度学习之旅(3)

目录神经网络的损失函数1.损失函数的引入2.损失函数3.回归&#xff1a;误差平方和SSE3.1 MSE的使用3.2 二分类交叉熵损失函数3.3 极大似然估计推导二分类交叉熵损失3.4 用tensor实现二分类交叉熵损失4.多分类交叉熵损失函数4.1 实现多分类交叉熵损失神经网络的损失函数 1.损失…

Excel - 获取帮助信息,查找Sheet中和VBA里的可用函数

Excel获取帮助信息 在使用Excel时&#xff0c;可以点击菜单的Help&#xff0c;可以获取帮助信息或Training。 点击Help帮助信息&#xff1a; 如果你觉得查看不方便&#xff0c;开可以使用浏览器&#xff0c;访问官网线上支持文档&#xff1a; Excel help & learning 而点击…