Python 虚拟环境管理:使用 venv 和 conda 避免依赖冲突

news/2025/4/1 6:27:47/文章来源:https://www.cnblogs.com/yoyoliwu/p/18799815

Python 虚拟环境管理:使用 venv 和 conda 避免依赖冲突

在 Python 开发中,虚拟环境是一个非常重要的工具,它可以帮助你为每个项目创建独立的 Python 运行环境,避免不同项目之间的依赖冲突。Python 提供了多种虚拟环境管理工具,其中最常用的是 venvconda。本文将详细介绍如何使用这两种工具创建和管理虚拟环境,帮助你在开发过程中更加高效和便捷。

一、为什么需要虚拟环境?

在开发多个 Python 项目时,不同项目可能依赖不同版本的库。如果没有虚拟环境,这些依赖可能会相互冲突,导致项目运行失败。虚拟环境为每个项目提供了一个独立的 Python 环境,确保每个项目的依赖库互不干扰。

二、使用 venv 创建和管理虚拟环境

venv 是 Python 3.3 及以上版本内置的虚拟环境管理工具。使用 venv 创建虚拟环境非常简单。

(一)创建虚拟环境

# 创建虚拟环境
python -m venv myenv

这会在当前目录下创建一个名为 myenv 的文件夹,其中包含一个独立的 Python 环境。

(二)激活虚拟环境

  • Windows

    myenv\Scripts\activate
    
  • macOS/Linux

    source myenv/bin/activate
    

激活虚拟环境后,命令行提示符会显示虚拟环境的名称,表示当前环境已激活。

(三)安装依赖

在虚拟环境中,可以使用 pip 安装所需的库,而不会影响全局 Python 环境。

pip install requests

(四)退出虚拟环境

完成开发后,可以通过以下命令退出虚拟环境:

deactivate

三、使用 conda 创建和管理虚拟环境

conda 是一个跨平台的包管理器,它不仅可以管理 Python 包,还可以管理其他语言的包。conda 提供了更强大的功能,适合需要管理复杂依赖的项目。

(一)安装 conda

推荐使用 Anaconda 或 Miniconda 安装 conda。Miniconda 是一个轻量级的安装选项,只包含 conda 和必要的依赖。

(二)创建虚拟环境

# 创建虚拟环境
conda create -n myenv python=3.9

这会创建一个名为 myenv 的虚拟环境,并指定 Python 版本为 3.9。

(三)激活虚拟环境

# 激活虚拟环境
conda activate myenv

(四)安装依赖

在虚拟环境中,可以使用 condapip 安装所需的库。

# 使用 conda 安装
conda install requests# 或者使用 pip 安装
pip install requests

(五)退出虚拟环境

完成开发后,可以通过以下命令退出虚拟环境:

conda deactivate

四、虚拟环境的最佳实践

(一)为每个项目创建独立的虚拟环境

每个项目都应该有自己的虚拟环境,以避免依赖冲突。

(二)使用 requirements.txt 管理依赖

在项目根目录下创建一个 requirements.txt 文件,列出所有依赖库及其版本。

requests==2.25.1
numpy==1.19.5

可以通过以下命令安装这些依赖:

pip install -r requirements.txt

(三)定期更新依赖

定期更新虚拟环境中的依赖库,以确保使用最新的功能和安全补丁。

pip install --upgrade -r requirements.txt

(四)备份虚拟环境

可以通过以下命令导出虚拟环境中的依赖列表,方便备份和迁移。

pip freeze > requirements.txt

五、总结

通过本文的介绍,你已经掌握了如何使用 venvconda 创建和管理 Python 虚拟环境。虚拟环境是 Python 开发中的重要工具,它可以帮助你避免依赖冲突,确保项目的稳定运行。希望这些技巧和建议能帮助你在 Python 开发中更加高效和便捷。

文章来源于zlibrary图书馆中《Python编程从入门到实践》书的Python 虚拟环境管理章节内容

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

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

相关文章

[Vue] Vue 模板编译原理解析 part 2

转换器 主要的目的是将模板的 AST 转换为 JS 的 AST,整个模板的编译过程如下: // Vue 的模板编译器 function compile(template) {// 1. 得到模板的 ASTconst ast = parse(template);// 2. 将模板 AST 转为 JS ASTtransform(ast); }整个转换实际上可以分为两个大的部分:模板…

Flasher V5 JLink Pro V6

原帖链接:https://nicemcu.github.io/2025/03/29/PSoC4/FlasherV5/ 2025年3月29日,神变月最后一天,我们参加了放生~ 在这个特殊的日子里,我完成了Flasher V5和JLink Pro V6的crack,难掩内心的喜悦与激动,记录下这一时刻。 前不久小黄鱼上收了一枚Flasher ARM,硬件版本V5…

[Vue] Vue模板编译原理解析 part 1

模板编译整体流程 首先我们看一下什么是编译? 所谓编译(Compile),指的是将语言 A 翻译成语言 B,语言 A 就被称之为源码(source code),语言 B 就被称之为目标代码(target code),这个事情谁来做?编译器来做。编译器你也不用想得那么神秘,就是一段程序而已。 完整的编…

[P] 结对项目:影蛇舞

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健) 这个作业的要求在哪里 [P] 结对项目:影蛇舞 我在这个课程的目标是 学习软件工程知识,通过团队协作开发一个具备实际应用价值的软件,从需求分析、设计、开发到测试和部署,完整经历软件开发生命周期,提高工…

0329-Never Give Up

前言 用LCD1602 去打印一段话吧。 就当作激励和安慰,毕竟,我今天被坏情绪传染了一下,有点点失落和悲伤。 参考 5-2 LCD1602调试器 效果 Never Give UpAttitude Is Everything代码 LCD1602.h #ifndef __LCD1602_H__ #define __LCD1602_H__//用户调用函数: void LCD_Init(); …

JavaScript 数据结构与算法 — 单向链表

链表(Linked List)是一种基本的数据结构,用于表示一组按顺序排列的元素。链表中的每个元素都与下一个元素连接,元素在内存中并不是连续的,而是通过指针来链接在一起。每个元素都包含两部分:自己的数据和指向下一个元素的指针。我们常说的链表指的是单向链表,第一个元素的…

Ethernaut通关(智能合约漏洞)(有缘更新)

SnowSword笑传之出错币Ethernaut通关 参考文章:文章 - Ethernaut闯关录(上) - 先知社区、 智能合约是什么?把智能合约想象成网络上的赛博自动售货机,每个人都可以写自己的智能合约,使用虚拟货币交易物品,并且网络区块链中的所有节点都在为你的交易记账不怕商家提桶跑路……

QML基本组件 滑动条 Slider

描述 Slider通过手柄沿轨迹滑动来设置数值。 Qt帮助文档搜索 “slider” 获取详细信息。属性 from : real to : real value : real orientation : enumeration stepsize : real touchDragThreshold : qreal信号 onValueChange {}import QtQuick import QtQuick.ControlsWindow …

UE5--006--小结(一)

1. Input2. AI Enmy3.Save Game

阶段升级,zhitan-ems开源能源管理系统--集成建筑能耗支路和分项功能

升级介绍 自从春节上班后开源以来,zhitan-ems收到了大家很多的赞誉和认可,很多朋友也提出了中肯的意见。感谢大家。 很多朋友的建议里提到建筑能耗功能,依据大家意见,我们加班加点实现了简单的建筑能耗功能。如下图: 另外打一波广告,欢迎大家star 项目介绍 通过物联网技…

Static Timing Analysis Basics

Preface This note only introduce the essential concepts about Static Timing Analysis, which not contains:Async, i.e. remove, recover Timing conceptions, i.e. false path, multi cycle path etc. Advance timing domain knowledgePOCV, MCMM etc.什么是 STA 由于时钟…

深圳大学的一些简单题

A打表,发现是这样的东西:然后规律很显然,相邻的两个数,一组在左边,另一组在右边,依次循环,偶数的时候是 \(23\) 开头,奇数的时候是 \(12\) 开头,再处理一下 \(1\) 和 \(n\) 就可以,比较简单的分讨 显然规律不止一个点击查看代码 #include <bits/stdc++.h> usin…