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

MCP笔记:UVX和NPX

mcp server大多使用python和typescript编写,对应的启动命令分别为uvx和npx,下面将分别具体介绍一下这两种指令。熟悉指令的基础知识,有利于我们安装和调试mcp server

示例1:

{"mcpServers": {"fetch": {"command": "uvx","args": ["mcp-server-fetch"]}}
}

示例2:

{"mcpServers": {"amap-maps": {"command": "npx","args": ["-y","@amap/amap-maps-mcp-server"],"env": {"AMAP_MAPS_API_KEY": "api_key"}}}
}

1、UVX

uvx:UV运行Python包提供的命令。它是uv tool run的简写。

UV是由Astral开发的新一代Python包和项目管理工具。使用Rust编写,速度比pip快10-100倍!它是一体化工具:整合包管理(替代pip)、虚拟环境管理(替代venv)、依赖锁定(替代pip-tools)、Python版本管理(替代pyenv)、脚本运行(替代pipx)等功能。

1.1、UV核心优势

  • 极速安装:比pip快10-100倍(上图为安装Polars项目依赖的性能对比)
  • 统一工具链:一个工具替代pip、pip-tools、pipx、poetry、pyenv、virtualenv等
  • 全面的项目管理:支持依赖管理、环境隔离、锁文件
  • Python版本管理:安装和管理不同版本的Python
  • 工具运行和安装:可以直接运行和安装Python应用
  • 脚本支持:运行单文件脚本、支持内联依赖元数据
  • 兼容pip:提供pip兼容接口,无需改变现有工作流
  • 跨平台支持:支持macOS、Linux和Windows

 1.2、快速安装

UV的安装非常简单,有多种方式可供选择:

方法1:独立安装脚本

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

方法2:使用pip安装

pip install uv

方法3:Homebrew安装(macOS) 

brew install uv

 安装完成后,你可以通过在命令行输入uv --version来验证是否安装成功。

1.3、uv基本用法

1.3.1、创建项目

使用UV创建一个新项目

uv init uv_demo

这个命令会初始化一个新项目,并创建必要的文件结构,包括:

  • .gitignore:Git忽略文件
  • .python-version:Python版本信息
  • main.py:主程序文件
  • pyproject.toml:项目配置文件
  • README.md:项目说明文件

1.3.2、创建虚拟环境

我是在conda创建的虚拟环境中安装了uv,你可以继续使用uv创建应用的虚拟环境。

cd uv_demo
uv venv

这个命令会在项目目录下创建一个.venv目录,包含虚拟环境。要激活虚拟环境,使用:

# Linux/macOS
source .venv/bin/activate

# Windows
.venv\Scripts\activate

 

1.3.3、安装依赖包

uv安装依赖包非常简单且迅速:

uv add numpy pandas

这个命令会安装最新版本的numpy和pandas,并自动更新pyproject.toml文件中的依赖信息 

1.3.4、运行Python脚本

 使用UV运行Python脚本:

uv run main.py

 这个命令会在虚拟环境中运行main.py文件

1.3.5、依赖锁定

生成锁文件,确保项目依赖版本的一致性:

uv lock

 这会创建一个uv.lock文件,详细记录所有依赖的精确版本和来源。

1.4、高级功能

1.4.1、Python版本管理

UV可以管理多个Python版本:

# 安装特定Python版本
uv python install 3.10 3.11 3.12

# 创建特定Python版本的虚拟环境
uv venv --python 3.11

1.4.2、工具管理

像pipx一样,UV可以运行和安装Python工具

# 在临时环境中运行工具
uvx pycowsay 'Hello UV!'

# 安装工具
uv tool install ruff

1.4.3、单文件脚本支持

UV支持带有内联依赖元数据的单文件脚本:

# /// [uv]
# dependencies = ["requests"]
# ///

import requests
print(requests.get("https://astral.sh").status_code)

 然后直接运行:

uv run example.py

 UV会自动处理依赖并在隔离环境中运行脚本

1.4.4、pip兼容接口

UV提供了pip兼容的接口,可直接替代pip命令:

# 编译依赖
uv pip compile requirements.in --output-file requirements.txt

# 安装锁定依赖
uv pip sync requirements.txt

1.5、UV命令速查表

命令

描述

uv init <项目名>

创建新项目

uv venv

创建虚拟环境

uv add <包名>

添加依赖

uv remove <包名>

移除依赖

uv run <脚本>

运行脚本

uv lock

生成锁文件

uv sync

同步环境与依赖

uv python install <版本>

安装python版本

uv tool install <工具>

安装Python工具

uvx <工具>[参数]

运行Python工具

2、npx

npx是npm包管理器自5.2.0版本起内置的工具,全称为“Node Package Execute”,核心功能是临时执行Node.js模块命令。它简化了命令行工具的调用流程,无需预先全局或本地安装依赖包即可直接运行特定命令,尤其适合一次性或实验性操作。

npm的核心操作是包的安装与管理(installuninstall等),而npx专注于“按需执行”。npm负责持久化依赖管理,npx负责临时或一次性操作的轻量化执行。

主要优势包括:

  1. 临时安装可执行依赖包:无需全局安装,避免环境污染
  2. 自动执行依赖包命令:安装完成后自动运行
  3. 自动加载 node_modules 中的依赖:无需手动指定 $PATH
  4. 可执行特定版本的命令:便于测试不同版本
  5. 支持执行 GitHub 代码仓库:扩展了使用场景

2.1、npx基本用法

2.1.1、执行本地依赖包命令

若项目中已安装某个包(如knex),可直接运行其命令:

npx knex migrate:latest

无需全局安装knex,也无需手动配置package.json的scripts

2.1.2、临时安装并运行包

运行未安装的包(执行后自动删除):

npx create-react-app my-app  # 临时安装 create-react-app 并执行

2.1.3、指定版本运行

运行特定版本的包:

npx eslint@7.0.0 --version  # 使用 7.0.0 版本的 ESLint

2.1.4、执行远程代码

 直接运行GitHub仓库中的代码:

npx https://gist.github.com/user/test  # 执行远程脚本

2.1.5、交互式命令模式

 进入包的交互式环境(如node REPL):

npx node@14  # 临时使用 Node.js 14 版本

 2.2、npx使用示例

传统方式:先全局安装脚手架工具,再使用

# 安装
npm install fast-create-app -g
# 使用
fast-create-app create-app test

传统方式的缺点:

  1. 全局污染:全局安装的包会影响整个系统环境
  2. 版本冲突:不同项目可能需要同一工具的不同版本
  3. 权限问题:全局安装通常需要管理员权限
  4. 更新困难:全局包不会随项目依赖自动更新
  5. 存储占用:长期积累大量不再使用的全局包

npx 方式:一步到位,无需全局安装

npx fast-create-app create-app test

npx 的优势

  1. 按需临时安装,用完即删
  2. 自动使用最新版本的包
  3. 可同时使用不同版本的工具
  4. 不需要额外的管理员权限

通过 npx,开发者可以更灵活地使用 npm 生态中的工具,无需担心全局环境污染,特别适合尝试新工具、执行一次性命令和管理多版本依赖的场景。

2.3、npx原理

npx 的工作原理可以概括为以下几个步骤: 

1、查找执行路径:当执行 npx xxx 命令时,npx 会按照以下顺序查找可执行文件:

  • 首先检查 $PATH 环境变量中是否存在该命令
  • 然后查找当前项目的 node_modules/.bin 目录
  • 如果都没找到,则临时从 npm registry 安装该包

2、临时安装机制:若需要临时安装,从 npm 仓库下载包到临时目录(通常位于 ~/.npm/_npx)。命令执行完成后,临时安装的包会被自动删除,不会留下任何痕迹。

3、缓存机制:频繁使用的包会被缓存,避免重复下载。

2.4、npx执行优先级机制

当执行命令时,npx遵循三级查找逻辑

1、本地项目依赖:优先在当前项目的node_modules/.bin目录中查找目标命令,适配项目级工具调用(如项目内配置的ESLint、Jest等)。

2、全局安装包:若本地未找到,检查用户全局安装的npm包(通过npm install -g安装的模块)。

3、临时下载执行:若前两步均未找到,npx会自动从npm仓库下载目标包到临时目录,执行完成后立即清理,避免磁盘空间浪费。

http://www.xdnf.cn/news/12927.html

相关文章:

  • 体育平台接入足球数据 API:重构用户体验与商业价值的「数字引擎」
  • Elasticsearch中多索引数据合并与Nested嵌套类型操作全解析
  • Python第七周作业
  • 黑盒测试/白盒测试详解
  • 【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化
  • React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
  • 「混合开发」H5与原生App交互流程方案全面解析
  • SQL Server 手动收缩ldf文件
  • QEMU源码全解析 —— 块设备虚拟化(26)
  • Mac flutter环境搭建
  • MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
  • Linux系统部署KES
  • 中国高等职业教育(专科)专业划分
  • C# 求圆面积的程序(Program to find area of a circle)
  • 探索Selenium:自动化测试的神奇钥匙
  • 牛客round95D
  • 20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
  • Electron 防脱壳转二进制 JSC 打包过程以及踩坑记录
  • 103页战略设计的核心:麦肯锡思维框架、分析方法与实施路径
  • AI会取代IT从业者吗?
  • 【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
  • C语言变量存储与指针:基础篇
  • 【HTML-16】深入理解HTML中的块元素与行内元素
  • Coze工作流-语音故事创作-文本转语音的应用
  • Ansible+Zabbix-agent2快速实现对多主机监控
  • 13.Websocket
  • WebRTC(一):整体架构
  • 【STM32】G030单片机开启超过8个ADC通道的方法
  • mongodb源码分析session执行handleRequest命令find过程
  • [ linux-系统 ] 进程控制