Windows 下 .venv 激活脚本深度定制:同时注入 PyTorch 调试日志与国内网络加速通道——从“能跑”到“好调”的完整工程化方案

Windows 下 .venv 激活脚本深度定制:同时注入 PyTorch 调试日志与国内网络加速通道
——从“能跑”到“好调”的完整工程化方案

一、为什么非得改激活脚本?

  1. 重复劳动最耗时
    每次打开终端都要敲四五行 set/export,人脑就是不可靠的剪贴板。

  2. 环境隔离最怕“漏删”
    手动 set 的全局变量在关闭终端前一直存在,极易在下一个项目里造成版本冲突。

  3. 团队协作最怕“不一致”
    新人克隆代码后,因为少配一个变量,导致同样的脚本别人能跑他报错。
    把配置写进 activate.* 后,以上三件事一次性解决:进入 .venv 自动加载,退出 .venv 自动卸载,脚本随仓库同步,CI 也能直接复现。



二、核心原理:activate 到底做了什么?


activate.bat 只做三件小事:

  1. Scripts 目录插到 PATH 最前;

  2. 设置 VIRTUAL_ENV 变量,方便 pip 装包时找对位置;

  3. 在 CMD 里定义一个 deactivate 函数,用于回退 PATH 与变量。

PowerShell 版同理,只是语法换成 $env:
因此“追加自定义变量”不会破坏原有逻辑,只要保证在文件末尾插入、并用 deactivate 时自动清除即可。官方脚本已经帮我们写好了“变量回退”逻辑,我们只需追加。



三、一步一步动手改

  1. 创建纯净 .venv

    python -m venv .venv

    建议把 venv 目录写进 .gitignore,但把 activate-custom.batactivate-custom.ps1 模板保存到 /scripts 并入库,方便团队一键覆盖。
     

  2. 备份官方脚本
    复制一份 activate.batactivate-backup.bat,万一改崩可回滚。
     

  3. 追加 PyTorch 调试段
    activate.bat 末尾加入:

    :: =====  PyTorch 调试日志  =====
    set "TORCH_LOGS=+dynamo,+aot,+graph,+output_code"
    set "TORCHDYNAMO_VERBOSE=1"
    :: 想看 C++ 端栈帧再打开下一行
    :: set "TORCH_SHOW_CPP_STACKTRACES=1"

    说明:

    • +dynamo 是最小可用集合;

    • 若做 torch.compile 性能调优,可再追加 +aot+graph

    • 变量值用双引号包裹,防止路径含空格崩溃。
       

  4. 追加网络加速段
    国内场景分两种:

    • 已有本地加速工具(C****、v2****)→ 直接指到回环端口;

    • 无工具 → 把 https_proxy 指向清华/阿里 PyPI 镜像域名,走“镜像+代理”混合模式。
      示例:

    :: 本地工具监听 7897
    set "http_proxy=http://127.0.0.1:7897"
    set "https_proxy=http://127.0.0.1:7897"
    :: 若用镜像,可再写一行
    set "PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple"

    注意:

    • 端口与工具侧配置保持一致;

    • 如果公司内网有自签证书,再加 set "PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn"

       

  5. PowerShell 版对称改造
    打开 activate.ps1 末尾:

    # =====  PyTorch 调试日志  =====
    $env:TORCH_LOGS = "+dynamo,+aot,+graph"
    $env:TORCHDYNAMO_VERBOSE = "1"# =====  网络加速  =====
    $env:http_proxy  = "http://127.0.0.1:7897"
    $env:https_proxy = "http://127.0.0.1:7897"
    $env:PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple"

    友情提示:PowerShell 执行策略默认禁止脚本,需先

    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
  6. 让“退出”时自动清理
    官方 deactivate 函数已经帮我们 set 回空值,无需额外操作;
    若你追加了自己独创的变量,例如 MY_PROJ_DEBUG=1,记得在 deactivate 里加一行:

    set MY_PROJ_DEBUG=

    否则下次再进别的 .venv 会残留。

     



四、验证:一次打通“调试+下载”

  1. 调试端验证
    写一个最小 demo.py

    import torch
    @torch.compile
    def foo(x): return x * 2
    foo(torch.randn(2,2))

    运行后应看到 [DEBUG] torch._dynamo.eval_frame.__call__: dynamo debug log 字样,说明变量生效。

  2. 下载端验证

    python -m pip install --upgrade pip setuptools wheel

    若控制台出现 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple 且下载速度≥ 5 MB/s,即成功。

  3. 快速排错表

    现象最可能原因1 分钟自查
    pip 仍超时代理端口错/工具未启动`netstat -anofindstr 7897` 看监听
    无调试日志变量没载入echo %TORCH_LOGS% 是否为空
    PS 报错“无法加载脚本”执行策略受限Get-ExecutionPolicy -List 查看


五、高阶玩法:多环境差异化配置

  1. 同仓库多版本
    项目同时维护 torch1.13torch2.2 两个分支,可建两个 venv:

    venv113\Scripts\activate.bat
    venv220\Scripts\activate.bat

    各自脚本里写死不同 PIP_INDEX_URLTORCH_LOGS,切换分支即切换环境,永不串扰。

  2. 一条命令生成“完全体”
    把改造过程写成 setup_venv.py

    import venv, subprocess, shutil, textwrap
    builder = venv.EnvBuilder(with_pip=True)
    builder.create('venv')
    # 追加片段
    patch = textwrap.dedent(r'''set "TORCH_LOGS=+dynamo"set "https_proxy=http://127.0.0.1:7897"
    ''')
    with open('venv/Scripts/activate.bat','a',encoding='utf-8') as f:f.write('\n'+patch)

    新人入职只需:

    python setup_venv.py
    .\venv\Scripts\activate
  • CI/CD 也复用
    GitHub Actions 里加一步:

    yaml
    - name: Patch venv activaterun: |cat scripts/activate-append.txt >> venv/Scripts/activate.bat

    保证云端日志级别与本地一致,debug 不再“只能本地复现”。



六、安全与合规小贴士

不要把真实账号密码写进代理地址,例如 http://user:pass@ip:port,极易被扫到。

若公司内网已有统一出口,优先使用内部 Artifactory 或 Nexus,而不是各自配代理。

脚本里只留“可公开”的镜像域名,敏感端口用 127.0.0.1,防止被外部扫描。



七、总结:把“环境”也当成代码

激活脚本也是源代码,应当:

入库:模板放 /scripts,README 写明如何覆盖;

评审:MR 阶段就检查新增变量是否必要;

自动化:一键脚本 + CI 校验,保证任何时刻 git clone → setup → run 都能跑通。

当我们把调试日志、网络加速、甚至 CUDA_VISIBLE_DEVICES 全部固化进激活脚本后,

就会发现——

“在我电脑能跑”终于不再是玄学,而是工程常识。祝调试愉快,日志常亮!



八、参考文献

venv --- 虚拟环境的创建

在Windows上使用 Python

PyTorch 文档

Lib/venv/scripts/nt/activate.bat

学习 Windows服务器 Windows命令 set (环境变量)

学习 PowerShell about_Environment_Variables

Welcome to the PyTorch developer's wiki!

介绍如何创建和使用PowerShell配置文件

Lib/venv/__init__.py

使用pip和venv在虚拟环境中安装软件包

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

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

相关文章

[BX]和loop指令,debug和masm汇编编译器对指令的不同处理,循环,大小寄存器的包含关系,操作数据长度与寄存器的关系,段前缀

[bx]是什么[bx]这个表达方式和[0]很像,他们俩的功能也很像。之前就提到了,[0]表示一个内存单元,他的偏移地址是0。从这边我们可以引出内存单元的定义:要有内存单元的地址,要有内存单元的长度(类型&#xff…

域格YM310 X09移芯CAT1模组HTTPS连接服务器

HTTPS连接服务器 本文档介绍了HTTPS连接服务器的大致流程&#xff0c;测试服务器为httpbin.org。 HTTPS连接服务器流程 创建证书文件 创建一个文件 ATFSCREATE<filename>参数&#xff1a;<filename> 文件名 写入CA证书 ATFSWRITE<filename>,<mode&…

【ManiSkill】常见envs学习笔记

1. StackCube-v1 用于模拟机器人在桌面场景中将红色立方体&#xff08;cubeA&#xff09;堆叠到绿色立方体&#xff08;cubeB&#xff09;上的操作。该任务强调精确抓取、放置和稳定性控制。成功条件包括红色立方体稳定堆叠在绿色立方体上且不被机器人抓取。 参数 (Arguments…

Java 网络编程全解析

前言&#xff1a;网络编程的意义与价值 前言&#xff1a;网络编程的意义与价值 在当今互联网时代&#xff0c;网络编程是软件开发的核心技能之一。无论是桌面应用、移动应用还是企业级系统&#xff0c;几乎都需要与网络交互。Java 作为一门跨平台的编程语言&#xff0c;提供了完…

HarmonyOS应用拉起系列(三):如何直接拉起腾讯/百度/高德地图进行导航

在鸿蒙应用开发中&#xff0c;经常需要跳转第三方地图应用&#xff08;如 腾讯地图、百度地图、高德地图&#xff09;进行导航。无论是出行类 App、物流类 App&#xff0c;还是线下活动类应用&#xff0c;都存在“跳转地图导航”的实际需求。写完HarmonyOS应用拉起系列一和二后…

PCGrad解决多任务冲突

论文解读&#xff1a;"Gradient Surgery for Multi-Task Learning" 1. 论文标题直译 Gradient Surgery: 梯度手术for Multi-Task Learning: 应用于多任务学习 合在一起就是&#xff1a;为多任务学习量身定制的梯度手术。这个名字非常形象地概括了它的核心思想。 …

Nvidia显卡架构解析与cuda应用生态浅析

文章目录 0. Nvidia显卡简介 一、主要显卡系列 二、主要GPU架构与代表产品 1.main 1.1 CUDA 13.0 的重大变化 1.2 V100 的硬件短板已显现 1.3 这意味着什么? 1.4 写在后面 彩蛋:V100 0. Nvidia显卡简介 一、主要显卡系列 GeForce 系列(消费级) 用途:游戏、创作、日常图形…

开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序

一、背景介绍 随着物联网的兴起&#xff0c;.Net 框架在构建物联网应用程序方面变得越来越流行。微软的 .Net Core 和 .Net 框架为开发人员提供了一组工具和库&#xff0c;以构建可以在 Raspberry Pi、HummingBoard、BeagleBoard、Pine A64 等平台上运行的物联网应用程序。 MQT…

突破性能瓶颈:基于腾讯云EdgeOne的AI图片生成器全球加速实践

1. 项目背景与挑战 1.1 开发背景 随着AIGC技术爆发&#xff0c;我们团队决定开发一款多模型支持的AI图片生成器&#xff0c;主要解决以下痛点&#xff1a; 不同AI模型的参数规范不统一生成结果难以系统化管理缺乏企业级的安全水印方案全球用户访问延迟高&#xff0c;中国用户…

一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)

1.1 Java 语言简介与发展历程 Java 是一门面向对象的高级编程语言&#xff0c;以“跨平台、安全、稳定”为核心特性&#xff0c;自诞生以来长期占据编程语言排行榜前列&#xff0c;广泛应用于后端开发、移动端开发、大数据等领域。 1.1.1 起源与核心人物 起源背景&#xff1…

uniapp:根据目的地经纬度,名称,唤起高德/百度地图来导航,兼容App,H5,小程序

1、需要自行申请高德地图的key,配置manifest.json 2、MapSelector选择组件封装 <template><view><u-action-sheet :list="mapList" v-model="show" @click="changeMap"></u-action-sheet></view> </template&…

我对 WPF 动摇时的选择:.NET Framework 4.6.2+WPF+Islands+UWP+CompostionApi

目录 NET Framework 4.6.2的最大亮点 为什么固守462不升级 WPF-开发体验的巅峰 为什么对WPF动摇了 基于IslandsUWP的滤镜尝试 总结 NET Framework 4.6.2的最大亮点 安全性能大提升&#xff1a; 默认启用TLS1.2协议&#xff0c;更安全&#xff0c;它为后续的版本提供了重…

SpringBoot大文件下载失败解决方案

SpringBoot大文件下载失败解决方案 后端以文件流方式给前端接收下载文件,文件过大时出现下载失败的情况或者打开后提示文件损坏,实际是字节未完全读取写入。 针对大文件下载失败的情况,以下是详细的解决方案: 大文件下载失败的主要原因 内存溢出:一次性加载大文件到内存…

torch.gather

torch.gather 介绍 torch.gather(input, dim, index, *, sparse_gradFalse, outNone) → Tensor 沿由 dim 指定的轴收集值。 对于三维张量&#xff0c;输出按如下方式确定&#xff1a; out[i][j][k] input[index[i][j][k]][j][k] # 如果 dim 0 out[i][j][k] input[i][i…

Golang | http/server Gin框架简述

http/server http指的是Golang中的net/http包&#xff0c;这里用的是1.23.10。 概览 http包的作用文档里写的很简明&#xff1a;Package http provides HTTP client and server implementations. 主要是提供http的客户端和服务端&#xff0c;也就是能作为客户端发http请求&a…

Vision Transformer (ViT) :Transformer在computer vision领域的应用(三)

Experiment 上来的一段话就概括了整章的内容。 We evaluate the representation learning capabilities of ResNet, Vision Transformer (ViT), and the hybrid. 章节的一开头就说明了,对比的模型就是 ResNet,CNN领域中的代码模型。 ViT。 上一篇中提到的Hybrid模型,也就是…

5-12 WPS JS宏 Range数组规范性测试

Range()数组是JS宏中不缺少的组成部分,了解Range()数组的特性必不可少,下面我们一起测试一下各种Range()数组。 1.Range()数组特性 单元格区域:Range("a2:m2")与Range("a2","m2")的类型都是:Range/Object,功能都为单元格区域,功能…

uniapp微信小程序保存海报到手机相册canvas

在uniapp中实现微信小程序保存海报到手机相册&#xff0c;主要涉及Canvas绘制和图片保存。以下是关键步骤和代码示例&#xff1a; 一、关键代码展示&#xff1a; 1. 模板配置&#xff1a;页面展示该海报&#xff0c;可直接查看&#xff0c;也可下载保存到手机相册&#xff0c;h…

glib2-2.62.5-7.ky10.x86_64.rpm怎么安装?Kylin Linux RPM包安装详细步骤

一、准备工作 ​确认系统版本​ 这个包是 ky10的&#xff08;也就是 openEuler 20.03 LTS SP3 或类似版本&#xff09;&#xff0c;而且是 ​x86_64 架构&#xff08;就是常见的64位电脑&#xff09;​。 你要先确认你的系统是不是这个版本&#xff0c;不然可能装不上或者出问题…

webrtc之语音活动下——VAD人声判定原理以及源码详解

文章目录前言一、高斯混合模型介绍1.高斯模型举例1&#xff09;定义2&#xff09;举例说明2.高斯混合模型(GMM)1&#xff09;定义2&#xff09;举例说明3&#xff09;一维曲线二、VAD高斯混合模型1.模型训练介绍1&#xff09;训练方法2&#xff09;训练结果2.噪声高斯模型分布1…