【零基础自用】理解python为什么要用虚拟环境

不知道学过MATLAB或者R的小伙伴刚刚接触python的时候会不会被各种python版本,包版本,虚拟环境之类的搞的头晕眼花。

问题一 包版本

先来假设,我们自己开发了一个包MyPackage 1.0,里面包含一个模块叫PreTrained,然后去维护,每维护维护就更新一下包的版本。MyPackage2.0,甚至里面一些类的名称也有所变动,比如因为不同算法习惯的专业名词迭代更新,对应的包也会有所修改。如,我们把PreTrained 改名为PreTrainedML。
此时,用户小A,用1.0版本的包写了个程序。我们拿来扒一下,想学习,我们也直接安了MyPackage。

pip install MyPackage
from MyPackage import PreTrained

就会报错找不到对应module。因为等我们用的时候包已经更新成2.0版本了,直接安装最新的包,会找不到这个模块,因为它在新版本里改名了。
那么我们就可以安装包的时候指定一下版本。安装的时候在终端里进行,就像R一样,一般安装完之后都要导入一下才能用。install.package(), library(). (但R里我们不会反复安装某个包,python也是一样的)

pip install MyPackage==1.0

问题二 包环境

新问题来了,如果我们学习多个人的代码,发现他们的MyPackage版本都不太一样,一会这个用1.0,那个用的2.0. 我们要一直重新安装不同版本的包么?有小伙伴想,那我把这个包所有版本的包都安在一个环境里不就行了,但是一般包的版本是很多的,而且调用会很混乱。(PS,一般一个环境里不能安两个版本的包。)
那我们怎么办呢?去建立虚拟环境,什么是虚拟环境可以直接查一下,但是下面分享一下怎么理解
在这里插入图片描述
图片来源 https://www.11meigui.com/2023/python-venv.html

假设我们新建一个虚拟环境叫 Kaggle,就可以在里面安装对应的包版本,不用每次都重新安装包之类的。
怎么新建呢?我的计算机里面又都有哪些环境呢?那我这个环境怎么选呢?下面一一解释一下。

关于新建用的命令工具(pip/conda)

可以在计算机上用 pip 命令新建 见 https://zhuanlan.zhihu.com/p/60647332
也可以用anaconda帮我们新建和管理,下面主要举例如何用conda 命令新建,逻辑是一样的

插一句 conda和pip的作用和区别,可以理解二者都是安装xx包的命令
pip:是 Python 的官方软件包管理工具,用于安装和管理 Python 软件包。不太适用于其他语言。
conda: 是 Anaconda 软件(后续有讲)的一部分,用于管理软件环境和软件包。不仅仅是 Python 软件包,还包括 C、C++ 等其他语言的软件包。conda 可以创建和管理虚拟环境。

比如就像上述安装包时,也可以用conda

# 两行命令作用一样
pip install MyPackage==1.0
conda install MyPackage==1.0
下面回来继续说怎么新建虚拟环境
# 代码
conda create -n your_env_name python=x.x
# 实例 比如建立Kaggle虚拟环境
conda create -n Kaggle python=3.6
新建完了,我怎么看?我的计算机里面又都有哪些环境呢?
(Kaggle) ziqzha@psy-xxxx ~ % conda info --envs 

在这里插入图片描述

怎么确认我现在的环境是那个?

安装包都是先选择环境,再进行安装。看红色方框,名字对应的就是所在环境。
在这里插入图片描述

更多见Anaconda-用conda创建python虚拟环境 https://zhuanlan.zhihu.com/p/94744929

问题三环境和python对应

问题又来了,行,我知道要有虚拟环境,可以安特定版本的包,在这个环境里直接跑代码就不会出现版本冲突。但是我怎么确定我打开的python用的能是这个环境呢?这个怎么对应调?
(对于习惯直接点击app图标打开代码的小伙伴,应该疑惑过),理解了要做什么就好调试了。

说几种方法,一个是从选择过环境的终端里打开,比如上述红色方框环境是(Kaggle),那么直接输入python,就是对应的。
(Kaggle) ziqzha@psy-xxxx ~ % python

在这里插入图片描述

二 Pycharm里怎么对应环境和脚本Script (就是py文件)

右下角 是环境名,可以看到我这里对应的就是 Kaggle环境,那么我当前的py文件运行直接就是在这个环境里。在这里插入图片描述
修改对应的环境:

  1. 选择Interpreter setting ,这里可以看到当前环境我们安装了哪些包,以及对应的版本。


2. add interpreter: 会显示可以选择的环境,virtualenv 是我们自己手动在电脑上建立的虚拟环境。anaconda(conda Enviroment) 是一个可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。

在这里插入图片描述

三 anaconda 简单介绍一下

里面环境直接都给列出来了,在终端里选择什么环境,安装卸载包,这里对应都可以刷新出来
比如终端里

# 这行代码就表示,在kaggle环境里,卸载包 mypackage
(Kaggle) ziqzha ~% conda uninstall MyPackage

然后Anaconda软件里面,kaggle环境下这个包也没了,有时候发现还在,可能是因为没有刷新,我一般都是点其他环境(如点base(root)),再点回来(点击Kaggle)。(这也对应Jupyter notebook里的 kernel的选项,kernel对应的就是我们的环境。如果在终端进行了什么新操作(安装或卸载),有时候需要refresh kernel (刷新一下环境))。
在这里插入图片描述

可能存在错误,评论里欢迎指正

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

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

相关文章

曲线救国 | 双非渣硕的秋招路

作者 | 带带大兄弟 面试锦囊之面经分享系列,持续更新中 欢迎后台回复"面试"加入讨论组交流噢 一篇旧文,可以参考~ 写在前面 双非渣硕,0实习,3篇水文,三个给老板当打工仔的nlp横向项目,八月份开…

基于YOLOv5n/s/m不同参数量级模型开发构建茶叶嫩芽检测识别模型,使用pruning剪枝技术来对模型进行轻量化处理,探索不同剪枝水平下模型性能影响

今天有点时间就想着之前遗留的一个问题正好拿过来做一下看看,主要的目的就是想要对训练好的目标检测模型进行剪枝处理,这里就以茶叶嫩芽检测数据场景为例了,在我前面的博文中已经有过相关的实践介绍了,感兴趣的话可以自行移步阅读…

小研究 - Android 字节码动态分析分布式框架(四)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

Typora上传文件到Gitee

工作内容,不对外开放 一、Typora上传笔记到CSDN 一、安装node.js 官网链接:Node.js (nodejs.org) 下载后得到一个.msi文件,双击即可。 win + R 打开CMD,基于node -v 和npm -v,验证是否安装成功: 二、配置Gitee 1、新建仓库 2、开源此仓库 2.1、初始化readme文件

Vue2+Vue3笔记(尚硅谷张天禹老师)day01

只是记录,初心是为了让页面更好看,会有错误 环境准备 下载vue:Vue下载 下面两个是可选的,主要是我想让控制台干净点 vue_dev_tool安装 vue_dev_tool安装 : Vue 控制台出现You are running Vue in development mode. Make sure to turn on production mode when dep…

【算法刷题之链表篇(1)】

目录 1.leetcode-82. 删除排序链表中的重复元素 II(1)题目描述(2)方法及思路(一次遍历)(3)代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点(1)题目描述&a…

rabbitmq容器启动后修改连接密码

1、进入容器 docker exec -it rabbitmq bash 2、查看当前用户列表 rabbitmqctl list_users 3、修改密码 rabbitmqctl change_password [username] ‘[NewPassword]’ 4、修改后退出容器 ctrlpq 5、退出容器后即可生效,不需要重启容器

C++新经典07--auto、头文件防卫、引用与常量

auto的使用 严格来讲,在C语言中,如果某个函数中需要用到一些局部变量,那么局部变量都会集中定义在函数开头,而在C中不必遵循这样的规则,随时用随时定义即可。当然,作用域一般就是从定义的地方开始到该函数…

免费开源的vue+express搭建的后台管理系统

此项目已开源 前端git地址:exp后台管理系统前端: exp后台管理系统前端 后端git地址:express后台管理系统: express后台管理系统 安装运行 npm i yarn i 前端: npm run dev | yarn dev 后端: npm run start | yarn start 主要技术栈 前端后端名称版本名…

循环神经网络RNN完全解析:从基础理论到PyTorch实战

目录 一、循环神经网络全解1.1 什么是循环神经网络网络结构工作原理数学模型RNN的优缺点总结 1.2 循环神经网络的工作原理RNN的时间展开数学表述信息流动实现示例梯度问题:梯度消失和爆炸总结 1.3 循环神经网络的应用场景文本分析与生成1.3.1 自然语言处理1.3.2 机器…

Flutter实战·第二版-第三章 基础组件笔记

第三章:基础组件 3.1文本及样式 3.1.1 Text Text("Hello world",textAlign: TextAlign.left, );Text("Hello world! Im Jack. "*4,maxLines: 1,overflow: TextOverflow.ellipsis, );Text("Hello world",textScaleFactor: 1.5, );3.1…

WebDriver API及对象识别技术

html页面的iframe的切换 定位到客户管理 新增客户 会无法定位到新增客户,因为在另外一个iframe框架之中。 iframe是html中的框架标签,表示文档中可以嵌入文档,或者说是浮动的框架。在selenium中iframe同样如此,如果驱动器对…

TCP定制协议,序列化和反序列化

目录 前言 1.理解协议 2.网络版本计算器 2.1设计思路 2.2接口设计 2.3代码实现: 2.4编译测试 总结 前言 在之前的文章中,我们说TCP是面向字节流的,但是可能对于面向字节流这个概念,其实并不理解的,今天我们要介…

【C# 基础精讲】LINQ to Objects查询

LINQ to Objects是LINQ技术在C#中的一种应用,它专门用于对内存中的对象集合进行查询和操作。通过使用LINQ to Objects,您可以使用统一的语法来查询、过滤、排序、分组等操作各种.NET对象。本文将详细介绍LINQ to Objects的基本概念、常见的操作和示例&am…

代码随想录算法训练营第四十一天 | 343. 整数拆分,96.不同的二叉搜索树

代码随想录算法训练营第四十一天 | 343. 整数拆分,96.不同的二叉搜索树 343. 整数拆分动态规划贪心 96.不同的二叉搜索树 343. 整数拆分 题目链接 视频讲解 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 )&#xff…

使用Druid解析SQL,获取SQL中所有使用的表

一、sqlParse组成 Druid SQL Parser分三个模块: - Parser - AST - Visitor 1.1 Parser parser是将输入文本转换为ast(抽象语法树),parser有包括两个部分,Parser和Lexer,其中Lexer实现词法分析&#x…

uniapp 微信小程序 绘制海报,长按图片分享,保存海报

uView UI 2.0 dcloud 插件市场地址 弹窗海报源码 <template><!-- 推荐商品弹窗 --><u-popup :show"haibaoShow" mode"center" round26rpx z-index10076 bgColortransparent safeAreaInsetTop close"goodsclose"><image …

chatglm2-6b模型在9n-triton中部署并集成至langchain实践 | 京东云技术团队

一.前言 近期&#xff0c; ChatGLM-6B 的第二代版本ChatGLM2-6B已经正式发布&#xff0c;引入了如下新特性&#xff1a; ①. 基座模型升级&#xff0c;性能更强大&#xff0c;在中文C-Eval榜单中&#xff0c;以51.7分位列第6&#xff1b; ②. 支持8K-32k的上下文&#xff1b…

excel条件格式:不同组对应位置对比标记

问题描述 下图中有两组数据&#xff0c;想要对比两个对应位置的数据并标记 条件格式 选中其中一个单元格&#xff0c;条件格式->新建规则 使用公式确定要设置格式的单元格&#xff0c;自定义需求 格式化剩余同样标准的单元格

MySQL | JDBC连接数据库

一、什么是JDBC 概念&#xff1a; JDBC&#xff0c;即Java Database Connectivity&#xff0c;java数据库连接。是一种用于执行SQL语句的Java API&#xff0c;它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成&#xff0c;它为Java开发…