
教程文档【免费下载链接】easy-vibe从 0 到 1 学会 vibe coding项目制学习项目地址https://gitcode.com/datawhalechina/easy-vibe点击查看免费下载本文是 easy-vibe 实战课程「开发工具」附录的核心章节之一完整讲解环境变量与 PATH 的底层机制为什么终端能直接敲git或python找到程序、为什么装完工具要重启终端、为什么 API 密钥绝不能写进代码以及本地.env与生产环境密钥注入的完整工作流。读完你将能独立排查command not found、多版本程序冲突、变量设置无效等高频问题并掌握从本地到云端一致的密钥管理方案。1. 每个程序身边都带着一组配置运行中的每一个程序都持有一组「键值」形式的配置这就是环境变量Environment Variables。程序可以在任意时刻读取这些配置用来了解当前的运行环境——例如当前登录用户、系统语言、临时目录位置等。# 查看当前 shell 里的全部环境变量 $ env # 单独查看某个变量的值 $ echo $HOME /Users/yourname环境变量的核心价值在于把「配置」从「代码」中剥离出来。同一个程序在不同机器、不同用户、不同环境下运行时可以通过读取环境变量自动适配而无需修改任何一行源代码。在 easy-vibe 的课程体系中理解环境变量是连接「本地开发」与「云端部署」的桥梁本地你通过~/.zshrc配置 PATH云端则通过部署平台注入密钥二者本质是同一套机制。交互式课程页面中还内置了EnvVarOverviewDemo组件点击任意变量即可在终端中查看其真实值帮助你直观建立「程序携带配置」的认知。2. PATHShell 如何找到你敲下的命令PATH是一个特殊的环境变量它存储着一串用冒号:分隔的目录路径。当你输入git时Shell 会按这串目录的顺序逐个进入目录查找名为git的可执行文件——找到第一个匹配就立刻停止。$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin上述输出表示Shell 会依次在/usr/local/bin、/usr/bin、/bin、/usr/sbin、/sbin中查找命令。课程页面中的PathSearchDemo组件可以让你选择一个命令逐步观察 Shell 逐目录搜索的完整过程。三个关键规律目录在 PATH 中越靠前优先级越高找到第一个匹配即停止不会继续搜索后续目录所有目录都没有找到 → 报错command not found。正因为「顺序即优先级」当系统存在多个版本的同一程序时PATH 中的先后顺序直接决定了实际执行的是哪一个。这也是第 8 节多版本冲突问题的根源。3. 为什么安装工具后要重启终端安装 nvm、Homebrew、conda 这类工具时安装脚本通常会自动向~/.zshrc追加一行把自己安装的目录加入 PATH# 安装脚本自动写入的内容示例 export PATH/usr/local/opt/python3.12/bin:$PATH关键点在于这行代码只在「新 Shell 启动」时才会执行。已经打开的终端窗口持有的是启动时快照的环境不会被新写入的配置影响。因此安装完成后要么关闭并重新打开终端要么在当前会话中手动重新执行配置# 不重启也能立刻生效 source ~/.zshrcAI 开发工具常见场景# Ollama / pipx 装完却报 command not found which ollama # 先查实际安装位置 # pip 安装的 CLI 工具路径加入 PATH # macOS~/Library/Python/3.x/bin # Linux~/.local/bin export PATH$PATH:$HOME/.local/bin # 推荐用 pipx 安装命令行工具它会自动管理 PATH pipx install aider-chat这里有一个值得记住的判断顺序遇到command not found先which查程序是否真实存在再决定是补 PATH 还是补安装而不是盲目重装。4. 变量的作用域谁能看见这个变量环境变量不是广播给所有程序的。每个进程都持有自己的一份副本这份副本从父进程继承而来修改自己的副本不会影响父进程子进程启动时会从父进程拷贝一份环境快照后续任何一方的修改都不会同步给对方。课程页面用EnvScopeDemo组件展示了三个层级在「用户级」export一个新变量后观察它是否出现在「进程级」。理解了这种「继承拷贝」模型就能解释很多诡异现象在一个终端里设置了变量另一个终端却看不到——因为它们属于不同的进程树各自持有独立的副本。5. export决定子进程能不能读到这个变量在 Shell 中设置变量时加不加export是本质不同的两件事# 仅当前 shell 可见子进程读不到 MY_VARvalue # 标记为可继承子进程启动时自动获得一份副本 export MY_VARvalue要让变量跨会话永久存在把export语句写入 Shell 的配置文件# macOS (zsh) echo export MY_VARvalue ~/.zshrc source ~/.zshrc # 立刻生效不用重开终端 # Linux (bash) echo export MY_VARvalue ~/.bashrc source ~/.bashrceasy-vibe 实战中常见的command not found、工具链无法调用等问题很大一部分都出在这里忘了export或者写入了配置文件但没有source。6. API 密钥绝对不能写进代码调用 OpenAI、Anthropic、DeepSeek 等大模型 API 时你的 API 密钥本质上就是「身份证 信用卡」一旦泄露别人可以用你的额度消费费用由你承担还可能被用于恶意用途。最常见的错误是把密钥直接硬编码进源代码# ❌ 绝对禁止密钥写死在代码里 client OpenAI(api_keysk-xxxxxxxxxxxxxxxx)风险在于代码会进入 Git 历史、被推送到远程仓库、被复制到各种环境几乎无法真正「删除」。Git 历史是永久性的即使后续删除泄露的密钥也已暴露在公开/半公开环境中。课程中的ApiKeyDangerDemo组件直观演示了密钥一旦入库后的扩散路径。在 easy-vibe 的后端实战中密钥读写被严格规范为通过环境变量完成例如 数据库实战章节 中 Supabase Edge Function 的写法const OPENAI_API_KEY Deno.env.get(OPENAI_API_KEY); const openai new OpenAI({ apiKey: OPENAI_API_KEY });这里的关键设计是密钥只存在于运行平台的安全存储中代码本身只声明「我要读取名为 OPENAI_API_KEY 的变量」完全不接触真实密钥值。7. 本地开发用 .env 文件管理密钥本地开发阶段把密钥放在项目根目录的.env文件中代码通过 dotenv 类库读取# .env 文件键值每行一个 OPENAI_API_KEYsk-xxxxxxxxxxxxxxxx SUPABASE_URLhttps://your-project.supabase.co SUPABASE_KEYyour-anon-key# Pythonpip install python-dotenv from dotenv import load_dotenv import os load_dotenv() key os.getenv(OPENAI_API_KEY)// Node.jsnpm install dotenv require(dotenv).config(); const key process.env.OPENAI_API_KEY;easy-vibe 前端实战中同样遵循该模式例如 UI 设计章节 中通过环境变量向本地模型服务传递密钥与地址OPENAI_API_KEYyour-local-key OPENAI_BASE_URLhttp://localhost:8000/v1 \ opendesign两条铁律.env必须加入.gitignore绝不能提交到 Git提供一份.env.example作为模板变量名完整、值留空可以安全提交到 Git方便团队其他成员按图索骥地配置自己的密钥。# .gitignore .enveasy-vibe 仓库自身同样遵循此规范所有密钥类配置均通过环境变量注入仓库中不存在任何硬编码的真实密钥。8. 生产环境让运行平台注入密钥.env是开发阶段的便利工具但不应该照搬到生产环境。在服务器和云平台上应该由运行环境负责注入密钥代码本身完全不感知密钥存放在哪里Supabase / Vercel / Netlify 等平台在控制台或配置文件中设置环境变量运行时自动注入systemd 服务通过EnvironmentFile指定密钥文件Docker / Kubernetes通过env字段或 Secret 机制注入。easy-vibe 后端实战中的 Supabase 章节 明确指出OPENAI_API_KEY被安全地存储为 Supabase 服务器上的环境变量本地前端代码根本无法访问这个密钥从而有效保证密钥安全。这正是「密钥由平台托管、代码无感知」生产模式的实践范例。同理云服务器部署章节 也将环境变量列为部署配置的核心组成部分DATABASE_URLxxx、JWT_SECRETxxx、OPENAI_API_KEYxxx等敏感配置一律通过环境变量注入而不是写死在代码或镜像中。9. 实战排错9.1 command not found# 第一步确认命令是否已在 PATH 中 which python3 # 有输出说明找到了 # 第二步找到程序的实际安装位置macOS 示例 brew list python | grep bin # 第三步把目录加入 PATH并记得 source export PATH/找到的路径:$PATH source ~/.zshrc # 写入配置文件后必须 source9.2 装了两个版本用的不是我想用的which python # /usr/bin/python ← 系统旧版在 PATH 中靠前 # 把新版目录放到 PATH 最前面提升优先级 export PATH/usr/local/bin:$PATH which python # /usr/local/bin/python ← 新版现在优先了原理回顾PATH 顺序即优先级新版目录放在前面Shell 会在命中旧版之前先命中新版。9.3 变量明明设置了程序却读不到原因解决忘了export加上export再试改了~/.zshrc没生效执行source ~/.zshrc用了.env但没装 dotenvpip install python-dotenv/npm install dotenv服务器上只在 SSH 会话有效改用 systemdEnvironmentFile注入最后一行是生产环境的高频坑手动export的变量只存活于当前 SSH 会话进程一重启就消失。正确做法是把密钥交给 systemdEnvironmentFile或云平台托管。10. 名词速查术语含义PATH存储 Shell 搜索可执行文件的目录列表冒号分隔顺序决定优先级export将变量标记为可继承子进程启动时自动获得副本source在当前 Shell 重新执行配置文件使修改立即生效which显示某命令对应的可执行文件路径即 PATH 搜索的结果env打印当前进程的全部环境变量.env项目本地配置文件存放开发用密钥必须加入.gitignore.env.example变量名完整、值留空的模板可以安全提交到 Gitchmod 600文件权限仅所有者可读写适合保护密钥文件Secret ScannerGitHub 等平台自动扫描密钥泄露发现后通知厂商吊销11. 在 easy-vibe 学习路径中的位置本文属于 easy-vibe 附录「开发工具」板块。整个板块以「工具链如何运作」为主线覆盖命令行与 Shell、环境变量与 PATH、Git 版本控制、SSH 认证、正则表达式、IDE 基础等内容是 Stage 1 实战用 AI 编写第一个完整应用与 Stage 2前后端 云端部署之间的关键衔接。进阶阅读SSH 认证与密钥理解公钥/私钥体系与免密登录与环境变量共同构成安全开发的两大支柱配套实践云服务器部署看环境变量如何在真实部署流程中落地配套实践Supabase 数据库实战看Deno.env.get如何从平台安全读取密钥。掌握环境变量与 PATH等于掌握了「程序如何找到工具、工具如何拿到密钥」这两个最底层的运行时问题。它们是 vibe coding 时代依然不过时的基本功——无论 AI 帮你生成多少代码最终运行、部署、排错都绕不开这套机制。赞分享教程文档【免费下载链接】easy-vibe从 0 到 1 学会 vibe coding项目制学习项目地址https://gitcode.com/datawhalechina/easy-vibe点击查看免费下载相关推荐Easy-Vibe 环境变量与 PATH 完全指南从命令查找原理到 API 密钥安全管理Easy Vibe 环境变量与 PATH 完全指南从命令查找原理到 API 密钥安全管理 每次你在终端敲下 git 或 python 系统都要先回答这个程教程文档人工智能Vibe CodingEasy-Vibe 环境变量与 PATH 完全指南从 Shell 命令查找到 API 密钥安全实践Easy Vibe 环境变量与 PATH 完全指南从 Shell 命令查找到 API 密钥安全实践 导读 在 Easy Vibe 的 AI 原生开发实践中教程文档人工智能Vibe Codingeasy-vibe 环境变量与 PATH 实战指南AI 开发中的密钥管理与命令查找机制easy vibe 环境变量与 PATH 实战指南AI 开发中的密钥管理与命令查找机制 导读 每次在终端输入 git 、 python 系统都要定位可执行教程文档人工智能Vibe Coding创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考