当前位置: 首页 > news >正文

conda虚拟环境安装包、依赖同一管理

在 Python 的虚拟环境中,每个环境都是独立的,这意味着即使两个环境需要相同的库,它们也会分别安装各自的副本。这样做是为了避免不同项目之间相互影响,确保每个项目都有一个干净且隔离的环境。

方法一:使用 Conda 的共享环境

当多个上层的虚拟环境在同一时刻调用基础虚拟环境中的 torch 时,通常情况下是不会有问题的,因为每个虚拟环境都是独立的。然而,我们需要明确 conda create --clone 的实际行为以及它是如何工作的。

Conda create --clone 的底层步骤

当你使用 conda create --clone 命令创建一个新的环境时,实际上并不会直接引用底层虚拟环境的依赖包,而是创建了一个与源环境具有相同依赖关系的新环境。具体来说,底层步骤如下:

  1. 解析依赖关系:Conda 会解析源环境中的所有依赖关系及其版本。
  2. 创建新环境:Conda 在指定的目标位置创建一个新的环境目录。
  3. 安装依赖:Conda 会从其包存储库中下载并安装与源环境相同的依赖包及其版本到新环境中。
  4. 保留环境一致性:新环境中的依赖关系、版本和配置与源环境保持一致。

这意味着,尽管新环境与源环境看起来是一样的,但实际上它们是完全独立的,每个环境中的依赖包都是单独安装的。因此,当多个上层环境调用相同的库(如 torch)时,它们实际上各自拥有独立的拷贝,不会互相影响。

步骤:使用 conda create --clone

假设你有一个基础环境 shared_env,其中已经安装了 torchcudatensorflow

conda create --name shared_env torch cuda tensorflow
conda activate shared_env

现在你想要创建一个新的环境 project_env_A,并克隆 shared_env

conda create --name project_env_A --clone=shared_env
conda activate project_env_A

此时,project_env_A 中将会包含与 shared_env 相同的依赖关系及其版本。这意味着 project_env_A 中的 torch 是独立安装的,并且与其他克隆环境中的 torch 没有直接关联。

多个环境同时调用 依赖包

当多个上层环境在同一时刻调用 依赖包 时,它们实际上是在各自环境中调用的 torch,因此不会发生冲突。每个环境都有自己的 Python 解释器和库路径设置,所以即使多个环境同时运行也不会互相干扰。

总结(复制虚拟环境的捷径而已,但还是复制)

conda create --clone命令实际上是在新的环境中复制了一份基础虚拟环境的依赖关系。这意味着对于每一个依赖包,包括torch` 或其他大型库,都会在新的环境中重新下载并安装一份。因此,在存储空间上,每一个克隆的环境都会占用与原环境相似的空间大小,因为它们包含了各自的依赖包副本。

这不同于直接共享文件或链接到原始安装,而是创建了一个完全独立的环境,这样做的好处是保证了环境之间的隔离性和可重复性,但是缺点就是会消耗更多的磁盘空间,尤其是在克隆多个环境或者库较大的情况下。如果你需要管理大量的环境并且担心磁盘空间的问题,可以考虑定期清理不再使用的环境或者使用带有存储优化功能的文件系统。

通过这种方式,你可以确保在多个上层环境中调用基础环境中的依赖(如 torch)时,系统能够正常运行,并且各个环境之间不会互相影响。

方法二:使用 Conda 包链接

如果你已经有了一个标准的 requirements.txt 文件,其中只列出了包名和版本,并且利用已下载的本地包转为yaml文件,最后将本地依赖包链接到虚拟环境中

1. 根据给定的requirements.txt转换为基础版yaml文件

#!/bin/bash# Conda 包缓存目录
conda_cache_dir=$(conda config --show pkgs_dirs | awk '{print $2}')# 读取 requirements.txt 文件
dependencies_file="requirements.txt"
environment_yml="environment.yml"# 创建初始的 environment.yml 文件
cat > "$environment_yml" <<EOF
name: new_env
dependencies:
EOF# 读取 requirements.txt 文件中的依赖项
while IFS= read -r line; do# 检查依赖项是否为空或注释行if [[ -z $line || $line =~ ^# ]]; thencontinuefi# 添加依赖项到 environment.yml 文件echo "  - $line" >> "$environment_yml"# 搜索本地路径local_path=$(find "$conda_cache_dir" -type f -name "*$line*.tar.bz2")# 如果找到了本地路径,则添加到 environment.yml 文件if [[ -n $local_path ]]; thenecho "  - $line: $local_path" >> "$environment_yml"fi
done < "$dependencies_file"# 显示最终的 environment.yml 文件
cat "$environment_yml"
2. 编写脚本处理 environment.yml 文件

接下来,我们可以编写一个脚本来读取 environment.yml 文件,并根据文件中的信息安装依赖项。以下是一个示例脚本:

#!/bin/bash# 创建新的环境
conda create --name new_env
conda activate new_env# 读取 environment.yml 文件中的依赖项并逐个安装
while IFS= read -r line; doif [[ $line =~ ^\s*- ]]; then# 提取包名和本地路径(如果有)pkg=$(echo $line | sed 's/^-\s*//')local_path=$(echo $pkg | grep -oP "(?<=: ).*")# 如果有本地路径,则安装本地包;否则安装远程包if [[ -n $local_path ]]; thenconda install --use-local --file $local_pathelseconda install --use-local $pkgfifi
done < environment.yml

注意事项

  1. 路径正确性:确保在 environment.yml 文件中提供的本地路径是正确的,并且文件确实存在于指定位置。
  2. 依赖关系:使用 --use-local 时,Conda 会尝试从本地已下载的包中找到匹配的包。如果本地没有匹配的版本,Conda 会从远程仓库下载缺失的包。
  3. 版本兼容性:确保所使用的本地包版本与其他依赖项兼容。如果不兼容,Conda 可能会下载其他版本的包来满足依赖关系。

总结

通过这种方法,你可以利用已下载的本地包来创建新的环境,并且可以在 environment.yml 文件中灵活地指定本地路径。这种方法适用于已经下载了所有需要的包,并且希望在创建新环境时尽量使用这些本地包的情况。

总结

通过这种方法,你可以利用已下载的本地包来创建新的环境,并且简化了从 requirements.txt 文件创建环境的过程。这种方法适用于已经下载了所有需要的包,并且希望在创建新环境时尽量使用这些本地包的情况。

相关文章:

conda虚拟环境安装包、依赖同一管理

在 Python 的虚拟环境中&#xff0c;每个环境都是独立的&#xff0c;这意味着即使两个环境需要相同的库&#xff0c;它们也会分别安装各自的副本。这样做是为了避免不同项目之间相互影响&#xff0c;确保每个项目都有一个干净且隔离的环境。 方法一&#xff1a;使用 Conda 的共…...

Unity网络开发记录(四):在unity中进一步封装客户端类

在上一篇文章中&#xff0c;简单的封装了一下服务端中相关的socket对象&#xff0c;为了可以更方便的使用。所以在本篇中&#xff0c;进一步封装一下在unity中的相关客户端类 封装客户端类&#xff0c;首先采用单例模式&#xff0c;然后采用两个队列来存储我们相关的收发信息 p…...

Linux内核中的UART驱动-详解Linux内核UART驱动:结构与功能分析

一、UART概述 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;即通用异步收发器&#xff0c;是一种串行通信接口&#xff0c;用于在计算机和外部设备之间传输数据。它特别适用于短距离、低速、串行和全双工的数据传输。在Linux内核中&a…...

威胁检测与防范:如何及时、准确对抗安全风险

随着技术的飞速发展&#xff0c;网络空间中的威胁日益多样化、隐蔽化&#xff0c;给个人、企业乃至国家的信息安全带来诸多挑战。面对严峻的网络威胁&#xff0c;传统的防火墙、入侵检测系统&#xff08;IDS&#xff09;等防御手段虽能在一定程度上抵御外部攻击&#xff0c;但依…...

数据结构串的kmp相关(求next和nextval)

傻瓜版&#xff0c;用来演示手算过程&#xff0c;个人理解用的&#xff0c;仅供参考。...

创建游戏暂停菜单

创建用户控件 设置样式 , 加一层 背景模糊 提升UI菜单界面质感 , 按钮用 灰色调 编写菜单逻辑 转到第三人称蓝图 推荐用 Set Input Mode Game And UI , 只用仅UI的话 增强输入响应不了 让游戏暂停的话也可以用 Set Game Paused , 打勾就是暂停 , 不打勾就是继续游戏 , 然后…...

seata服务端部署

1.下载seata 官网下载地址&#xff1a;http://seata.io/zh-cn/blog/download.html 或者下载 作者已经下载的压缩包1.4.0 注意&#xff01;&#xff01;&#xff01; 要参考对应的版本&#xff0c;否则可能出现无法正常启动的情况。 参考文档 下载完毕后解压压缩文件 2.修改配…...

理解Python闭包概念

闭包并不只是一个python中的概念&#xff0c;在函数式编程语言中应用较为广泛。理解python中的闭包一方面是能够正确的使用闭包&#xff0c;另一方面可以好好体会和思考闭包的设计思想。 1.概念介绍 首先看一下维基上对闭包的解释&#xff1a; 在计算机科学中&#xff0c;闭包…...

51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时钟模块光照传感器红外传感器温度传感器LED等模块构成。适用于教室灯光全自动控制、教室节能灯控制、教室智能照明等相似项目。 可实现功能: 1、LCD1602实时显示时间、温度、光照强度等信息 2、光照强度传…...

一款资产进行快速存活验证工具

01工具介绍 &#xff08;下载地址见最后&#xff09; 在日常工作的渗透测试过程中&#xff0c;经常会碰到渗透测试项目&#xff0c;而Web渗透测试通常是渗透项目的重点或者切入口。通常拿到正规项目授权后&#xff0c;会给你一个IP资产列表和对应的Web资产地址&#xff0c;这时…...

I/O中断处理过程

中断优先级包括响应优先级和处理优先级&#xff0c;响应优先级由硬件线路或查询程序的查询顺序决定&#xff0c;不可动态改变。处理优先级可利用中断屏蔽技术动态调整&#xff0c;以实现多重中断。下面来看他们如何运用在中断处理过程中&#xff1a; 中断控制器位于CPU和外设之…...

关于PHP 匿名函数在处理数据结构中的应用

PHP 的匿名函数&#xff08;也称为闭包&#xff09;在处理数据结构时非常有用。它们可以在需要一次性函数的情况下使用&#xff0c;例如数组函数的回调、事件处理或作为其他函数的参数。以下是一些常见的应用场景&#xff1a; 数组操作&#xff1a; 使用 array_map、array_fil…...

安卓13默认使用大鼠标 与配置分析 andriod13默认使用大鼠标 与配置分析

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 android13里面的鼠标貌似比以前版本的鼠标小了,有些客户想要把这个鼠标改大。这个功能,android有现成的,就在这里,设置 =》无障碍 =》色彩和动画 =》 大号鼠标指针。 我们通过…...

AI学习指南深度学习篇-批标准化在深度学习中的应用

AI学习指南深度学习篇-批标准化在深度学习中的应用 引言 批标准化&#xff08;Batch Normalization, BN&#xff09;是一种在深度学习中常用的技术&#xff0c;旨在加速训练过程并提高模型的稳定性。它通过标准化每一个小批量的激活值&#xff0c;减小内部协变量偏移&#xf…...

了解网络的相关信息

文章目录 前言了解网络的相关信息1. ip是什么?1.1. 公网IP:1.2. 私有IP:1.2.1. 示例 2. 子网掩码3. 子网掩码的划分网段是什么4. 特殊的回路IP网段(127.0.0.1)5. 端口 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#x…...

Java | Leetcode Java题解之第447题回旋镖的数量

题目&#xff1a; 题解&#xff1a; class Solution {public int numberOfBoomerangs(int[][] points) {int ans 0;for (int[] p : points) {Map<Integer, Integer> cnt new HashMap<Integer, Integer>();for (int[] q : points) {int dis (p[0] - q[0]) * (p[…...

Docker实践与应用举例

引言 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。本文将详细介绍 Dock…...

828华为云征文 | 智能监控新篇章,Prometheus如何在华为云Flexusx容器环境中大展身手

前言 在数字化转型的浪潮中&#xff0c;智能监控成为企业IT战略的关键环节。部署在华为云Flexus X实例上的Prometheus监控系统&#xff0c;凭借其卓越的性能与灵活性&#xff0c;正开启智能监控的新篇章。Flexus X实例以其强大的计算能力和灵活的资源管理&#xff0c;为Prometh…...

基于单片机的可调式中文电子日历系统

** 文章目录 前言概要功能设计软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…...

《C++设计新思维-泛型编程与设计模式之应用》阅读记录

目录 写在前面policy和policy class的认识 写在前面 这本书是2003年出版的&#xff0c;大佬侯捷翻译的&#xff0c;21年前的书了&#xff0c;最近打算翻一翻。 看这种技术书籍&#xff0c;特别是简历理论体系的书籍&#xff0c;最好看纸质书。 本书从根本上展示了generic pa…...

SDMatte效果对比展示:同一玻璃花瓶在PS手动抠图 vs SDMatte自动抠图效果

SDMatte效果对比展示&#xff1a;同一玻璃花瓶在PS手动抠图 vs SDMatte自动抠图效果 1. 引言&#xff1a;玻璃抠图的挑战 玻璃制品一直是图像处理中最具挑战性的抠图对象之一。传统的Photoshop手动抠图需要耗费大量时间在边缘细节处理上&#xff0c;特别是对于透明或半透明区…...

用C++手搓一个哈希表:从链表节点到链地址法的完整实现(附避坑指南)

用C手搓一个哈希表&#xff1a;从链表节点到链地址法的完整实现&#xff08;附避坑指南&#xff09; 哈希表作为数据结构中的瑞士军刀&#xff0c;其高效查找特性在数据库索引、缓存系统等领域无处不在。但教科书上的理论描述往往让初学者陷入"一看就会&#xff0c;一写就…...

Sqoop数据更新处理深度解析:增量导入中的更新记录管理

Sqoop数据更新处理深度解析&#xff1a;增量导入中的更新记录管理 引言1. Sqoop处理数据更新的整体机制1.1 Sqoop更新处理的局限性1.2 两种增量模式对更新的支持对比2. Append模式&#xff1a;只处理新增&#xff0c;不处理更新2.1 工作原理2.2 为什么不能处理更新&#xff1f;…...

GDriveDL:突破谷歌网盘三大限制,实现600%下载效率提升的Python工具

GDriveDL&#xff1a;突破谷歌网盘三大限制&#xff0c;实现600%下载效率提升的Python工具 【免费下载链接】gdrivedl Google Drive Download Python Script 项目地址: https://gitcode.com/gh_mirrors/gd/gdrivedl 在数字化资源获取日益频繁的今天&#xff0c;研究人员…...

零门槛体验:Qwen3-4B-Thinking模型一键部署,chainlit前端轻松调用

零门槛体验&#xff1a;Qwen3-4B-Thinking模型一键部署&#xff0c;chainlit前端轻松调用 1. 模型简介与准备工作 1.1 模型背景介绍 Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF是一个基于vLLM框架部署的文本生成模型&#xff0c;由TeichAI团队开发。这个模型在OpenAI…...

漏洞是什么,为什么要进行漏洞扫描

漏洞是什么&#xff0c;为什么要进行漏洞扫描 在数字化时代&#xff0c;网络安全已成为社会经济发展的重要基石。随着信息技术的飞速发展&#xff0c;网络空间的安全威胁也日益复杂多变&#xff0c;其中&#xff0c;“漏洞”作为网络安全领域的核心概念之一&#xff0c;其存在与…...

MobaXterm新手必看:5分钟搞定SSH连接Linux的完整配置流程

MobaXterm新手避坑指南&#xff1a;SSH连接Linux的完整实战手册 第一次用MobaXterm连Linux服务器就像学骑自行车——看着别人操作行云流水&#xff0c;自己上手却总在奇怪的地方摔跟头。为什么连接总是超时&#xff1f;粘贴功能怎么时灵时不灵&#xff1f;X-Server服务到底该不…...

VibeVoice Pro开源可部署价值:替代商业TTS降低企业AI语音成本70%

VibeVoice Pro开源可部署价值&#xff1a;替代商业TTS降低企业AI语音成本70% 1. 引言&#xff1a;企业语音成本之痛与开源破局 如果你正在为企业寻找AI语音解决方案&#xff0c;大概率会遇到一个两难选择&#xff1a;要么忍受高昂的商业TTS&#xff08;文本转语音&#xff09…...

还在为找不到官方macOS安装文件而烦恼?这个开源工具3分钟帮你搞定!

还在为找不到官方macOS安装文件而烦恼&#xff1f;这个开源工具3分钟帮你搞定&#xff01; 【免费下载链接】gibMacOS Py2/py3 script that can download macOS components direct from Apple 项目地址: https://gitcode.com/gh_mirrors/gi/gibMacOS 你是否曾经遇到过这…...

告别水平框:5分钟看懂Oriented R-CNN如何用‘中点偏移法’优雅解决旋转检测难题

旋转目标检测新范式&#xff1a;Oriented R-CNN如何用几何直觉重构检测逻辑 在遥感图像分析和文档识别领域&#xff0c;传统水平边界框就像用矩形画框去套倾斜摆放的油画——不仅框住目标还会带入大量背景噪声。Oriented R-CNN的突破性在于&#xff0c;它将这个困扰业界多年的问…...