当“冰点还原”遇到现代开发环境:我的终极解决方案

“冰点还原”系统指:系统盘(C盘)被配置为每次重启都会自动还原到初始状态。

这意味着:

  • 所有安装在系统盘的软件都会消失。
  • 所有对系统环境变量(PATH)的修改都会被重置。
  • 所有保存在用户配置文件目录(%USERPROFILE%)下的应用数据都会丢失。

而现代开发工作流,尤其是涉及Conda和Node.js的,严重依赖这些持久化的配置。

本文我们解决一个AI开发平台搭建的问题——针对每次重启都会重置系统盘的“冰点”环境。在这种环境下,安装软件、配置环境变量、保存应用数据成为难点。本文将介绍Conda + Node.js + NVM + 自定义工具配置,构建AI开发平台。

(上一张nano banana pro画的海报~哈哈~)

本文教程可适用于windows系统下python环境开发者(深度学习、软件工程等开发人员适用)

(本文所述技术内容最好在“魔法”环境中进行)

1.python环境构建(anaconda)

基础构建:在持久化分区上部署Anaconda:

对于数据科学和机器学习领域而言,Anaconda是经典选择。它不仅预装了Python解释器,更集成了一系列核心科学计算库(如NumPy, Pandas)以及强大的环境管理工具Conda。面对一个系统盘会在重启后重置的特殊计算环境,将Anaconda直接部署在不受影响的持久化数据分区(本文中以用户盘Z盘为例)之上,是确保所有后续工作得以延续的逻辑起点。

有账号的读者可以直接在anaconda官网下载:
Free Download | Anacondahttps://www.anaconda.com/download本文推荐在北京大学镜像站上下载Anaconda版本,点击:
文件-北京大学开源镜像站https://mirrors.pku.edu.cn/anaconda/archive/找到最新版的windows版本点击下载即可:

下载时注意将下方地址换成用户盘(即不会被更新的盘中):

2.VS code安装+用户盘extensions设置

一个功能强大的集成开发环境(IDE)或代码编辑器是连接开发者与代码的桥梁。Visual Studio Code(VS Code)凭借其轻量、高度可扩展和跨平台的特性,已成为现代软件开发的事实标准。在我们的受限环境中,目标是构建一个“绿色版”或“便携式”的VS Code,使其自身、所有设置以及庞大的扩展生态系统都能够存活于持久化分区之上。

首先,在官网获取并部署便携版VS Code,同样将内容都安装到用户盘中:
Visual Studio Code - The open source AI code editorhttps://code.visualstudio.com/

 关键一步:重定向数据与扩展目录

仅仅将VS Code程序放在用户盘还不够。默认情况下,VS Code依然会尝试将用户设置(settings.json)、快捷键配置以及所有安装的扩展存储在系统盘的用户配置文件目录(`%APPDATA%\Code` 和 `%USERPROFILE%\.vscode\extensions`)下。这显然是我们必须解决的核心问题。

首先,在用户盘指定位置创建文件夹(比如Z:\user\.vscode)用于保存用户数据:

有一个方法,你可以下载好之后先别执行上方步骤,先打开vscode随便安装几个extensions,然后在C盘的用户目录下找到.vscode文件夹,直接将其复制过来即可。

之后,找到vscode快捷方式,右键选择属性,在“快捷方式”的目标中设置:

"Z:\software\Microsoft VS Code\Code.exe" --extensions-dir "Z:\user\.vscode\extensions" --user-data-dir "Z:\user\.vscode\user-data"

上方路径改成自己对应的路径即可,如下图所示:

3.NVM for windows工具下载及其配置

在当代的AI研究与开发中,JavaScript及其生态系统扮演着日益重要的角色,无论是数据可视化、Web前端交互界面的构建,还是各类AI辅助开发工具(如本文后续将集成的Codex CLI),都离不开Node.js这一运行时环境。然而,直接安装特定版本的Node.js缺乏灵活性,更好的实践是引入一个版本管理器。对于Windows平台,NVM for Windows项目提供了与Linux/macOS上广受欢迎的NVM相媲美的功能。

为何选择NVM for Windows

在一个可能会长期持续的研究项目中,依赖的工具链版本可能会发生变化。NVM(Node Version Manager)的核心价值在于它允许开发者在同一台机器上安装并轻松切换多个Node.js版本。这种能力确保了项目的可复现性和对不同版本工具的兼容性。更重要的是,NVM for Windows在设计上支持高度的路径自定义,这使其成为在我们的“冰点”环境中部署Node.js的理想选择。它能将Node.js的运行时本身、全局安装的NPM包以及缓存都精确地安置在我们的持久化分区(Z盘)上。

NVM for Windows的部署始于从其GitHub发布页面下载`nvm-setup.zip`安装包。执行安装程序`nvm-setup.exe`时,会遇到两个决定其便携性的关键路径选择:

https://github.com/coreybutler/nvm-windows/releaseshttps://github.com/coreybutler/nvm-windows/releasesNVM for Windows的安装路径:此处必须将其指定到用户盘,例如 `Z:\software\nvm`。这是NVM工具自身及其所有已下载的Node.js版本的存放位置。
Node.js Symlink(符号链接)路径:这是NVM用于指向当前活动Node.js版本的“指针”。同样,也应将其指定到用户盘,例如 `Z:\software\nodejs`。所有对`node`命令的调用,实际上都会通过这个符号链接导向到NVM管理的具体版本目录。

安装 Node.js:
在CMD或PowerShell中,运行以下命令来安装一个Node.js版本(例如LTS长期支持版):

nvm install lts 

# 或者指定一个版本号:

nvm install 20.11.0

安装完成后,这个版本的Node.js会被完整地存放在 `Z:\software\nvm\v20.11.0` 类似的目录下。

node -v
npm -v

如果能看到版本号,说明成功了。

4.conda 环境启动与 nvm启动配置:

前述章节完成了Anaconda、Visual Studio Code和NVM for Windows在持久化分区上的独立部署。然而,这些工具在默认状态下仍是“沉睡”的。由于系统重启会清除所有指向它们的环境变量,我们需要一个自动化的机制,在每次开始工作时“唤醒”并整合它们。

我们可以创建一个.bat脚本,脚本配置如下:

@echo off

:: =======================================================================
::          Robust Master Development Environment Launcher
::             (Conda + NVM for Windows) - v3
:: Uses direct activation for Conda for maximum reliability.
:: =======================================================================

:: ------------------- Configuration Section -------------------
:: PLEASE VERIFY AND SET YOUR ACTUAL PATHS HERE

:: 1. Conda Installation Path
set "CONDA_ROOT=Z:\software\anaconda"

:: 2. NVM for Windows Installation Path
set "NVM_HOME=Z:\software\nvm"

:: 3. Node.js Symlink Path (created by NVM)
set "NVM_SYMLINK=Z:\startlink\nodejs"

:: 4. (Optional) Default Node.js version to use (e.g., 'lts', '20.11.0')
set "DEFAULT_NODE_VERSION=20.11.0"

:: ------------------- Initialization Start --------------------
title Conda + Node.js Dev Env
echo Initializing environment... Please wait.
echo.

:: --- Step 1: Initialize Conda Environment (Reliable Method) ---
echo [1/2] Activating Conda base environment...
call "%CONDA_ROOT%\Scripts\activate.bat"

:: --- Step 2: Initialize NVM and Node.js Environment ---
echo [2/2] Activating Node.js via NVM...
set "NODE_BASE_PATHS=%NVM_SYMLINK%;%NVM_HOME%"
if exist "%NVM_SYMLINK%\npm-global" (
    set "NODE_BASE_PATHS=%NVM_SYMLINK%\npm-global;%NODE_BASE_PATHS%"
)
set "PATH=%NODE_BASE_PATHS%;%PATH%"
call nvm use %DEFAULT_NODE_VERSION% > nul

:: --- Step 3: Finalization and Welcome Message ---
cls
echo.
echo ===============================================================
echo ^| Welcome! Your Conda + Node.js environment is ready. ^|
echo ===============================================================
echo.

echo Conda Status:
:: After direct activation, conda info should show the active environment.
call conda info | findstr "active environment"
echo.

echo Node.js Status:
echo   Node version:
call node -v
echo   NPM version:
call npm -v
echo.

echo You can now use all commands like 'conda', 'python', 'npm', and 'codex'.
echo.

cmd /k

在将此脚本应用于自己的工作流之前,用户必须关注并修改脚本顶部的`Configuration Section`。这一区域是整个脚本唯一需要根据个人部署情况进行调整的地方:

`set "CONDA_ROOT=..."`: 此处需要填入在前文第一节中部署的Anaconda或Miniconda的根目录完整路径。
`set "NVM_HOME=..."`: 对应第三节中NVM for Windows的安装路径。
`set "NVM_SYMLINK=..."`: 对应NVM安装时设置的Node.js符号链接路径。
`set "DEFAULT_NODE_VERSION=..."`: 用户可以指定希望在每次启动时默认激活的Node.js版本。使用`lts`会自动选择最新的长期支持版,也可以指定一个精确的版本号,如`20.11.0`。

这个脚本执行了下方工作流程:

激活Conda环境:脚本的核心步骤之一是`call "%CONDA_ROOT%\Scripts\activate.bat"`。它直接调用Conda自带的激活程序,这是确保Conda环境(包括其`PATH`和环境变量)被完整、正确加载的最可靠方法。执行后,命令提示符将显示`(base)`,表明基础环境已激活。

加载NVM与Node.js:紧接着,脚本动态构建Node.js所需的所有路径(NVM主目录、Node.js活动版本目录、全局NPM包目录),并将它们整体**前置**于当前会话的`PATH`环境变量中。这一“前置”操作确保了我们自定义安装的Node.js版本会被系统优先识别。随后,`call nvm use ...`命令激活了用户在配置区指定的Node.js版本。

环境验证与交互:在所有后台配置完成后,脚本会清屏并显示一个友好的欢迎信息,同时调用`conda info`和`node -v`等命令,向用户报告当前激活的Conda环境和Node.js版本,提供即时反馈。最终,`cmd /k`命令将控制权交给用户,并保持这个配置齐全的命令行窗口处于打开状态,以供后续的开发工作使用。

5.codex配置:

对于codex,我们配置的核心想法是“启动时同步,结束时回传”。我们可以用脚本来实现这个自动化的文件同步过程。

这个方案的优点:
无需管理员权限:只涉及基本的文件和目录复制操作,任何普通用户都可以执行。
逻辑清晰:启动时把配置“推送”到工作目录,工作结束后把结果“拉取”回永久存储。
鲁棒性高:不容易受到系统策略的限制。

下面,我们来设计实现这个新思路的脚本:

这个方案需要两个脚本:

`start_session.bat`: 负责启动。它会把在Z盘的配置复制到系统盘的 `%USERPROFILE%\.codex`,然后启动一个特殊的命令行窗口。
`end_session.bat`**: 负责收尾。工作结束后,运行这个脚本,它会把 `%USERPROFILE%\.codex` 里的新内容(比如会话历史、新设置等)再复制回Z盘,实现数据持久化。

第一部分: `start_session.bat` (启动脚本):

这个脚本是开始工作的入口:

@echo off
chcp 65001 > nul

:: =======================================================================
::          Session Launcher (File Copy Method) - v7_start
:: 1. Copies config to target location.
:: 2. Initializes Conda, NVM, and sets API Key.
:: 3. Launches the development environment.
:: =======================================================================

:: ------------------- Configuration Section -------------------
set "CONDA_ROOT=Z:\software\anaconda"    :: <-- 请根据您的实际情况修改
set "NVM_HOME=D:\MyUserProfile\nvm"      :: <-- 请根据您的实际情况修改
set "NVM_SYMLINK=D:\MyUserProfile\nodejs"  :: <-- 请根据您的实际情况修改
set "DEFAULT_NODE_VERSION=lts"    :: <-- 请根据您的实际情况修改

:: [IMPORTANT] Define SOURCE and TARGET for Codex config
set "SOURCE_CODEX_DIR=Z:\software\codex"  :: <-- codex配置文件地址
set "TARGET_CODEX_DIR=%USERPROFILE%\.codex"  :: <-- codex系统默认的配置文件地址

:: [IMPORTANT] Set your Codex API Key here
set "CODEX_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

:: ------------------- Initialization Start --------------------
title Full Stack AI Dev Environment (Copy Mode)
echo Initializing environment... Please wait.
echo.

:: --- Step 1: Sync Codex Configuration to Target ---
echo [1/4] Syncing Codex configuration...
echo   Source: %SOURCE_CODEX_DIR%
echo   Target: %TARGET_CODEX_DIR%

:: Ensure the source directory exists
if not exist "%SOURCE_CODEX_DIR%" (
    echo.
    echo ERROR: Source Codex directory not found at %SOURCE_CODEX_DIR%
    pause
    exit
)

:: Use xcopy to recursively copy files and directories.
:: /E - Copies directories and subdirectories, including empty ones.
:: /Y - Suppresses prompting to confirm you want to overwrite an existing destination file.
:: /I - If destination does not exist and copying more than one file, assumes that destination must be a directory.
xcopy "%SOURCE_CODEX_DIR%\*" "%TARGET_CODEX_DIR%\" /E /Y /I > nul

:: --- Step 2, 3, 4 are the same as before ---
echo [2/4] Activating Conda base environment...
call "%CONDA_ROOT%\Scripts\activate.bat"

echo [3/4] Activating Node.js via NVM...
set "NODE_BASE_PATHS=%NVM_SYMLINK%;%NVM_HOME%"
if exist "%NVM_SYMLINK%\npm-global" (
    set "NODE_BASE_PATHS=%NVM_SYMLINK%\npm-global;%NODE_BASE_PATHS%"
)
set "PATH=%NODE_BASE_PATHS%;%PATH%"
call nvm use %DEFAULT_NODE_VERSION% > nul

echo [4/4] Codex API Key has been set.

:: --- Finalization and Welcome Message ---
cls
echo.
echo ===============================================================
echo ^| Welcome! Your Full Stack AI environment is ready.     ^|
echo ===============================================================
echo.
echo Conda, Node.js, and API Key are configured.
echo Codex config files have been copied to: %TARGET_CODEX_DIR%
echo.
echo IMPORTANT: When you are finished, run 'end_session.bat'
echo to save your Codex session history and any changes.
echo.

cmd /k

第二部分: `end_session.bat` (结束脚本)

这个脚本非常简洁,只做一件事:把数据拷回去。

@echo off
chcp 65001 > nul

:: =======================================================================
::          Session Saver (File Copy Method) - v7_end
:: Copies the updated Codex configuration back to the permanent storage.
:: =======================================================================

:: ------------------- Configuration Section -------------------
:: Ensure these paths match your start_session.bat script!
set "SOURCE_CODEX_DIR=Z:\software\codex"
set "TARGET_CODEX_DIR=%USERPROFILE%\.codex"

:: ------------------- Sync Back Process --------------------
title Saving Session Data...

echo Syncing session data back to permanent storage...
echo   From: %TARGET_CODEX_DIR%
echo   To:   %SOURCE_CODEX_DIR%
echo.

:: Check if there is anything to save
if not exist "%TARGET_CODEX_DIR%" (
    echo WARNING: Target directory %TARGET_CODEX_DIR% not found.
    echo Nothing to save.
    pause
    exit
)

:: Use xcopy to sync back
xcopy "%TARGET_CODEX_DIR%\*" "%SOURCE_CODEX_DIR%\" /E /Y /I

echo.
echo =======================================================
echo    Codex session data has been successfully saved!
echo =======================================================
echo.
pause

这个方案在逻辑上非常稳固,并且完全避免了权限问题。

通过上方的步骤,你就可以在一个“冰点还原”的windows系统下实现AI开发了,读者们可自行拓展~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐