329 字
1 分钟
Mise 懒加载开发环境:Python 和 Node 独立控制指南
Mise 懒加载开发环境:Python 和 Node 独立控制指南
摘要:本文介绍如何通过懒加载和自定义变量,实现 Mise 对 Python 和 Node 的独立控制。新终端默认使用系统版本,执行
mise use时自动启用管理,互不干扰。
🎯 实施思路
┌─────────────────────────────────────────────────────────┐│ 新终端 ││ ↓ ││ MY_DISABLE_PYTHON=1, MY_DISABLE_NODE=1 ││ ↓ ││ MISE_DISABLE_TOOLS=python,node ││ ↓ ││ which python → /usr/bin/python (系统) ││ which node → /usr/bin/node (系统) ││ ││ 执行 mise use python@3.14 ││ ↓ ││ unset MY_DISABLE_PYTHON ││ MISE_DISABLE_TOOLS=node ← 只禁用 node ││ ↓ ││ which python → ~/.local/share/mise/.../python ││ which node → /usr/bin/node (保持系统) │└─────────────────────────────────────────────────────────┘📦 完整配置
1. 创建配置文件
# 创建目录mkdir -p ~/.config/mise
# 创建配置文件nano ~/.config/mise/mise.zsh2. 写入配置内容
# ============================================# Mise 配置 - 独立控制 Python 和 Node# ============================================
# 自定义开关(默认禁用)export MY_DISABLE_PYTHON=1export MY_DISABLE_NODE=1
# ============================================# 核心函数:根据开关更新 MISE_DISABLE_TOOLS# ============================================
mise-update-disable-tools() { local tools=""
[ -n "$MY_DISABLE_PYTHON" ] && tools="python" [ -n "$MY_DISABLE_NODE" ] && tools="${tools:+$tools,}node"
if [ -n "$tools" ]; then export MISE_DISABLE_TOOLS="$tools" else unset MISE_DISABLE_TOOLS fi}
# 初始化mise-update-disable-tools
# ============================================# Mise 函数包装# ============================================
mise() { local cmd="$1" shift
if [ "$cmd" = "use" ]; then # 检测 python if echo "$@" | grep -qE "^python(@|[[:space:]]|$)"; then if [ -n "$MY_DISABLE_PYTHON" ]; then unset MY_DISABLE_PYTHON mise-update-disable-tools echo "⚡ 启用 Python 管理" fi fi
# 检测 node if echo "$@" | grep -qE "^node(@|[[:space:]]|$)"; then if [ -n "$MY_DISABLE_NODE" ]; then unset MY_DISABLE_NODE mise-update-disable-tools echo "⚡ 启用 Node 管理" fi fi fi
command mise "$cmd" "$@"}
# ============================================# 手动控制函数# ============================================
mise-python-enable() { unset MY_DISABLE_PYTHON mise-update-disable-tools echo "✅ Python 管理已启用"}
mise-python-disable() { export MY_DISABLE_PYTHON=1 mise-update-disable-tools echo "🚫 Python 管理已禁用"}
mise-node-enable() { unset MY_DISABLE_NODE mise-update-disable-tools echo "✅ Node 管理已启用"}
mise-node-disable() { export MY_DISABLE_NODE=1 mise-update-disable-tools echo "🚫 Node 管理已禁用"}
mise-status() { echo "=== Mise 状态 ===" [ -n "$MY_DISABLE_PYTHON" ] && echo "🚫 Python: 禁用" || echo "✅ Python: 启用" [ -n "$MY_DISABLE_NODE" ] && echo "🚫 Node: 禁用" || echo "✅ Node: 启用" echo "" echo "MISE_DISABLE_TOOLS=${MISE_DISABLE_TOOLS:-<unset>}" echo "" echo "Python: $(which python 2>/dev/null)" echo "Node: $(which node 2>/dev/null)"}
# ============================================3. 在 .zshrc 中懒加载
# Mise 懒加载[[ -f "$HOME/.config/mise/mise.zsh" ]] && source "$HOME/.config/mise/mise.zsh"⚠️ 注意:确保
eval "$(mise activate zsh)"只执行一次,已在mise.zsh中激活则无需重复。
🧪 使用效果
场景 1:新终端窗口(默认禁用)
$ mise-status=== Mise 状态 ===🚫 Python: 禁用🚫 Node: 禁用
MISE_DISABLE_TOOLS=python,node
Python: /usr/bin/pythonNode: /usr/bin/node场景 2:只启用 Python
$ mise use python@3.14⚡ 启用 Python 管理mise ~/.config/mise/config.toml tools: python@3.14
$ mise-status=== Mise 状态 ===✅ Python: 启用🚫 Node: 禁用
MISE_DISABLE_TOOLS=node
Python: ~/.local/share/mise/installs/python/3.14/bin/pythonNode: /usr/bin/node场景 3:只启用 Node
# 新开终端$ mise use node@20⚡ 启用 Node 管理mise ~/.config/mise/config.toml tools: node@20
$ mise-status=== Mise 状态 ===🚫 Python: 禁用✅ Node: 启用
MISE_DISABLE_TOOLS=python
Python: /usr/bin/pythonNode: ~/.local/share/mise/installs/node/20/bin/node场景 4:同时启用
$ mise use python@3.14 node@20⚡ 启用 Python 管理⚡ 启用 Node 管理
$ mise-status=== Mise 状态 ===✅ Python: 启用✅ Node: 启用
MISE_DISABLE_TOOLS=<unset>场景 5:手动控制
$ mise-python-disable🚫 Python 管理已禁用
$ mise-node-enable✅ Node 管理已启用
$ mise-status=== Mise 状态 ===🚫 Python: 禁用✅ Node: 启用
MISE_DISABLE_TOOLS=python📋 状态对照表
| 操作 | MY_DISABLE_PYTHON | MY_DISABLE_NODE | MISE_DISABLE_TOOLS |
|---|---|---|---|
| 新终端 | 1 | 1 | python,node |
mise use python@3.14 | unset | 1 | node |
mise use node@20 | 1 | unset | python |
mise use python@3.14 node@20 | unset | unset | unset |
mise-python-disable | 1 | unset | python |
mise-node-disable | unset | 1 | node |
🔧 扩展其他工具
如需控制更多工具(Bun、Go 等),按相同模式扩展:
# 添加自定义开关export MY_DISABLE_BUN=1export MY_DISABLE_GO=1
# 更新函数mise-update-disable-tools() { local tools="" [ -n "$MY_DISABLE_PYTHON" ] && tools="python" [ -n "$MY_DISABLE_NODE" ] && tools="${tools:+$tools,}node" [ -n "$MY_DISABLE_BUN" ] && tools="${tools:+$tools,}bun" [ -n "$MY_DISABLE_GO" ] && tools="${tools:+$tools,}go" [ -n "$tools" ] && export MISE_DISABLE_TOOLS="$tools" || unset MISE_DISABLE_TOOLS}
# 在 mise 函数中添加检测if echo "$@" | grep -qE "^bun(@|[[:space:]]|$)"; then [ -n "$MY_DISABLE_BUN" ] && unset MY_DISABLE_BUN && mise-update-disable-tools && echo "⚡ 启用 Bun"fi⚠️ 注意事项
| 问题 | 解决方案 |
|---|---|
| 配置不生效 | 检查 mise.zsh 路径是否正确 |
| 函数未定义 | 确保 source 在 eval "$(mise activate zsh)" 之后 |
| 变量不更新 | 检查 mise-update-disable-tools 是否被调用 |
| 与其他工具冲突 | 只包装 mise 函数,不影响原生命令 |
| 想恢复默认 | 删除 ~/.config/mise/mise.zsh 重新配置 |
📚 参考链接
2025-2-19 23:41
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Mise 懒加载开发环境:Python 和 Node 独立控制指南
https://hyperbola.cc/posts/tech/linux-ops/mise-懒加载开发环境python-和-node-独立控制指南/ 部分信息可能已经过时
相关文章 智能推荐
1
Python项目开发进阶指南:环境管理、工具链与实战案例
Development Python项目开发的完整进阶指南,涵盖环境管理、现代工具链配置和实际项目案例
2
Python安装使用-Miniconda篇
Development Windows与Linux环境下Miniconda的安装教程及实际使用案例
3
Zen Browser 开启 NVIDIA 硬解(VA-API)实战记录
Desktop 记录 Zen Browser 在 Wayland + NVIDIA 环境下从软件解码切换到 VA-API 硬件解码的完整排查与配置过程
4
三节点 ZeroTier 内网下,基于 Keepalived + HAProxy 的 PostgreSQL 读写分离与 K3s 高可用实践
Networking 在三台 Debian 云主机间用 ZeroTier 建立二层网络,部署 Patroni 管理的 PostgreSQL 流复制集群与 K3s 控制平面,再用 Keepalived 与 HAProxy 实现虚拟 IP 入口、读写分离和 API Server 高可用
5
基于Patroni与etcd的PostgreSQL高可用集群
Database 在已有 K3s 集群的三台 Debian 节点上部署独立于 K8s 的 Patroni + etcd 方案,实现 PostgreSQL 17 高可用,并通过标签优先级确保指定节点始终为主库






湘公网安备43010402002198号