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

【渗透测试】使用 UV 简化 Python 工具和脚本管理

在 Python 开发领域,UV 作为一款新兴工具正迅速受到关注。它以高效、便捷的方式解决了 Python 生态系统中诸多痛点,包括包管理、项目管理、工具安装和虚拟环境管理等。尽管许多教程主要面向开发者,但对于信息安全从业者等 Python 的“用户”群体,UV 同样提供了强大的功能支持。本文将详细介绍如何使用 UV 来安装和运行 Python 应用及脚本,特别适合非开发者的用户。以下内容将涵盖 UV 的核心功能、安装方法、实际案例以及一些实用技巧。


什么是 UV?

UV 是由 Astral 公司开发的一款“下一代 Python 工具”,号称能够替代 pippip-toolspipxpoetrypyenvvirtualenvtwine 等工具。其主要特点包括:

  • 多功能合一:集成了包管理、项目管理、工具安装和虚拟环境管理等多种功能。
  • 超高性能:比 pip 快 10-100 倍。
  • 项目管理:提供全面的项目管理功能和统一的锁文件。
  • 脚本运行:支持运行脚本和内联依赖元数据。
  • Python 版本管理:能够安装和管理不同版本的 Python。
  • 工具安装:支持运行和安装以 Python 包形式发布的工具。
  • 兼容性:提供与 pip 兼容的命令行接口,兼顾性能与熟悉的操作体验。
  • 工作空间支持:支持类似 Cargo 的工作空间,适合大型项目。
  • 高效存储:通过全局缓存实现依赖去重,节省磁盘空间。
  • 跨平台:支持 macOS、Linux 和 Windows。
  • 灵活安装:可通过 curlpip 安装,无需 Rust 或 Python 环境。

本文将展示如何使用 UV 替代 pipx 安装工具、替代 venv 运行脚本,以及其他实用功能。

安装 UV

推荐通过以下 shell 脚本安装 UV:

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

也可以通过 pip 安装:

pip install uv

但需要注意的是,pip 安装可能存在某些限制,建议优先使用官方脚本安装。

指定 Python 版本

UV 支持通过 --python 参数指定所需的 Python 版本。例如:

uv --python 3.11

如果系统中没有指定版本,UV 会自动下载并安装(速度极快),无需手动管理。

安装工具

在过去,信息安全从业者常使用 pipx 安装工具(如 Impacket)以便将其脚本添加到系统路径中。现在,UV 的 uv tool 命令可以完全替代 pipx,且语法相似但性能更优。

从 PyPI 安装

以下是从 PyPI 安装 Impacket 的示例:

uv tool install impacket

输出示例:

Resolved 21 packages in 537ms
Prepared 1 package in 522ms
Installed 21 packages in 20ms+ blinker==1.9.0+ cffi==1.17.1+ charset-normalizer==3.4.1+ click==8.1.8+ cryptography==42.0.8+ dnspython==2.7.0+ flask==3.1.0+ impacket==0.12.0...
Installed 62 executables: DumpNTLMInfo.py, Get-GPPPassword.py, ...

安装完成后,Impacket 的所有命令行工具(如 smbclient.pypsexec.py)都将添加到系统路径,随时可用。

从 GitHub 安装

UV 支持直接从 GitHub 仓库安装包。例如,安装 NetExec:

uv tool install git+https://github.com/Pennyw0rth/NetExec

输出示例:

Resolved 86 packages in 2.11s
Built impacket @ git+https://github.com/Pennyw0rth/impacket.git@4caf58fbebe2831b5708de932162a206f68121a1
Built netexec @ git+https://github.com/Pennyw0rth/NetExec@84d8f108c9c6b47cd2ba5fdede700dc7d2f5054c
Prepared 2 packages in 1.32s
Installed 86 packages in 73ms+ aardwolf==0.2.12+ aesedb==0.1.6...
Installed 4 executables: NetExec, netexec, nxc, nxcdb

从特定 GitHub 分支安装

若需安装特定分支,例如 BloodHound.py 的 bloodhound-ce 分支:

uv tool install git+https://github.com/dirkjanm/BloodHound.py.git@bloodhound-ce

输出示例:

Resolved 23 packages in 500ms
Installed 23 packages in 18ms+ bloodhound-ce==1.8.0...
Installed 1 executable: bloodhound-ce-python

从本地目录安装

对于本地包含 setup.pysetup.cfgpyproject.toml 的包,可以直接安装:

uv tool install .

输出示例:

Resolved 27 packages in 438ms
Built pywhisker @ file:///opt/pywhisker
Prepared 1 package in 892ms
Installed 27 packages in 52ms+ pywhisker==0.1.0...
Installed 1 executable: pywhisker

更新工具

使用 uv tool list 查看已安装的工具及其可执行文件:

uv tool list

输出示例:

black v25.1.0
- black
- blackd
bloodhound-ce v1.8.0
- bloodhound-ce-python
impacket v0.12.0
- DumpNTLMInfo.py
- Get-GPPPassword.py
...

更新所有工具:

uv tool upgrade --all

更新特定工具:

uv tool upgrade impacket

处理依赖问题

某些工具的元数据可能未准确列出所有依赖。例如,certipy-ad 需要 setuptools,但未在依赖中声明,导致运行时出错:

certipy
Traceback (most recent call last):File "/home/oxdf/.local/bin/certipy", line 4, in <module>from certipy.entry import main...
ModuleNotFoundError: No module named 'pkg_resources'

解决方法是使用 --with 参数添加缺失依赖:

uv tool install --with setuptools certipy-ad

运行脚本

添加依赖元数据

对于未打包为 Python 包的脚本(仅包含 requirements.txt),UV 提供了简便的运行方式。首先,使用 PEP 723 添加内联依赖元数据。

添加单个依赖:

uv add --script targetedKerberoast.py impacket

结果:

#!/usr/bin/env python3
# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "impacket",
# ]
# ///

添加 requirements.txt 中的所有依赖:

uv add --script targetedKerberoast.py -r requirements.txt

结果:

#!/usr/bin/env python3
# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "impacket",
#     "ldap3",
#     "pyasn1",
#     "pycryptodome",
#     "rich",
# ]
# ///

运行脚本

使用 uv run 运行脚本,UV 会自动创建虚拟环境并安装依赖:

uv run targetedKerberoast.py

首次运行会安装依赖(通常只需几十毫秒),后续运行直接复用虚拟环境。

设置 Shebang

通过修改脚本的 shebang 行,可以让脚本像二进制文件一样运行:

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "impacket",
#     "ldap3",
#     "pyasn1",
#     "pycryptodome",
#     "rich",
# ]
# ///

赋予执行权限并移至系统路径:

chmod +x targetedKerberoast.py
cp targetedKerberoast.py ~/.local/bin/

之后即可直接运行:

targetedKerberoast.py

本地包示例

spring_heapdumper.py(依赖 pyhprof)为例,假设 pyhprof 未在 PyPI 上发布:

  1. 克隆仓库:
git clone https://github.com/wdahlenburg/pyhprof
cd pyhprof
  1. 添加依赖:
uv add --script spring_heapdumper.py -r requirements.txt
  1. 运行脚本:
uv run spring_heapdumper.py

若需全局安装,修改 shebang 并添加 GitHub 依赖:

uv add --script spring_heapdumper.py 'pyhprof@git+https://github.com/wdahlenburg/pyhprof'

更新后的脚本:

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "hexdump",
#     "pyhprof",
#     "trufflehogregexes",
# ]
# [tool.uv.sources]
# pyhprof = { git = "https://github.com/wdahlenburg/pyhprof" }
# ///

将其复制到 ~/.local/bin,即可全局运行。

交互式终端(REPL)

UV 支持在 Python REPL 中加载特定依赖:

uv run --with js2py --python 3.11 python

示例输出:

Python 3.11.12 (main, Apr  9 2025, 04:04:00) [Clang 20.1.0 ] on linux
>>> import js2py
>>> js2py.__file__
'/home/oxdf/.cache/uv/archive-v0/BH7n3RO6K1FJ5Bk0Qj5Bo/lib/python3.11/site-packages/js2py/__init__.py'

总结

UV 是一款功能强大、性能卓越的 Python 工具管理解决方案,特别适合信息安全从业者等非开发者用户。它简化了工具安装、脚本运行和虚拟环境管理,极大地提升了工作效率。通过本文介绍的命令和技巧,您可以快速上手 UV,优化 Python 工作流。

http://www.dtcms.com/a/364200.html

相关文章:

  • TypeScript:unknown 类型
  • 博维智航(彭州)——面试
  • C++高频误区:vector对象到底在堆上还是栈上?
  • flume扩展实战:自定义拦截器、Source 与 Sink 全指南
  • 博主必备神器~
  • 解锁复杂工作流:Roo Code 中的「Boomerang Tasks」机制 : Orchestrator Mode 的使用
  • 用好AI,从提示词工程到上下文工程
  • ARM - GPIO 标准库开发
  • 算法模板(Java版)_非负整数的高精度运算
  • Linux之Shell编程(五)命令工具与sed编辑
  • Java代码耗时统计的5种方法
  • 将 .vcproj 文件转换为 .pro 文件
  • Apache Doris:重塑湖仓一体架构的高效计算引擎
  • 常见机械机构的图graph表示
  • 【硬件测试】基于FPGA的16PSK+卷积编码Viterbi译码硬件片内测试,包含帧同步,信道,误码统计,可设置SNR
  • 新手也能懂的 MySQL 大表优化:40 字段表的规划思路 + 头表行表应用详解
  • Java8特性
  • MyBatis-Plus 实现用户分页查询(支持复杂条件)
  • TNNLS-2025《Metric Learning-Based Subspace Clustering》
  • 实训云上搭建分布式Hadoop集群[2025] 实战笔记
  • 图像编码--监控摄像机QP设置大小?
  • 构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
  • 用 map() + reduce() 搞定咖啡店订单结算:从发票到报表的 Python 实战
  • C19T1
  • leetcode567.字符串的排列
  • 2025 年行政岗转型突破:解锁技能提升新方向
  • 数据集格式化内容提要解析 (70)
  • Base64编码的作用与应用场景
  • SpringBoot 事务管理避坑指南
  • GitLens VS Code插件测评:助力代码协作高效查提交记录,轻松解决分支管理与代码冲突