【学习笔记】Python 环境隔离

文章目录

    • 前言
    • `venv`
      • `venv` 环境管理
      • `venv` 包管理
    • `virtualenv` 以及 `virtualenvwrapper`
      • 安装
      • `virtualenvwrapper` 环境管理
      • `virtualenvwrapper` 包管理
    • `conda`
      • `conda` 环境管理
      • `conda` 包管理
    • 总结
    • 参考资料

Python 作为最常用的脚本语言,有着非常丰富的第三方库,但是这也导致了 Python 的环境管理非常必要。本文将介绍 Python 的几个常用环境管理工具,以及如何使用它们。

前言

由于 Python 的第三方库非常丰富,因此在开发过程中,我们可能会使用到很多第三方库。
但是,这些第三方库可能会有不同的版本,而且不同的项目可能会使用不同的版本。
如果我们先在 A 项目中使用了老版本的第三方库,而后续在 B 项目中需要使用新版本的第三方库,覆盖了老版本的第三方库,那么 A 项目就可能会出现问题。

当前,个人使用过的 Python 的环境管理工具主要有 venvvirtualenvvirtualenvwrapperconda

venv

Python 3.3 之后,Python 自带了 venv 工具,是内置的一个模块,用于创建虚拟环境。

venv 环境管理

# 创建环境
python -m venv <env_dir>
# 通常在当前目录下创建 .venv 目录作为虚拟环境
python -m venv .venv# 激活环境,直接调用相应的脚本即可
# Windows CMD
.venv\Scripts\activate.bat
# Windows PowerShell
.venv\Scripts\Activate.ps1
# Linux
.venv\Scripts\activate# 退出环境
deactivate# 删除环境,只需要删除相应的目录即可
# Windows
rmdir .venv
# Linux
rm -rf .venv

venv 包管理

激活环境后,直接用 pip 安装、卸载包即可。

virtualenv 以及 virtualenvwrapper

virtualenv 是一个第三方的包,用于创建虚拟环境。
venv 其实就是 virtualenv 的一个子集,相当于被官方收录了,可见其实力。

为了更方便地使用 virtualenv,可以使用 virtualenvwrapper ,它对 virtualenv 进行了封装,提供了更方便的命令。
在 Windows 上,可以使用 virtualenvwrapper-win

安装

pip install virtualenv
# Linux
pip install virtualenvwrapper
# Windows
pip install virtualenvwrapper-win

virtualenvwrapper 环境管理

# 创建环境
mkvirtualenv <env_name># 激活环境(仍然不太兼容最新的 PowerShell)
workon <env_name># 退出环境
deactivate# 删除环境
rmvirtualenv <env_name>

virtualenvwrapper 包管理

激活环境后,直接用 pip 安装、卸载包即可。

conda

conda 是一个开源跨平台语言无关的包管理与环境管理系统。
通常为了方便,可以直接下载包含各种常用软件包的 Anaconda,以及最简环境的 Miniconda

然而,conda 在 Windows 上的使用体验并不好,暂时还不支持新版本的 PowerShell,其官方的 Issue 也有提到这个问题。

所以当前我都是切到 Conmmand Prompt 也就是 CMD 中使用 conda

conda 环境管理

# 创建环境
conda create -n <env_name> [python=<python_version>] [package_name]# 激活环境
conda activate <env_name># 退出环境
conda deactivate# 删除环境
conda remove -n <env_name> --all

conda 包管理

conda install <package_name>conda listconda remove <package_name>

总结

在 Windows 上,在借助 VScode 的 Python 插件的情况下,使用 venvvirtualenvwrapper 都还不错,可以快速的激活环境。
而在 Linux 上,使用 conda 也是一个不错的选择。

参考资料

  • 【Python】venv — 创建虚拟环境
  • 【pypa】virtualenv
  • 【readthedocs】virtualenvwarepper
  • 【Conda】command reference

本文作者: ywang_wnlo
本文链接: https://ywang-wnlo.github.io/posts/28f3e4d7/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

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

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

相关文章

YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是反向残差块网络EMO,其的构成块iRMB在之前我已经发过了,同时进行了二次创新,本文的网络就是由iRMB组成的网络EMO,所以我们二次创新之后的iEMA也可以用于这个网络中,再次形成二次创新,同时本文的主干网络为一种轻量级的CNN架构,在…

redis的数据淘汰测略

Redis 提供了多种数据淘汰策略&#xff0c;可以根据实际需求选择适合的策略。以下是 Redis 中常见的数据淘汰策略&#xff1a; volatile-lru&#xff1a;从已设置过期时间的键中挑选最近最少使用的数据进行淘汰。 volatile-ttl&#xff1a;从已设置过期时间的键中挑选即将过期…

记录在树莓派中部署PI-Assistant开源项目(GPT语音对话)的BUG

核心 在部署PI-Assistant&#xff08;https://github.com/Lucky-183/PI-Assistant&#xff09;项目中&#xff0c;首先要进行环境安装&#xff0c;官网文档中提供的安装命令如下&#xff1a; pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2…

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

一个大型系统有哪些组件构成?

一个大型系统有哪些组件构成&#xff1f; 系统设计往往有很多相似之处&#xff0c;但是细节的地方都是独一无二的。那我们可以把系统设计中这些相似的地方抽离出来作为基础组件&#xff0c;让系统设计变成搭积木。接下来&#xff0c;我会把一个系统设计中可以抽离出哪些通用的…

基于RT-Thread(RTT)的HAL库+ADC+DMA多通道采集

前言 在使用到RTT的ADC设备框架进行AD的多通道采集时&#xff0c;发现数据会跳变&#xff0c;觉得可能是没有加DMA的缘故&#xff0c;但RTT好像没有对应的DMA接口函数&#xff08;或者我没找到&#xff09;&#xff0c;故尝试不使用RTT的ADC设备框架&#xff0c;直接使用HAL库…

指针详解(3)

各位少年&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;今天介绍 二级指针 指针数组&#xff0c;还有个指针数组模拟二维数组。 前言&#xff1a;在浩瀚的C语言编程宇宙中&#xff0c;指针犹如一把打开内存世界大门的独特钥匙&#xff0c;它不仅是理解程序运行…

实时聊天系统

这个系统可以用于网站的即时通讯&#xff0c;比如客服系统、在线社区等。这个功能不仅对用户友好&#xff0c;而且也是检验技术实现能力的一个很好的案例。 ### 功能概述 该系统允许用户在网站上实时发送和接收消息。为了保持实时性&#xff0c;我们将使用PHP进行服务器端的逻…

React Hooks 学习笔记

1.useState&#xff08;&#xff09; 实现对页面数据的存储&#xff0c;当数据改变时候&#xff0c;自动触发render函数 2.useRef 用来解决两个问题&#xff1a; 1).是获取DOM元素或子组件的实例对象 2).存储渲染周期之间共享的数据 3.useEffect 4.useLayoutEffect 5…

CUDA Cpp正电子发射断层扫描仪校准和图像重建—蒙特卡洛3D伊辛模型

要点 GPU对比CPU计算正弦和&#xff1a;使用单CPU、使用OpenMP库和CUDACUDA并行计算&#xff1a;3D网格运行内核&#xff1a;线程块&#xff0c;线程线性处理3D数组&#xff0c;并行归约&#xff0c;共享内存&#xff0c;矩阵乘法/平铺矩阵乘法&#xff0c;基本线性代数子程序…

Javaweb之SpringBootWeb案例之 @ConfigurationProperties的详细解析

4.3 ConfigurationProperties 讲解完了yml配置文件之后&#xff0c;最后再来介绍一个注解ConfigurationProperties。在介绍注解之前&#xff0c;我们先来看一个场景&#xff0c;分析下代码当中可能存在的问题&#xff1a; 我们在application.properties或者application.yml中配…

图论练习2

内容&#xff1a;路径计数DP&#xff0c;差分约束 最短路计数 题目大意 给一个个点条边的无向无权图&#xff0c;问从出发到其他每个点的最短路有多少条有自环和重边&#xff0c;对答案 解题思路 设边权为1&#xff0c;跑最短路 表示的路径数自环和重边不影…

WPS Office18.7软件日常更新

【应用名称】&#xff1a;WPS Office 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#WPS 【应用版本】&#xff1a;18.6.1➡18.7 【应用大小】&#xff1a;160MB 【软件说明】&#xff1a;软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;&#xff0c;主要记录自己在学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xf…

GetBuffer() 与 ReleaseBuffer() 使用详解

GetBuffer() 与 ReleaseBuffer() 使用详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入研究在编程中常用的GetBuffer()与ReleaseBuff…

机器学习_15_贝叶斯算法

文章目录 1 贝叶斯定理相关公式2 朴素贝叶斯算法2.1 朴素贝叶斯算法推导2.2 朴素贝叶斯算法流程 3 高斯朴素贝叶斯4 伯努利朴素贝叶斯5 多项式朴素贝叶斯6 贝叶斯网络6.1 最简单的一个贝叶斯网络6.2 全连接贝叶斯网络6.3 “正常”贝叶斯网络6.4 实际贝叶斯网络&#xff1a;判断…

算法学习——华为机考题库5(HJ31 - HJ35)

算法学习——华为机考题库5&#xff08;HJ31 - HJ35&#xff09; HJ31 单词倒排 描述 对字符串中的所有单词进行倒排。 说明&#xff1a; 1、构成单词的字符只有26个大写或小写英文字母&#xff1b; 2、非构成单词的字符均视为单词间隔符&#xff1b; 3、要求倒排后的单…

LeAPI 后端接口开发 - 发布、下线接口

一、上线接口&#xff08;仅管理员&#xff09; 1. 校验请求参数 2. 判断&#xff08;测试&#xff09;接口是否可以调用 引入调用接口的客户端&#xff08;自己写的 SDK&#xff09;注入客户端实例调用接口 3. 修改数据库中接口的状态 /*** 上线&#xff08;发布&#xff…

机器视觉培训机构的保就业可信吗?就业不了退款是真的吗?

显然是不可能的。某些机器视觉培训机构为了取信于人&#xff0c;请来保险公司再出一份保单&#xff0c;对学员未来的就业薪资承保&#xff0c;如在某机器视觉培训机构培训后就业薪资低于12000元&#xff0c;由某保险公司理赔学员全部培训费用。这种取信于人的操作&#xff0c;我…

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析&#xff0c;先把列表找出&#xff1a; 2.只想要所有的播放地址&#xff0c;通过列表表达式循环遍历这个列表拿到每个对象&#xff0c;再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…