【Python】虚拟环境及在VS Code当中的使用

文章目录

  • 0 前期教程
  • 1 前言
  • 2 说说虚拟环境
  • 3 如何创建
  • 4 多python版本兼容问题
  • 5 如何移植
  • 6 在VS Code上如何使用

0 前期教程

  • 【Python】入门,总结与拾遗

1 前言

  最近因为一个基于Python的项目需要使用到很多陌生的第三方包,但python的特点又是安装的时候可以帮你解决依赖,但卸载的时候又不给你删除依赖,因此想要使用一个虚拟环境来实现这个项目,而且是基于我惯用的VS Code,总结一些要点。

2 说说虚拟环境

  感觉网上有很多文章将虚拟环境和python版本混为一谈,所谓虚拟环境,它的目的是解决不同项目同时依赖同一个第三方包,但是对版本要求却不一样的问题【python版本是固定的】,因此需要设置“分隔”,即虚拟环境,来实现不同项目运行在不同环境下,这样安装的包也只会在该环境下,不直接安装在python目录下。这样做的缺点也很明显,那就是占用磁盘,同一个包可能安装了好几遍。好处就是既实现了环境分隔,在打包成exe可执行程序时体积也会更小。
  如何实现python虚拟环境,貌似有很多种方式,主要是使用不同的包,或者是换软件,如anaconda,pycharm等。如果要使用VS Code,只能是使用不同类型的包,但是这里还是推荐使用最为广泛且使用不复杂的包——venv,这个包在安装python时就已经安装了。

附:官网链接

3 如何创建

  首先进入到项目文件夹,在终端输入

python -m venv ./venv

然后就会发现在项目文件夹下生成了一个名为venv的文件夹,当然,还可以加上其他的参数,在终端输入python -m venv -h可以查看所有的参数:

在这里插入图片描述
可以根据自己的需要选择。

  创建好环境后,如果需要在该环境下安装包,需要先激活环境:

.\venv\Scripts\Activate.ps1

在这里插入图片描述
如果要运行代码,建议关闭Code Runner插件,而是点击python插件中的运行按钮,只要在同一个终端运行即可。因为虚拟环境的本质实际上就是修改当前终端的环境变量,让执行的命令指向创建的环境,而不是电脑上安装的python环境。

  如果要退出虚拟环境,执行deactivate即可。
在这里插入图片描述

总的来说,venv这个包使用还是挺简单的

4 多python版本兼容问题

  前面提到,虚拟环境只能解决相同python版本,不同第三方包的情况,那问题来了,如果项目对python版本也挑怎么办?唯一的解决办法就是在电脑上安装多个python版本,然后通过改变文件名来解决命令行冲突的问题。
  以我的Windows为例,原来已经安装了python3.10,后来又装上了3.8,为了避免版本冲突问题,我将python.exe修改为py38.exe

在这里插入图片描述

这样在使用这个版本的python时,应该输入py38 .....,但是在使用venv这个包时发现了一个问题,那就是执行py38 -m venv ./venv时会报错:[WinError 2] 系统找不到指定的文件,通过查找资料在这个链接中找到一个大佬的帖子:

在这里插入图片描述

因此只需要将venv中的初始化文件修改一下即可。

5 如何移植

参考链接

  如果是别人做好的项目在自己电脑上怎么运行呢?venv这个包有一个特点,那就是在创建时会在复制的执行程序当中写入当前电脑中python环境的绝对路径,因此如果换一台设备基本可以确定不能使用,所以要想实现移植,首先要在原电脑上进入虚拟环境再导出包目录:

pip freeze > requirements.txt

在这里插入图片描述

此时会在项目路径下生成一个txt文件。

  当在另一台设备上运行这个项目时,首先在venv确定一下python的版本:

在这里插入图片描述

在这里插入图片描述

确定版本后,在项目文件夹下,使用对应的python版本运行venv,带上--clear参数即可清除之前的虚拟环境。

  然后就是配置第三方包。进入虚拟环境,执行下面的命令即可。

pip install -r .\requirements.txt

  到此虚拟环境就移植好了。

6 在VS Code上如何使用

  在VS Code上使用虚拟环境的主要问题在于代码编写时不会有提示,因为静态检查中只会去搜索电脑自带的python环境,而不会搜索当前项目下的虚拟环境。
  解决办法也很简单,加上虚拟环境的路径即可。
在这里插入图片描述

补上这一项即可

"python.autoComplete.extraPaths": [
     "./venv/Lib/site-packages"
],

  不过这样设置的限制也很大,首先是VS Code必须打开项目所在文件夹,而不能打开它的父级文件夹,这样保证上面的.代表的是项目文件夹。其次就是虚拟环境的文件夹名字只能是venv,这样保证上面这个路径能找到对应的包。所以如果项目比较复杂,建议还是用pycharm之类的软件,虚拟环境这块要方便点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线程池的讲解和实现

🚀🚀🚀🚀🚀🚀🚀大家好,今天为大家带来线程池相关知识的讲解,并且实现一个线程池 🌸🌸🌸🌸🌸🌸🌸🌸…

图形视图界面 图形效果

Qt的标准图形效果类: QGraphicsBlurEffect提供模糊效果QGraphicsColorizeEffect提供染色效果QGraphicsDropShadowEffect提供阴影效果QGraphicsOpacityEffect提供透明效果 QGraphicsBlurEffect(模糊效果) 模糊效果会模糊源。此效果对于减少细…

【数据结构】树的介绍

文章目录前言树的概念及结构树的概念树的表示树在实际中的运用二叉树的概念及结构二叉树的概念现实中的二叉树特殊的二叉树二叉树的性质二叉树的储存结构顺序存储链式存储写在最后前言 🚩本章给大家介绍一下树。树的难度相对于前面的数据结构来说,又高了…

用队列实现栈(图示超详解哦)

全文目录引言用队列实现栈题目介绍思路简述实现队列的部分栈的部分栈的创建判断栈是否为空压栈出栈访问栈顶元素栈的释放总结引言 在了解了栈和队列的知识后,我们已经对它们的特点有了一定的了解:栈是先进后出,队列是先进先出: 戳…

GPT-4发布,这类人才告急,大厂月薪10W+疯抢

ChatGPT最近彻底火出圈,各行各业都在争相报道,甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完,平地一声雷,GPT-4又重磅发布! 很多小伙伴瑟瑟发抖:“AI会不会跟自己抢饭碗啊?” 关于“如何…

ChatGPT新进展GPT-4 模型介绍

文章目录背景工具功能使用增强背景 2023.3.14 GPT-4 模型发布 创建了GPT-4,这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型多模态模型(接受图像和文本输入,输出文本输出),虽然在许多现实场景中不如人类,但在各种专业…

【数据结构与算法】 - 线性表详解 - (带头结点)单链表详细实现思路及代码

目录 一、概述 二、线性表介绍 三、单链表的操作实现  📌3.1 C语言定义链表结点  📌3.2 单链表初始化  📌3.3 单链表插入数据  📌3.4 单链表删除数据  📌3.5 单链表查找数据  📌3.6 单链表的销毁 四、…

基于51单片机的自动打铃打鸣作息报时系统AT89C51数码管三极管时钟电路

wx供重浩:创享日记 对话框发送:单片机打铃 获取完整无水印论文报告说明(含源码程序、电路原理图和仿真图) 本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用AT89C51单片机的扩展芯片和6个PNP三极管做驱动&…

C/C++每日一练(20230325)

目录 1. 搜索插入位置 🌟 2. 结合两个字符串 🌟 3. 同构字符串 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 搜索插入位置 给定一个排序数…

【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私

前言 🍊缘由 在一个月黑风高的夜晚,正准备休息的我突然接到之前外包老总的亲切问候。一顿输出才知道三年前为了搭建流程化部署,将公司的测试代码放到github上后忘记删除。现在被甲方的代码扫描机制扫到,并且检查到代码已经被其他…

Oracle-CDC进程同步报错问题合集

前言: Oracle CDC是数据库自带的数据库数据复制和增量数据抽取工具,提供五种复制模式 1 Synchronous Change Data Capture Configuration(同步复制) 2 Asynchronous HotLog Configuration(异步在线日志CDC) 3 Asynchronous Distributed HotLog Configuratio…

Android开发工程师想找工作需要掌握哪些

前言 目前互联网行业越来越好,进入这个行业的人员也是越来越多。从开发的角度来看,开发的职位主要分前端,后端,客户端(主要分为ios和android开发)以及算法工程师等。 Android开发一直是当前互联网行业中最…

快速排序,分治法实际应用(含码源与解析)

🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -…

微服务中的分布式事务管理 - 2/2 Saga异步模式

转载请注明来源:https://janrs.com/h42y 这篇文章是上一篇文章的延续。 在这篇文章中,我们将看到Saga模式,它是一种异步模式,在每个微服务中执行一连串的事务,并发布消息或事件以进行下一步。如果中间有任何步骤失败&…

吉利汽车智能驾驶掌舵人胡金龙离职!NOA「换道超车」被按下暂停键?

2022年是中国自主品牌全面实现智能驾驶「换道超车」的关键一年。 高工智能汽车研究院研究院监测数据显示,2022年自主品牌(不含合资车型)完成年度总交付909.68万辆,同比增长6.39%,逆势跑赢市场。比亚迪、上汽、吉利、长…

Web自动化测试(二)(全网最给力自动化教程)

欢迎您来阅读和练手!您将会从本章的详细讲解中,获取很大的收获!开始学习吧! 2.4 CSS定位2.5 SeleniumBuilder辅助定位元素2.6 操作元素(键盘和鼠标事件) 正文 2.4 CSS定位 前言 大部分人在使用selenium定…

【字体图标iconfont】字体图标部署流程+项目源码分析

今日,心情甚是烦闷,原由… 公司项目需要将字体图标做一些细微的调整,我一人分析了许久,看不大懂源码的逻辑,产生了自我怀疑。深吸一口气,重新鼓起勇气,调整心境,一下子豁然开朗&…

【sentinel】熔断降级规则详解及源码分析

概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联…

ChatGPT使用介绍、ChatGPT+编程、相关组件和插件记录

文章目录介绍认识ChatGPT是通过英汉互译来实现中文回答的吗同一个问题,为什么中英文回答不同ChatGPT的使用对话组OpenAI APIAI智能绘图DALLE 2ChatGPT for Google插件ChatGPT编程编写代码代码错误修正与功能解读代码评审与优化推荐技术方案编写和优化SQL语句在代码编…

Linux操作系统ARM指令集与汇编语言程序设计

一、实验目的1.了解并掌握ARM汇编指令集2.应用ARM指令集编写一个程序操控开发板上的LED灯二、实验要求应用ARM汇编指令集编写程序,实现正常状态下开发板上的LED灯不亮,按下一个按键之后开发板上的LED灯进入流水灯模式。三、实验原理四个LED灯的电路如下图…
最新文章