如何在 Python 中创建一个虚拟环境,以及为什么需要它

news2024/11/15 18:06:20

在这里插入图片描述
当用 Python 开发软件时,一个基本的方法是在你的机器上安装 Python,通过终端安装所有需要的库,在一个 .py 文件或笔记本中编写所有的代码,并在终端运行你的 Python 程序。

这是很多初学者和很多从使用 Python 进行数据分析过渡的人的常用方法。

这对于简单的 Python 脚本项目来说效果很好。但是在复杂的软件开发项目中,比如构建一个 Python 库、一个 API 或者软件开发工具包,往往你要处理多个文件、多个包和依赖关系。因此,你将需要为该特定项目隔离你的 Python 开发环境。

考虑这种情况:你正在开发应用程序 A,使用你的系统安装的 Python 和你 pip install 安装的 packageX 1.0 版本到全局 Python 库。然后你切换到本地机器上的项目 B,并安装了相同的 packageX,但版本为 2.0,在 1.0 和 2.0 之间有一些突破性的变化。

当你回去运行你的项目 A 时,你遇到了各种各样的错误,而且你的项目不能运行。这是你在用 Python 构建软件时可能遇到的情况。而为了解决这个问题,我们可以使用虚拟环境。

本教程将介绍你需要知道的关于虚拟环境的一切,以及如何用 Virtualenv 设置一个虚拟环境。

什么是虚拟环境

根据 Python 官方文档,

“虚拟环境是一个 Python 环境,这样安装在其中的 Python 解释器、库和脚本就与安装在其它虚拟环境中的、以及(默认)安装在“系统” Python(也就是作为操作系统的一部分安装的库)中的任何库隔离。
当你为你的项目激活一个虚拟环境时,你的项目就变成了它自己的独立应用,独立于系统安装的 Python 及其模块。

你的新的虚拟环境有自己的 pip 来安装库,有自己的库文件夹,新的库被添加到这里,还有自己的 Python 解释器,用于激活环境的 Python 版本。

有了这个新环境,你的应用程序变得自成一体,你会感受到一些好处,比如:

你的开发环境包含在你的项目中,并且不干扰你的系统安装的 Python 或其他虚拟环境
你可以为多个 Python 版本创建一个新的虚拟环境
你能够下载软件包到你的项目中,而不需要管理员的权限
你可以很容易地将你的应用程序打包,并与其他开发者分享,进行复制
你可以很容易地在一个文件中为你的项目创建一个依赖和子依赖的列表,这使得其他开发者可以很容易地复制和安装你的环境中使用的所有依赖项
一般由一个 Python 脚本发展而来的软件开发项目可以使用虚拟环境。Python 提供了多种创建和使用虚拟环境的方法。

在下面的章节中,我们将介绍如何创建你的虚拟环境,使用 venv,它可以让你对环境有更多的底层控制。

另一种设置虚拟环境的常用方法是使用 pipenv,它是一种更高级的方法。

如何使用 Venv 安装虚拟环境

Virtualenv 是一个用于设置 Python 环境的工具。从 Python 3.3 开始,它的一个子集被整合到标准库的 venv 模块下。你可以通过在终端运行这个命令将 venv 安装到你的 Python 主机上:

pip install virtualenv

要在你的项目中使用 venv,你需要在终端中创建一个新的项目文件夹,在终端中使用 cd 切换到项目文件夹,并运行以下命令:

 python<version> -m venv <virtual-environment-name>

像这样:

 mkdir projectA
 cd projectA
 python3.8 -m venv env

当你检查新的 projectA 文件夹时,你会注意到已经创建了一个名为 env 的新文件夹。env 是我们的虚拟环境的名称,但你也可以给它别的名字。

如果我们检查一下 env 的内容,在 Mac 上你会看到一个 bin 文件夹。你还会看到通常用来控制你的虚拟环境的脚本,比如安装库的 activate 和 pip,以及你安装的 Python 版本的 Python 解释器,等等。(这个文件夹在 Windows 下将被称为 Scripts)。

lib文件夹将包含一个你已经安装的库的列表。如果你看一下,你会看到虚拟环境中默认的库的列表。

如何激活虚拟环境
现在你已经创建了虚拟环境,你将需要在你的项目中使用它之前激活它。在 Mac 上,要激活你的虚拟环境,运行下面的代码:

source env/bin/activate

这将激活你的虚拟环境。你立刻会注意到你的终端路径包括了 env,这标志着一个激活的虚拟环境。

请注意,要在 Windows 上激活你的虚拟环境,你需要运行下面的代码(查看这个链接以充分了解平台之间的差异):

 env/Scripts/activate.bat //In CMD
 env/Scripts/Activate.ps1 //In Powershel

虚拟环境在运行吗

我们已经激活了虚拟环境,现在我们如何确认项目实际上已经与主机 Python 隔离了呢?我们可以做几件事。

首先,我们通过在激活的虚拟环境中运行下面的代码来检查虚拟环境中安装的软件包列表。你会注意到只有两个包–pip 和 setuptools,它们是新的虚拟环境中默认的基本包。

pip list

接下来你可以在一个没有激活虚拟环境的新终端中运行上面的相同代码。你会注意到在你的主机 Python 中多了很多库,你可能在过去已经安装了。这些库在你安装之前并不是你的 Python 虚拟环境的一部分。

如何在虚拟环境中安装库

要安装新的库,你可以很容易地只用 pip 安装这些库。虚拟环境将使用它自己的 pip,所以你不需要使用 pip3。

在安装完所需的库后,你可以通过使用 pip list 来查看所有安装的库,或者你可以通过运行下面的代码来生成一个列出所有项目依赖的文本文件:

pip freeze > requirements.txt

你可以把这个 requirements.txt 文件命名为你想要的任何名字。

需求文件

为什么需求文件对你的项目很重要?考虑到你把你的项目打包在一个 zip 文件中(没有 env 文件夹),然后你和开发者朋友们分享。

要重新创建你的开发环境,你的朋友只需要按照上面的步骤来激活一个新的虚拟环境。

他们不必逐一安装每个依赖项,而只需运行下面的代码,在他们自己的项目副本中安装你的所有依赖项:

 ~ pip install -r requirements.txt

注意,通常不建议分享你的 env 文件夹,它应该很容易被复制到任何新环境中。

通常你的 env 目录会被包含在一个 .gitignore 文件中(当使用 GitHub 这样的版本控制平台时),以确保环境文件不会被推送到项目库中。

如何停用虚拟环境

要停用你的虚拟环境,只需在终端运行以下代码:

 ~ deactivate

我的职业生涯开始和大多数码农一样,刚开始接触都是最基础的软件测试、编程语法。那时候在B站CSDN到处找学习资源,在这个吃技术的IT行业来说

,不断学习是至关重要的。但是我之前做的是最基础的业务工作,随着时间的消磨,让我产生了对自我价值和岗位意义的困惑。

我的程序员之路,一路走来都离不开每个阶段的计划,因为自己喜欢规划和总结,所以,我和朋友特意花了一段时间整理编写了下面的《python架构师

学习路线》,也整理了不少【网盘资源】,需要的朋友可以公众号【Python大本营】获取网盘链接。

希望会给你带来帮助和方向。

总结

Python 虚拟环境使你有能力将你的 Python 开发项目与你的系统安装的 Python 和其它 Python 环境隔离开来。这使你能够完全控制你的项目,并使其易于重现。

当开发一般从简单的 .py 脚本或 Jupyter 笔记本中发展出来的应用程序时,使用虚拟环境是一个好主意——现在你知道如何设置并开始使用一个虚拟环境了。

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

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

相关文章

【Note】CNN与现代卷积神经网络part4(附PyTorch代码)

文章目录 2.2 残差网络&#xff08;ResNet&#xff09;2.2.1 函数类2.2.2 残差块2.2.3 ResNet模型2.2.4 训练模型2.2.5 Summary 本《CNN与现代卷积神经网络》Note系列会共分为4个part&#xff0c;本文为part4。本Markdown共4k字。 2.2 残差网络&#xff08;ResNet&#xff09; …

文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告

本心、输入输出、结果 文章目录 文心一言 4.0 ERNIE-Bot 4.0 &#xff1a;ERNIE-Bot 4.0 大模型深度测试体验报告前言相关跳转文心一言 4.0 ERNIE-Bot 4.0 接口简介Bash 请求示例代码Windows 模式使用 Python 请求如果直接使用官方提供的代码文心一言 4.0 ERNIE-Bot 4.0 API 在…

GEE19:基于Landsat8的常见的植被指数逐年获取

植被指数逐年获取 1. 常见的植被指数1.1 比值植被指数&#xff08;Ratio vegetation index&#xff0c;RVI&#xff09;1.2 归一化植被指数&#xff08;Normalized Difference Vegetation Index&#xff0c;NDVI&#xff09;1.3 增强植被指数&#xff08;Enhanced Vegetation I…

nuxt3+ts:集成 百度-爱番番 客服

一、本文目标 nuxt3 ts 集成百度爱番番&#xff08;客服&#xff09; 百度爱番番—企业的一站式智能营销管家 二、百度爱番番客服能力 三、爱番番后台基础配置 3.1、设置中心 登录后点右上角设置中心 3.2、沟通与触达 -- > 站点设置 -- > 新建站点 填写信息 3.3、获…

jQuery的使用,下载以及一些小案例

24.jQuery的使用 1.官网地址 https://jquery.com/ 版本&#xff1a; ●1X:兼容E678等低版本浏览器&#xff0c;官网不再更新 ●2x:不兼容IE678等低版本浏览器&#xff0c;官网不再更新 ●3x:不兼容E678等低版本浏览器&#xff0c;是官方主要更新维护的版本 2 jQuery的使用步…

【MySQL】面试题

引言 &#xff1a;MySQL面试题及答案 【最新版】 目录 1、NOW&#xff08;&#xff09;和CURRENT_DATE&#xff08;&#xff09;有什么区别&#xff1f;2、CHAR和VARCHAR的区别&#xff1f;3、主键索引与唯一索引的区别4、MySQL中有哪些不同的表格&#xff1f;5、SQL的生命周期…

优化大型机床装配调度:项目管理软件的应用方法

最近&#xff0c;Zoho Projects项目管理软件的一位资深客户&#xff0c;跟我们分享了他是如何把Projects应用于大型机床装配的复杂调度。小Z觉得特别有必要&#xff0c;把各行各业的成功应用和实践经验发布出来。在取得这位资深用户同意后&#xff0c;我们推出了本篇文章&#…

NIO IN:技术蔚来的首次「大阅兵」

宝山&#xff0c;上海第一钢铁厂旧址。 上周&#xff0c;蔚来在这里点亮金色炉台&#xff0c;2500 立方米高炉&#xff0c;浓重的工业气质与古典凝重的光影交织&#xff0c;蔚来 NIO IN 用科技的进步呼应那个火红的年代。 这是蔚来第一次开科技发布会&#xff0c;为了全方位展…

【Leetcode每日一题 2530】「贪心|模拟|优先队列」执行K次操作后的最大分数

2023.10.18 本题重点&#xff1a; 1.优先队列的使用 2.ceil()函数的使用相同的还有floor()函数的使用 题目介绍&#xff1b; 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。 在一步 操作 中&#xff1a; 选出一个满足 0 < i < nums.l…

latex:使用中文字体

解决方案 我这里使用的是gbsn&#xff08;其他的字体我不知道&#xff0c;如果有补充请评价&#xff09;&#xff0c;详细说明如下&#xff1a;

vscode调试container(进行rocksdb调试)+vscode比较git项目不同分支和fork的哪个分支

vscode调试container&#xff08;进行rocksdb调试&#xff09; 参考链接&#xff1a; https://blog.csdn.net/qq_29809823/article/details/128445308#t5 https://blog.csdn.net/qq_29809823/article/details/121978762#t7 使用vscode中的插件dev containners->点击左侧的…

【算法练习Day22】 组合总和组合总和 II分割回文串

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 组合总和组合总和 II分割回…

多继承vs查看类结构

多继承里面的虚函数 类A有两个虚函数&#xff0c;类B重写了其中一个&#xff0c;类C重写了两个&#xff1b; 类C里面可以重写所有继承到的虚函数&#xff08;类A、类B里面的虚函数&#xff09; class A { public:virtual void init() { std::cout << "A init !&qu…

uniapp collapse动态生成多个折叠面板手动展开收起(包括uni-ui版)

前言 官方文档没有暴露出相关api&#xff0c;那就看看组件源码。 以下示例均通过 vue-cli 创建的 uni-app h5 项目 uView&#xff08;1.x&#xff09;版本 源码 node_modules\uview-ui\components\u-collapse-item\u-collapse-item.vue 这个方法是用来改变折叠面板子组件收起还…

Jmeter接口测试 —— jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证码…

亲,手撸图文博文太累了?试试这个神器!

这一篇博客有关如何使用[InternLM-XComposer]来写图文并茂的博文。InternLM-XComposer是一个基于人工智能的创作工具&#xff0c;它可以根据你的输入生成不同类型的内容&#xff0c;例如文章、诗歌、歌词、代码等。你可以使用它来创作有趣和有创意的博客&#xff0c;同时也可以…

【MySQL】数据库——表操作

文章目录 1. 创建表2. 查看表3. 修改表修改表名add ——增加modify——修改drop——删除修改列名称 4. 删除表 1. 创建表 语法&#xff1a; create table 表名字 ( 列名称 列类型 ) charset set 字符集 collate 校验规则 engine 存储引擎 ; charset set字符集 &#xff0c;若…

Unity SRP 管线【第二讲:Draw Call】

参考&#xff1a; https://edu.uwa4d.com/lesson-detail/282/1309/0?isPreview0 文章目录 参考&#xff1a;一、Shader1.HLSL引入2.获取Unity提供的标准输入3.Unity提供的运算库SpaceTransform库的宏对应补充&#xff1a; 4.标准库Common.hlsl5.SpaceTransforms库引入Commo…

Flutter视图原理之三棵树的建立过程

目录 三棵树的关系树的构建过程1.updateChild函数&#xff08;element的复用&#xff09;2.inflateWidget函数3.mount函数3.1 componentElement的实现3.2 RenderObjectElement的实现3.2.1 attachRenderObject函数 4.performRebuild函数 总结三棵树创建流程 三棵树的关系 Flutt…

【数组的使用续篇】

文章目录 以数组的形式打印数组打印方法&#xff1a;Arrays.toString(数组名) 数组排序大小排序方法是 Arrays.sort(数组名) 创建一个自己的打印数组的方法自己创建一个冒泡排序两数之间交换方法 逆置数组打印核心思路还是 i 和 j 交换 总结 以数组的形式打印数组 打印方法&am…