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

高效Python开发:uv包管理器全面解析

目录

  • uv简介
    • 亮点
    • 与 pip、pip-tools、pipx、poetry、pyenv、virtualenv 对比
  • 安装uv
  • 快速开始
    • uv安装python
    • uv运行脚本
      • 运行无依赖的脚本
      • 运行有依赖的脚本
      • 创建带元数据的 Python 脚本
      • 使用 shebang 创建可执行文件
      • 使用其他package indexes
      • 锁定依赖
      • 提高可复现性
      • 指定不同的 Python 版本
      • 运行 GUI 脚本
    • uv运行工具
      • 运行工具
      • 包名与命令名不同的情况
      • 指定版本运行工具
      • 请求 extras(附加功能)
      • 请求不同来源
      • 使用插件的命令
      • 安装工具
        • Ruff:极速的Python代码检查工具
      • 升级工具
      • 指定 Python 版本
    • uv项目管理
      • 项目结构说明
        • pyproject.toml
        • .python-version
        • .venv
        • uv.lock
      • 依赖管理
      • 运行命令
      • 构建发行包
    • uv构建和发布包
      • 构建你的包
      • 发布你的包
      • 安装测试
  • 总结

uv简介

uv 是由 Astral 公司开发,用 Rust 编写的快速 Python 包管理器
它最初作为 pip 工作流的替代品推出,如今已扩展成为一个端到端的解决方案,能够管理 Python 项目、命令行工具、单文件脚本,甚至 Python 本身。
uv 类似于 Python 版本的 Cargo,为开发者提供一个快速、可靠、易用的统一接口。

主要特性如下:

  1. 端到端项目管理
    通过 uv runuv lockuv sync 等命令,uv 可以基于标准元数据生成跨平台的锁文件并安装依赖。
    相比 Poetry、PDM 和 Rye 等工具,uv 在性能上更具优势。

  2. 工具管理
    使用 uv tool installuv tool run(别名 uvx),可以在隔离的虚拟环境中安装和运行命令行工具。
    支持执行一次性命令,无需显式安装,速度比 pipx 更快。

  3. Python 安装
    通过 uv python install 可以自动下载安装 Python,类似 pyenv,但效率更高。

  4. 单文件脚本支持
    支持基于 PEP 723 的内联元数据,只需使用 uv run 即可执行独立的 Python 脚本。

这些功能建立在 uv 高性能的跨平台依赖解析器之上。无论是处理小型脚本还是大型项目,uv 都能提供良好的性能和可靠性,适合从初学者到专家的各种 Python 开发需求。

亮点

官方文档:https://docs.astral.sh/uv/

  • 🚀 一个工具替代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等多个工具
  • ⚡️ 比 pip 快 10 到 100 倍
  • 🗂️ 提供全面的项目管理功能,支持通用锁文件
  • ❇️ 支持运行脚本,并支持内联依赖元数据
  • 🐍 可安装并管理多个 Python 版本
  • 🛠️ 支持运行和安装以 Python 包发布的工具
  • 🔩 提供兼容 pip 的接口,在保留熟悉 CLI 的同时获得性能提升
  • 🏢 支持类 Cargo 的工作区,用于构建可扩展项目
  • 💾 节省磁盘空间,依赖去重采用全局缓存
  • ⏬ 可通过 curl 或 pip 安装,无需预装 Rust 或 Python
  • 🖥️ 支持 macOS、Linux 和 Windows
  • uv 由 Ruff 的开发者 Astral 团队支持

与 pip、pip-tools、pipx、poetry、pyenv、virtualenv 对比

📦 pip

简介:pip 是 Python 官方推荐的包管理器,由 Python Packaging Authority(PyPA)维护。(PyPI)

功能

  • 安装和卸载 Python 包
  • 支持从 PyPI、Git 仓库、本地目录等多种来源安装(GitHub)

优点

  • 广泛使用,社区支持良好
  • 简单易用,适合初学者(PyPI)

缺点

  • 不支持依赖锁定,可能导致环境不一致
  • 缺乏虚拟环境和项目管理功能

适用场景

  • 快速安装单个包
  • 与其他工具(如 virtualenv、pip-tools)结合使用(GitHub)

🔧 pip-tools

简介:pip-tools 是由 Jazzband 社区维护的工具集,旨在增强 pip 的功能。

功能

  • pip-compile:从 requirements.in 生成锁定的 requirements.txt
  • pip-sync:根据 requirements.txt 安装或卸载依赖(Poetry)

优点

  • 确保项目依赖的一致性
  • 与 pip 兼容,易于集成

缺点

  • 依赖解析速度较慢
  • 功能相对单一,仅处理依赖锁定

适用场景

  • 需要严格依赖锁定的项目
  • 与 pip 和 virtualenv 结合使用

🛠️ pipx

简介:pipx 是由 PyPA 维护的工具,专注于在隔离的环境中安装和运行 Python 命令行应用。

功能

  • 在隔离的虚拟环境中安装 CLI 工具
  • 运行一次性命令

优点

  • 避免全局污染,隔离性好
  • 便于管理和运行 CLI 工具

缺点

  • 安装和运行速度较慢
  • 功能专注于 CLI 工具管理,范围有限

适用场景

  • 需要在隔离环境中运行 CLI 工具
  • 避免全局安装带来的依赖冲突

📦 poetry

简介:Poetry 是由 Python 社区开发的项目管理工具,旨在简化依赖管理和打包发布流程。

功能

  • 使用 pyproject.toml 管理项目依赖
  • 自动创建和管理虚拟环境
  • 构建和发布 Python 包

优点

  • 一体化管理项目生命周期
  • 使用 pyproject.toml,符合 PEP 518 标准

缺点

  • 依赖解析速度较慢
  • 对 Python 版本管理支持有限

适用场景

  • 需要完整项目管理的开发者
  • 希望简化构建和发布流程

🐍 pyenv

简介:pyenv 是由社区开发的工具,用于安装和管理多个 Python 版本。

功能

  • 安装和切换多个 Python 版本
  • 支持全局和本地(每个项目)版本设置

优点

  • 支持多个 Python 版本的切换
  • 适用于开发和测试不同版本的兼容性

缺点

  • 安装新版本需编译,耗时较长
  • 不支持 Windows 系统

适用场景

  • 需要管理多个 Python 版本的开发者
  • 测试不同 Python 版本的兼容性

🧪 virtualenv

简介:virtualenv 是由社区开发的工具,用于创建隔离的 Python 虚拟环境。

功能

  • 创建隔离的虚拟环境
  • 支持不同项目使用不同的依赖

优点

  • 轻量级,创建环境速度快
  • 适用于简单的项目隔离

缺点

  • 不包含依赖管理功能
  • 需手动管理依赖

适用场景

  • 需要简单环境隔离的项目
  • 与 pip 或 pip-tools 结合使用

⚡ uv

简介:uv 是由 Astral 公司开发的高性能 Python 包和项目管理器,使用 Rust 编写,旨在替代 pip、pip-tools、pipx、poetry、pyenv、virtualenv 等多个工具。

功能

  • 安装和管理 Python 包
  • 创建和管理虚拟环境
  • 安装和管理 Python 版本
  • 运行和安装 CLI 工具
  • 支持单文件脚本的依赖管理
  • 提供与 pip 兼容的接口

优点

  • 安装速度快,性能优越
  • 集成依赖管理、虚拟环境、Python 版本管理等功能
  • 支持跨平台,兼容 macOS、Linux 和 Windows

缺点

  • 作为新兴工具,生态尚在发展中

适用场景

  • 需要高性能依赖解析和安装的项目
  • 希望统一管理项目依赖、虚拟环境和 Python 版本
  • 需要在隔离环境中运行 CLI 工具
功能/工具pippip-toolspipxpoetrypyenvvirtualenvuv
包安装
依赖锁定
虚拟环境管理
Python 版本管理
CLI 工具管理
构建与发布
安装速度
跨平台支持

安装uv

uv 可以通过多种方式进行安装,以下是一些常见的安装方式:

  1. 使用官方独立安装器:
  • macOS / Linux:

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

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    
  1. 通过 PyPI 安装:
  • 使用 pip:

    pip install uv
    
  • 或使用 pipx:

    pipx install uv
    

安装方式若使用独立安装器,可通过以下命令自更新至最新版:

uv self update

安装之后,可以通过uv help命令检查是否安装成功:

在这里插入图片描述

快速开始

uv 提供了 Python 开发所需的核心功能 —— 从安装 Python、运行简单脚本,到支持多版本、多平台的大型项目开发。

uv 的界面被分为多个功能模块,每个模块既可单独使用,也可组合使用。


🐍 Python 版本管理

用于安装和管理 Python 本身:

  • uv python install:安装 Python 版本
  • uv python list:查看可用的 Python 版本
  • uv python find:查找已安装的 Python 版本
  • uv python pin:为当前项目固定使用某个 Python 版本
  • uv python uninstall:卸载某个 Python 版本

📄 脚本执行(Scripts)

用于执行独立的 Python 脚本,如 example.py

  • uv run:运行脚本
  • uv add --script:为脚本添加依赖
  • uv remove --script:为脚本移除依赖

🧰 项目管理(Projects)

用于创建和维护包含 pyproject.toml 的 Python 项目:

  • uv init:创建新项目
  • uv add:添加项目依赖
  • uv remove:移除项目依赖
  • uv sync:将项目依赖同步到虚拟环境中
  • uv lock:生成项目依赖的锁文件
  • uv run:在项目环境中运行命令
  • uv tree:查看依赖树
  • uv build:构建项目为可发布包
  • uv publish:将项目发布到 PyPI 等package index

🛠️ 工具管理(Tools)

用于运行和安装发布到 Python package indexes 的命令行工具(如 ruffblack):

  • uvx / uv tool run:在临时环境中运行工具
  • uv tool install:安装工具到用户级环境
  • uv tool uninstall:卸载工具
  • uv tool list:列出已安装的工具
  • uv tool update-shell:更新 shell 以包含工具执行路径

🧩 pip 接口兼容层

用于手动管理包和环境,适用于传统流程或需要更低层控制的情况。

虚拟环境管理(替代 venvvirtualenv):

  • uv venv:创建新虚拟环境

包管理(替代 pippipdeptree):

  • uv pip install:安装包到当前环境
  • uv pip show:查看已安装包的信息
  • uv pip freeze:列出所有已安装包及版本
  • uv pip check:检查依赖兼容性
  • uv pip list:列出已安装包
  • uv pip uninstall:卸载包
  • uv pip tree:查看依赖树

依赖锁定(替代 pip-tools):

  • uv pip compile:将 requirements 编译为锁文件
  • uv pip sync:使用锁文件同步环境

🧹 实用命令(Utility)

用于管理 uv 的状态,如缓存、存储路径或自我更新等:

  • uv cache clean:清理缓存条目
  • uv cache prune:清理过期缓存条目
  • uv cache dir:显示 uv 缓存目录
  • uv tool dir:显示工具安装目录
  • uv python dir:显示已安装的 Python 版本路径
  • uv self update:将 uv 更新到最新版本

uv安装python

如果你的系统中已经安装了 Python,uv 会自动检测并使用它,无需额外配置。不过,uv 也可以安装和管理 Python 版本。uv 会根据需要自动安装缺失的 Python 版本。

如果要安装最新版本的 Python:

uv python install

Python 并未发布官方的可分发二进制文件。因此,uv 使用了来自 Astral 的 python-build-standalone 项目的分发版。且,当 Python 通过 uv 安装时,它不会在全局环境中可用(即不能通过 python 命令直接调用)。

安装特定版本的 Python:

uv python install 3.12

要安装多个 Python 版本:

uv python install 3.11 3.12

要安装其他方的Python实现,例如 PyPy:

uv python install pypy@3.10

要重新安装 uv 管理的 Python 版本,请使用 --reinstall 选项,例如:

uv python install --reinstall

这将重新安装所有之前安装的 Python 版本。随着 Python 分发版的不断改进,重新安装可能会解决一些 bugs,即使 Python 版本未发生变化。

查看已安装的 Python 版本:

uv python list

在这里插入图片描述
使用 uv 时,Python 不需要显式安装。默认情况下,uv 会在需要时自动下载缺失的 Python 版本。例如,以下命令会在未安装 Python 3.12 时自动下载它:

uvx python@3.12 -c "print('hello world')"

即使未指定具体的 Python 版本,uv 也会按需下载最新版本。例如,如果系统中没有 Python 版本,以下命令将会在创建新虚拟环境之前先安装 Python:

uv venv

如果您的系统中已有 Python 安装,uv 会使用现有的 Python 安装。

uv运行脚本

Python 脚本是用于独立执行的文件,例如使用 python <script>.py。使用 uv 运行脚本可以确保依赖项被妥善管理,而无需手动管理虚拟环境。

运行无依赖的脚本

如果脚本没有依赖项,可以使用以下方式运行:

example.py

print("Hello world")

运行:

uv run example.py

如果仅使用标准库模块,也无需额外操作:

import os
print(os.path.expanduser("~"))
uv run example.py

脚本也可以接收命令行参数:

example.py

import sys
print(" ".join(sys.argv[1:]))
uv run example.py test
uv run example.py hello world!

还可以通过标准输入传入脚本:

echo 'print("hello world!")' | uv run -

或者使用 shell 的 here-document:

uv run - <<EOF
print("hello world!")
EOF

如果是在带有 pyproject.toml 的项目目录中使用 uv run,它会先安装当前项目依赖。若脚本与项目无关,可以加 --no-project 跳过:

uv run --no-project example.py

运行有依赖的脚本

如果脚本依赖于第三方库,它们需要被安装到脚本运行的环境中。uv 推荐按需创建环境,而不是维护一个长期存在的虚拟环境。这需要你显式声明依赖项。

例如,以下脚本依赖 rich

import time
from rich.progress import trackfor i in track(range(20), description="For example:"):time.sleep(0.05)

如果没有指定依赖,会运行失败:

uv run --no-project example.py

使用 --with 添加依赖:

uv run --with rich example.py

指定版本范围:

uv run --with 'rich>12,<13' example.py

重复使用 --with 可添加多个依赖。若在项目中运行,这些依赖会与项目依赖合并,如不想这样处理,可使用 --no-project

创建带元数据的 Python 脚本

Python 近期新增了 内联脚本元数据 的标准格式,可用来选择 Python 版本和声明依赖。用以下命令初始化脚本:

uv init --script example.py --python 3.12

添加依赖:

uv add --script example.py 'requests<3' 'rich'

脚本顶部会增加如下声明:

# /// script
# dependencies = [
#   "requests<3",
#   "rich",
# ]
# ///

示例:

import requests
from rich.pretty import pprintresp = requests.get("https://peps.python.org/api/peps.json")
data = resp.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])

执行:

uv run example.py

⚠️ 重要提示
使用内联元数据时,即使在项目中运行 uv run,也会忽略项目依赖,无需加 --no-project

声明 Python 版本:

# /// script
# requires-python = ">=3.12"
# dependencies = []
# ///
type Point = tuple[float, float]
print(Point)

📌 dependencies 字段必须存在,即使为空。

如果所需版本未安装,uv 会自动下载。

使用 shebang 创建可执行文件

可在脚本开头添加 shebang,使其无需 uv run 直接执行:

#!/usr/bin/env -S uv run --scriptprint("Hello, world!")

赋予执行权限:

chmod +x greet
./greet

也支持声明依赖:

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx"]
# ///
import httpx
print(httpx.get("https://example.com"))

使用其他package indexes

你可以通过 --index 指定依赖的包索引:

uv add --index "https://example.com/simple" --script example.py 'requests<3' 'rich'

这将在元数据中加入:

# [[tool.uv.index]]
# url = "https://example.com/simple"

锁定依赖

对于带 PEP 723 元数据的脚本,可以使用 uv lock 锁定依赖:

uv lock --script example.py

将创建 example.py.lock 文件。后续命令如 uv run --script 等将复用锁定版本。

提高可复现性

你可以在元数据中添加 exclude-newer 限制依赖的发布时间:

# /// script
# dependencies = [
#   "requests",
# ]
# [tool.uv]
# exclude-newer = "2023-10-16T00:00:00Z"
# ///

指定不同的 Python 版本

每次运行脚本时可指定不同的 Python 版本:

import sys
print(".".join(map(str, sys.version_info[:3])))

运行:

uv run example.py
uv run --python 3.10 example.py

运行 GUI 脚本

在 Windows 上,.pyw 脚本会通过 pythonw 运行:

from tkinter import Tk, ttkroot = Tk()
root.title("uv")
frm = ttk.Frame(root, padding=10)
frm.grid()
ttk.Label(frm, text="Hello World").grid(column=0, row=0)
root.mainloop()

带依赖的 GUI 示例:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QGridLayoutapp = QApplication(sys.argv)
widget = QWidget()
grid = QGridLayout()label = QLabel("Hello World!")
grid.addWidget(label)widget.setLayout(grid)
widget.setGeometry(100, 100, 200, 50)
widget.setWindowTitle("uv")
widget.show()
sys.exit(app.exec_())

uv运行工具

许多 Python 包会提供可用作工具的应用程序。uv 对此提供了专门支持,使得调用和安装这些工具更加便捷。

运行工具

uvx 命令可以调用工具,而无需先安装它。

例如,要运行 ruff

uvx ruff

💡 注意
这实际上等价于:

uv tool run ruff

uvx 是为了方便而提供的别名。

你可以在工具名称后添加参数:

uvx pycowsay hello from uv

使用 uvx 运行工具时,会将其安装在临时的、隔离的环境中。

💡 注意
如果你在一个项目中运行工具,而该工具要求你的项目已安装(例如使用 pytestmypy),请使用 uv run 而非 uvx。否则,该工具会在一个与项目隔离的虚拟环境中运行。
如果你的项目是扁平结构(例如未使用 src 目录),那么项目无需安装,uvx 就可以正常使用。在这种情况下,只有当你希望将工具版本固定在项目依赖中时,uv run 才更有意义。

包名与命令名不同的情况

当你运行 uvx ruff 时,uv 实际安装的是 ruff 包,该包提供了 ruff 命令。但有时包名和命令名不同。

你可以使用 --from 参数指定包名,例如:

uvx --from httpie http

指定版本运行工具

你可以使用 命令@<版本> 的形式运行特定版本的工具:

uvx ruff@0.3.0 check

运行最新版本:

uvx ruff@latest check

--from 同样支持版本指定:

uvx --from 'ruff==0.3.0' ruff check

或指定版本范围:

uvx --from 'ruff>0.2.0,<0.3.0' ruff check

⚠️ 注意:@ 语法只支持精确版本。

请求 extras(附加功能)

使用 --from 可以带上 extras:

uvx --from 'mypy[faster-cache,reports]' mypy --xml-report mypy_report

结合版本也可以:

uvx --from 'mypy[faster-cache,reports]==1.13.0' mypy --xml-report mypy_report

请求不同来源

--from 还支持从其他来源安装工具。

例如,从 Git 仓库:

uvx --from git+https://github.com/httpie/cli httpie

指定分支:

uvx --from git+https://github.com/httpie/cli@master httpie

指定 tag:

uvx --from git+https://github.com/httpie/cli@3.2.4 httpie

指定 commit:

uvx --from git+https://github.com/httpie/cli@2843b87 httpie

使用插件的命令

你也可以添加额外依赖,例如在运行 mkdocs 时附带 mkdocs-material

uvx --with mkdocs-material mkdocs --help

安装工具

如果某个工具经常使用,可以将其安装到持久环境中,并加入 PATH,而不是每次都用 uvx 调用。

💡 提示
uvxuv tool run 的别名。其它涉及工具的命令则需要完整的 uv tool 前缀。

安装 ruff

uv tool install ruff

安装后,其可执行文件会放在 PATH 中的一个 bin 目录里,可以直接运行:

ruff --version

⚠️ 注意:
安装工具不会使其模块在当前环境中可导入。以下命令会失败:

python -c "import ruff"

这种隔离有助于减少工具、脚本和项目依赖之间的冲突。

uvx 不同,uv tool install 操作的是包,会安装该包提供的所有可执行文件。

例如:

uv tool install httpie

会安装 http, https, httpie 等命令。

也可以带版本约束:

uv tool install 'httpie>0.1.0'

也支持从源安装:

uv tool install git+https://github.com/httpie/cli

支持附带额外包:

uv tool install mkdocs --with mkdocs-material
Ruff:极速的Python代码检查工具

这是一个由Rust编写的Python代码检查和格式化工具,致力于比现有的工具(如Flake8、Black)快10到100倍,并且集成了更多功能。无论你是Python开发者,还是开源项目的维护者,Ruff都能带给你惊人的提升。

Ruff 是一个极快的 Python 代码检查器和格式化工具,使用 Rust 语言编写,具备以下亮点:

  • ⚡️ 极速性能:速度比现有工具(如 Flake8 和 Black)快 10 到 100 倍;
  • 🐍 安装便捷:可通过 pip 安装,简单方便;
  • 🛠️ 支持配置:兼容 pyproject.toml 配置文件;
  • 🤝 兼容性强:完全支持 Python 3.13;
  • ⚖️ 功能全面:对等支持 Flake8、isort 和 Black 的功能;
  • 📦 内置缓存:智能缓存机制,避免重复分析未修改的文件;
  • 🔧 自动修复:具备自动修复能力,如删除未使用导入等;
  • 📏 规则丰富:内置 800+ 条规则,支持常用 Flake8 插件(如 flake8-bugbear);
  • ⌨️ 编辑器集成:官方提供 VS Code 等主流编辑器插件;
  • 🌎 Monorepo 友好:支持层次化和级联配置,适配大型项目结构。

Ruff 的目标是在性能上遥遥领先的同时,提供统一、强大且现代化的工具体验。它不仅能够取代 Flake8(及其多个插件)、Black、isort 等工具,而且可以以数十倍甚至上百倍的速度完成相同任务。

主要特点

  • 🚀 极速性能:Ruff 的执行速度远超其他工具,甚至比 Pylint 快上 1000 倍。例如,在 Dagster(一个包含 25 万行代码的模块)上,Ruff 的运行时间仅为 0.4 秒,而 Pylint 则需要 约 2.5 分钟
  • 🌐 广泛的社区支持:Ruff 已被多个知名开源项目采用,如 Apache AirflowFastAPIPandasSciPy 等。
  • ⚙️ 简洁配置:支持通过 pyproject.tomlruff.toml.ruff.toml 文件进行配置,默认配置已涵盖绝大多数常见错误。

Ruff 的安装与使用

  • 使用 pip 安装:

    pip install ruff
    
  • 使用 pipx 安装:

    pipx install ruff
    
  • 使用 uv 工具安装:

    uv tool install ruff@latest   # 全局安装
    uv add --dev ruff             # 添加到项目中
    
  • 使用安装脚本(适用于 macOS 和 Linux):

    curl -LsSf https://astral.sh/ruff/install.sh | sh
    
  • Windows PowerShell 安装:

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

Ruff 的核心功能

  • 🔍 代码检查(Linting):查找代码中的潜在错误并给出修复建议:

    ruff check
    
  • 🎨 代码格式化(Formatting):自动格式化代码,符合 PEP 8 等规范:

    ruff format
    
  • 🛠️ 自动修复:自动修复常见错误(如未使用的导入):

    ruff check --fix
    
  • 🧩 集成支持:支持 VS Code 插件,也可用作 GitHub Action 实现自动化工作流。

Ruff 支持 800+ 条规则,涵盖多个流行 Python 工具的功能,例如:

  • 自动修复:如删除未使用的导入(类似 autoflake);

  • 🔒 安全检查:如检测潜在安全风险(基于 flake8-bandit);

  • 📈 代码优化:增强类型检查、API 使用建议等;

  • 📋 代码质量检查

    • flake8-bugbear
    • flake8-commas
    • flake8-docstrings
    • flake8-import-conventions
    • flake8-logging
    • 等等

升级工具

升级工具使用:

uv tool upgrade ruff

如果之前安装时使用了版本范围(如 ruff >=0.3,<0.4),则升级会遵循该范围。

若想替换约束,可重新安装:

uv tool install ruff>=0.4

升级所有已安装工具:

uv tool upgrade --all

指定 Python 版本

默认情况下,uv 会使用系统默认的 Python 解释器。

你可以使用 --python 显式指定:

运行工具时:

uvx --python 3.10 ruff

安装工具时:

uv tool install --python 3.10 ruff

升级工具时:

uv tool upgrade --python 3.10 ruff

uv项目管理

uv 支持管理基于 pyproject.toml 的 Python 项目依赖。

你可以使用 uv init 命令创建一个新的 Python 项目:

uv init hello-world
cd hello-world

或者,在当前工作目录中初始化项目:

mkdir hello-world
cd hello-world
uv init

uv 会创建以下文件结构:

.
├── .python-version
├── README.md
├── main.py
└── pyproject.toml

其中,main.py 包含一个简单的 “Hello world” 程序。你可以通过以下命令运行它:

uv run main.py

项目结构说明

一个项目由多个关键部分组成,uv 会在首次运行如 uv runuv syncuv lock 等命令时创建虚拟环境和 uv.lock 文件。

完整的结构如下所示:

.
├── .venv
│   ├── bin
│   ├── lib
│   └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock
pyproject.toml

该文件包含项目的元数据:

[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []

你可以在这个文件中指定依赖项,也可以配置描述、许可证等项目信息。它可以手动编辑,也可以通过命令行使用 uv adduv remove 来管理依赖。

此外,也可以通过 [tool.uv] 部分在该文件中设置 uv 的配置选项。

.python-version

该文件指定项目默认使用的 Python 版本,uv 会据此创建虚拟环境。

.venv

这是项目的虚拟环境目录,uv 会将所有依赖安装在此处,确保项目与系统环境隔离。

uv.lock

这是跨平台的锁文件,记录项目的精确依赖版本,用于确保在不同机器上可重复、可一致地安装环境。
pyproject.toml(描述依赖要求)不同,uv.lock 中存储的是实际安装的解析版本

注意:该文件是可读的 TOML 文件,但应由 uv 自动维护,不建议手动编辑

依赖管理

使用 uv add 添加依赖项(会同步更新锁文件和虚拟环境):

uv add requests

你也可以添加特定版本或指定源码地址:

uv add 'requests==2.31.0'
uv add git+https://github.com/psf/requests

requirements.txt 迁移时,可以使用 -r 参数:

uv add -r requirements.txt -c constraints.txt

移除依赖包:

uv remove requests

升级某个依赖包:

uv lock --upgrade-package requests

该命令将尝试将指定包更新为最新兼容版本,同时保持其他依赖不变。

运行命令

uv run 可在项目虚拟环境中执行任意脚本或命令。

每次运行前,uv 会自动验证 lockfile 是否与 pyproject.toml 同步,并保持环境一致,无需手动干预,确保你始终运行在一致的锁定环境中。

例如,使用 flask:

uv add flask
uv run -- flask run -p 3000

运行脚本:

# example.py
import flask
print("hello world")
uv run example.py

也可以手动同步环境并激活虚拟环境后再运行命令:

macOS / Linuxuv sync
source .venv/bin/activate
flask run -p 3000
python example.pyWindowsuv sync
.venv\Scripts\activate
flask run -p 3000
python example.py

注意:若未使用 uv run,必须先激活虚拟环境,不同操作系统和 shell 的激活方式不同。

构建发行包

使用 uv build 可构建源码包和 wheel 包,构建产物将默认保存在 dist/ 目录:

uv build
ls dist/

uv构建和发布包

uv 支持通过 uv build 将 Python 项目打包为源码分发包(source distribution)和二进制分发包(wheel),并通过 uv publish 上传到包注册中心(如 PyPI)。

在发布项目之前,你需要确保项目已经准备好进行分发打包。

如果你的 pyproject.toml 中没有定义 [build-system],那么 uv 默认不会为你构建项目。这通常意味着项目尚未准备好进行分发。

注意:

如果你有不希望发布的内部包,可以将其标记为私有:

[project]
classifiers = ["Private :: Do Not Upload"]

该设置会让 PyPI 拒绝你上传的包,但不会影响其他注册中心的安全或隐私设置。

官方还建议使用每个项目专属的 token。没有匹配该项目的 PyPI token,包就不会被意外发布。

构建你的包

使用以下命令构建包:

uv build

默认情况下,uv build 会构建当前目录下的项目,并将构建产物放入 dist/ 子目录中。

你也可以指定目录或包进行构建:

uv build <SRC>                 # 构建指定目录下的包
uv build --package <PACKAGE>  # 构建当前工作区中的指定包

提示:
默认情况下,uv build 会在解析构建依赖时使用 pyproject.toml[tool.uv.sources] 的配置项。
为了确保在禁用 tool.uv.sources(如使用 pypa/build 等其他构建工具)时依然能正确构建包,建议发布前使用:

uv build --no-sources

发布你的包

使用以下命令将包发布到注册中心:

uv publish

你可以通过命令行或环境变量设置发布凭证:

  • 使用 --tokenUV_PUBLISH_TOKEN
  • 或使用 --username / UV_PUBLISH_USERNAME--password / UV_PUBLISH_PASSWORD

如果你从 GitHub Actions 发布到 PyPI,则无需设置凭证,只需将其添加为 受信任的发布者 即可。

注意:

PyPI 现在不再支持使用用户名和密码发布包,你必须使用 token。使用 token 相当于设置:

--username __token__
--password <your-token>

如果你使用自定义的索引地址(例如 TestPyPI),需在 pyproject.toml 中添加如下配置,并使用 --index 指定:

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true

例如:

uv publish --index testpypi

注意:

使用 uv publish --index <name> 时必须存在 pyproject.toml 文件,也就是说 CI 中发布任务必须包含项目代码 checkout 步骤。

虽然 uv publish 会自动重试失败的上传,但发布过程中可能仍会出现部分文件已上传、部分失败的情况。

对于 PyPI,你可以直接重复执行相同命令,重复文件会被忽略。
对于 其他注册中心,使用 --check-url <index url> 指定检查 URL(即索引地址而非发布地址)。uv 会跳过重复上传并能处理并发上传时的冲突。

注意:检查时,已上传文件必须与之前完全一致,否则会报错(避免同版本包的源码与 wheel 不一致)。

安装测试

可以使用以下命令测试包是否能被成功安装和导入:

uv run --with <PACKAGE> --no-project -- python -c "import <PACKAGE>"

--no-project 标志可避免从当前目录中安装本地项目。

提示:

如果你刚刚安装了该包,为了避免使用缓存版本,可添加:

--refresh-package <PACKAGE>

总结

uv 的设计初衷是为了解决传统 Python 包管理工具在性能和功能整合方面的不足。它特别适用于以下场景:(CSDN博客)

  1. 大型项目或团队协作:在需要管理复杂依赖关系和多个开发环境的项目中,uv 的统一管理和快速安装特性可以显著提高效率。(CSDN博客)

  2. 频繁构建和部署的项目:对于需要频繁构建和部署的项目,uv 的快速依赖解析和安装能力可以节省大量时间。(CSDN博客)

  3. 需要严格依赖锁定的项目:uv 提供了跨平台的锁定文件(uv.lock),确保在不同环境中安装一致的依赖版本,提升项目的可重复性和稳定性。(CSDN博客)

  4. 希望简化工具链的开发者:uv 集成了 pip、virtualenv、pip-tools 等工具的功能,减少了工具之间的切换,提高了开发效率。

尽管 uv 在性能和功能整合方面表现出色,但对于追求开发自由度的个人开发者来说,可能会感受到以下限制:

  • 自动化程度高:uv 自动管理虚拟环境和依赖,可能会让习惯手动配置的开发者感到不适应。

  • 依赖 pyproject.toml:uv 主要依赖 pyproject.toml 进行配置,对于习惯使用 requirements.txt 的开发者来说,可能需要调整使用习惯。

  • 学习成本:虽然 uv 兼容 pip 的命令,但要充分利用其全部功能,仍需花时间学习其新的命令和工作流程。

综上,对于uv的强大我是持肯定态度的,他提供了比pip更快速的包安装和包管理,提供了比venv,venvwrapper等更方便的虚拟环境管理,更将pip-tools、pipx、poetry、pyenv、virtualenv这些乱七八糟的工具统一化!

uv的确是个好工具,但对于项目构建,我目前还是习惯freeze一个requirement.txt然后在Dockerfile里面写:

RUN pip install -r requirement.txtCMD ["python","main.py"]

然后使用helm去部署我的大型服务。其次对于脚本文件执行,能用python script.py为什么还要使用uv run script.py,uv是一个辅助工具并不是一个rust写的python解释器。

个人还是倾向于自由化的开发…^_^

相关文章:

高效Python开发:uv包管理器全面解析

目录 uv简介亮点与 pip、pip-tools、pipx、poetry、pyenv、virtualenv 对比 安装uv快速开始uv安装pythonuv运行脚本运行无依赖的脚本运行有依赖的脚本创建带元数据的 Python 脚本使用 shebang 创建可执行文件使用其他package indexes锁定依赖提高可复现性指定不同的 Python 版本…...

PyTorch 线性回归模型构建与神经网络基础要点解析

笔记 1 PyTorch构建线性回归模型 1.1 创建数据集 import torch from torch.utils.data import TensorDataset # 创建x和y张量数据集对象 from torch.utils.data import DataLoader # 创建数据集加载器 import torch.nn as nn # 损失函数和回归函数 from torch.optim impo…...

PyTorch API 2 - 混合精度、微分、cpu、cuda、可视化

文章目录 自动混合精度包 - torch.amp自动类型转换参数说明 梯度缩放自动转换操作符参考操作符适用性CUDA 操作特定行为可自动转换为 float16 的 CUDA 运算可自动转换为 float32 的 CUDA 运算提升至最宽输入类型的 CUDA 操作优先使用 binary_cross_entropy_with_logits 而非 bi…...

window 显示驱动开发-AGP 类型伸缩空间段

AGP 类型的伸缩空间段类似于线性光圈空间段。 但是&#xff0c;内核模式显示微型端口驱动程序&#xff08;KMD&#xff09;不会通过 AGP 类型的伸缩空间段公开 dxgkDdiBuildPagingBuffer 回调函数的DXGK_OPERATION_MAP_APERTURE_SEGMENT和DXGK_OPERATION_UNMAP_APERTURE_SEGMEN…...

异地多活单元化架构下的微服务体系

治理服务间的跨IDC调用&#xff0c;而数据库层面还是要跨IDC 服务注册中心拆开、 金融要求&#xff0c;距离太远&#xff0c;异地备库&#xff0c;如果延迟没读到数据就可能有资损&#xff0c;IDC3平时不能用&#xff0c;IDC1挂了还是有数据同步问题&#xff0c;IDC3日常维护…...

LinkedList源码解析

添加元素方法 add方法详解 /*E:创建LinkedList对象时泛型中设置好的数据类型e: 传递的参数boolean&#xff1a; 添加成功即为true&#xff0c;添加失败即为false */public boolean add(E e) {// 在链表最后一个结点后面插入新结点(根据待插入元素封装的结点) linkLast(e);/…...

Android 13 使能user版本进recovery

在 debug 版本上&#xff0c;可以在关机状态下&#xff0c;同时按 电源键 和 音量加键 进 recovery 。 user 版本上不行。 参考 使用 build 变体 debug 版本和 user 版本的差别之一就是 ro.debuggable 属性不同。 顺着这个思路追踪&#xff0c;找到 bootable/recovery/reco…...

Docker 使用总结及完整示例介绍

以下是一份详细的 Docker 使用总结及完整示例介绍&#xff0c;涵盖基础概念、常用命令和实际应用场景&#xff1a; 一、Docker 核心概念 镜像 (Image) 只读模板&#xff0c;用于创建容器。例如&#xff1a;ubuntu:22.04, nginx:alpine 容器 (Container) 镜像的运行实例&#x…...

[Linux]多线程(二)原生线程库---pthread库的使用

[Linux]多线程&#xff08;二&#xff09;原生线程库—pthread库的使用 水墨不写bug 文章目录 一、pthread原生线程库的使用1. pthread_create全面的看待线程返回值2. pthread_join3. pthread_exit对比理解线程退出&#xff1f;1、return退出2、调用C库函数exit()退出3、调用pt…...

1.短信登录

1.0 问题记录 1.0.1 redis 重复 token 问题 每次用户登录时&#xff0c;后端会创建一个新的 token 并存入 Redis&#xff0c;但之前登录的 token 还没有过期。这可能会导致以下问题&#xff1a; 1. Redis 中存在大量未过期但实际已不使用的 token2. 同一用户可能有多个有效 …...

Vue v-model 深度解析:实现原理与高级用法

一、v-model 的本质 v-model 是 Vue 中最常用的指令之一&#xff0c;它本质上是一个语法糖&#xff0c;用于在表单元素和自定义组件上实现双向数据绑定。在 Vue 2.x 和 Vue 3.x 中&#xff0c;v-model 的实现机制有所不同&#xff0c;但核心思想都是简化数据绑定的过程。 1.1…...

Java动态代理超详细解析:三步+内存图(堆栈分析)

0.本文适合谁&#xff1f; 1.刚学Java动态代理&#xff0c;被Proxy、InvocationHandler绕晕的同学 2.想彻底搞懂代理对象在内存中如何工作的开发者 3.需要面试突击动态代理知识的求职 1.动态代理的本质&#xff08;三步走&#xff09; 动态代理的核心可以拆解为三个关键…...

MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用

在数据库开发中&#xff0c;我们经常需要重复执行复杂的多表查询&#xff0c;或是需要限制用户只能访问特定数据。这时候&#xff0c;MySQL 的 视图&#xff08;View&#xff09;就能大显身手。作为一种 “虚拟表”&#xff0c;视图不存储实际数据&#xff0c;却能基于 SQL 查询…...

Linux 下 Java 部署环境搭建与项目部署详细步骤

目录 1. 软件环境准备 1.1 更新软件包库 1.2 安装 OpenJDK 1.3 安装 MySQL 数据库 2. 部署 Web 项目到 Linux 2.1 数据准备和配置 2.2 Maven 打包项目 2.3 上传 Jar 包至云服务器 2.4 启动应用程序 2.5 配置防火墙与端口开放 2.6 访问与验证项目 2.7 进程管理与问题…...

养生:为健康生活添彩

养生是对生活的热爱&#xff0c;是为健康生活注入活力的良方。从饮食、运动到生活习惯&#xff0c;每一个方面都能让我们离健康更近一步。以下是一些实用的养生之道&#xff0c;助你开启健康生活的新旅程。 饮食养生&#xff1a;营养均衡&#xff0c;健康基石 合理的饮食是养…...

Hypermesh四面体网格划分(二)

我们找到“3D-tetramesh”的命令&#xff0c;然后选择“tetra mesh”&#xff0c;以下就是这种四面体网格生成方式的面板。见图1所示。 图1 tetra mesh面板 下面以一个法兰盘的四面体网格划分作为案例&#xff0c;具体介绍基于表面网格的四面体网格生成方式。 首先导入几何模型…...

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMargins)

文章目录 类概述方法总览使用注意事项简单示例 类概述 QMargins 类用于描述矩形四周边框尺寸&#xff0c;包含左(left)、上(top)、右(right)、下(bottom)四个整型边距值。当所有边距均为0时&#xff0c;isNull() 返回 True。该类支持流式操作和比较运算。 版本信息&#xff1…...

python笔记和练习----少儿编程课程【阶段二(二)】

第13课 列表元素的查找和删除 知识点 1、删除第一个出现的指定元素 列表.remove&#xff08;元素&#xff09; 2.删除末尾元素 列表.pop() 3、清空列表的所有数据 列表.clear() 4、删除指定位置的元素 del 列表[索引] del 关键字本质上是用来 将一个变量从内存中删除…...

Excel里面怎样批量去掉字串包含的标点符号

在Excel中批量去除字符串中的标点符号&#xff0c;可以通过以下几种方法实现&#xff1a; 方法1&#xff1a;使用SUBSTITUTE函数嵌套 适用于已知的特定标点符号&#xff08;需手动列出&#xff09;&#xff1a; SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, ",&quo…...

Linux 信号终篇(总结)

前文&#xff1a;本文是对信号从产生到被处理的过程中的概念和原理的总结&#xff0c;如果想了解具体实现&#xff0c;请查看前两篇博客&#xff1a;Linux 信号-CSDN博客、Linux 信号&#xff08;下篇&#xff09;-CSDN博客 一、信号的产生 1.1 信号产生的五种条件 ①键盘组…...

Springboot之会话技术

会话:用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求是否来自于同一浏览器&#xff…...

数字信号处理|| 离散系统的冲激响应和阶跃响应

一、实验目的 &#xff08;1&#xff09;加深对离散线性移不变&#xff08;LSI&#xff09;系统基本理论的理解&#xff0c;明确差分方程与系统函数之间的关系。 &#xff08;2&#xff09;初步了解用MATLAB语言进行离散时间系统研究的基本方法。 &#xff08;3&#xff09;掌…...

JVM 数据区域

JVM 数据区域 1 程序计数器 程序计数器&#xff08;Program Counter Register&#xff09; &#xff0c;也有称作为PC寄存器。在汇编语言中&#xff0c;程序计数器是指CPU中的寄存器&#xff0c;它保存的是程序当前执行的指令的地址&#xff0c;当CPU需要执行指令时&#xff0…...

MRNet 数据集分享

MRNet 数据集分享 包括了2001年1月1日至2012年12月31日期间在斯坦福大学医学中心进行的1370次膝关节MRI检查&#xff08;平均年龄38.0岁&#xff1b;569例&#xff08;41.5%&#xff09;女性患者&#xff09;。该数据集包含 1,104 (80.6%) 次异常检查&#xff0c;其中319 (23.…...

MCP项目实例 - client sever交互

1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作&#xff0c;实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询&#xff1a;用户输入查询请求。 提取关键词&#xff1a;从用户查询中…...

uniapp|实现商品分类与列表数据联动,左侧菜单右侧商品列表(瀑布流、高度自动计算、多端兼容)

基于uniapp实现商品分类与商品列表数据联动,提供完整代码与常见问题解决方案,通过实战案例演示,快速构建商品列表交互,开箱即用。 目录 前言应用场景介绍页面布局与样式整体结构分析左侧菜单样式右侧商品列表样式核心功能实现数据绑定与渲染点击事件交互性能优化图片懒加载…...

1.2.2.1.4 数据安全发展技术发展历程:高级公钥加密方案——同态加密

引言 在密码学领域&#xff0c;有一种技术被图灵奖得主、著名密码学家Oded Goldreich誉为"密码学圣杯"&#xff0c;那就是全同态加密&#xff08;Fully Homomorphic Encryption&#xff09;。今天我们就来聊聊这个神秘而强大的加密方案是如何从1978年的概念提出&…...

dify插件接入fastmcp示例

文章目录 1. 使用python完成mcp服务1.1 准备环境&#xff08;python安装fastmcp&#xff09;1.2 mcp服务端示例代码1.3 启动mcp服务端 2. dify接入2.1 安装MCP SSE和 Agent 策略&#xff08;支持 MCP 工具&#xff09; 插件2.2 dify agent插件配置mcp:2.3 mcp服务配置&#xff…...

从文本到语义:BERT、Faiss 与 Elasticsearch 的协同实践

从文本到语义&#xff1a;BERT、Faiss 与 Elasticsearch 的协同实践 在自然语言处理&#xff08;NLP&#xff09;的技术栈中&#xff0c;BERT、Faiss 和 Elasticsearch 是三个具有代表性的工具&#xff0c;它们各自发挥着独特的作用。BERT 负责文本的语义理解&#xff0c;Fais…...

安装或更新 CUDA Toolkit - Ubuntu - RuntimeError

1、问题 执行 pip install flash-attn --no-build-isolation 时&#xff0c;出错&#xff1a; RuntimeError: FlashAttention is only supported on CUDA 11.7 and above. Note: make sure nvcc has a torch.__version__ 2.4.0cu12 执行 nvcc --version 或 nvcc -V&…...

二、Hive安装部署详细过程

Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施。它提供了类似 SQL 的查询语言 (称为 HiveQL 或 HQL)&#xff0c;让熟悉 SQL 的开发人员和分析师能够轻松地查询和分析存储在 HDFS 或其他兼容存储系统中的大规模数据集。把结构化或半结构化的数据映射成表&#xff0c…...

常见的降维算法

作业&#xff1a; 自由作业&#xff1a;探索下什么时候用到降维&#xff1f;降维的主要应用&#xff1f;或者让ai给你出题&#xff0c;群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。 一、什么时候用到降维&#xff1f; 降维通常…...

Spring Boot 中如何启用 MongoDB 事务

在 Spring Boot 中启用和使用 MongoDB 事务主要依赖于以下几个方面&#xff1a; MongoDB 服务器和部署模式&#xff1a; MongoDB 版本 4.0 或更高版本才支持副本集 (Replica Set) 上的多文档 ACID 事务。MongoDB 版本 4.2 或更高版本才支持分片集群 (Sharded Cluster) 上的多文…...

2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业​​认证

2025年5月5日前 免费考试了&#xff01; Oracle AI 矢量搜索专业​​认证 立刻预约吧 文章目录 2025年5月5日前 免费考试了&#xff01; Oracle AI 矢量搜索专业​​认证立刻预约吧&#x1f50d; 探索 AI 向量搜索的强大功能&#xff01;&#x1f3af; 学习路径目标&#x1f6e…...

初等数论--莫比乌斯反演

1. 定义 假设 f ( n ) g ( n ) f(n)\ g(n) f(n) g(n)是定义在正整数上的两个函数 &#xff0c;且 f ( n ) ∑ d ∣ n g ( d ) ∑ d ∣ n g ( n d ) f(n)\sum_{d|n}g(d)\sum_{d|n}g(\frac{n}{d}) f(n)d∣n∑​g(d)d∣n∑​g(dn​) 那么 g ( n ) ∑ d ∣ n μ ( d ) f ( n d…...

访问者模式(Visitor Pattern)详解

文章目录 1. 访问者模式概述1.1 定义1.2 基本思想2. 访问者模式的结构3. 访问者模式的UML类图4. 访问者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 访问者模式处理复杂对象层次结构5.3 访问者模式在文件系统中的应用6. 访问者模式的优缺点6.1 优点6.2 缺点7. 访问者模式…...

C++ 关联式容器:map,multimap,set,multiset

目录 引言 一、关联式容器概述 1.1 与序列式容器的区别 1.2 底层结构 二、set容器详解set介绍 2.1 set的特性 2.2 set的模板参数 2.3 set的常用接口 2.4 set使用示例 三、map容器详解map介绍 3.1 map的特性 3.2 map的模板参数 3.3 map的常用接口 3.4 map使用示例 …...

Discriminative and domain invariant subspace alignment for visual tasks

用于视觉任务的判别性和域不变子空间对齐 作者&#xff1a;Samaneh Rezaei&#xff0c;Jafar Tahmoresnezhad 文章于2018年12月4日收到&#xff0c;2019年5月24日被接受&#xff0c;2019年6月3日在线发表于Iran Journal of Computer Science期刊&#xff0c;DOI: 10.1007/s42…...

comfyui 如何优雅的从Hugging Face 下载模型,文件夹

如下图所示 使用git 下载整个仓库然后把需要的放到对应的位置...

【C++】 —— 笔试刷题day_27

一、kotori和气球 题目解析 这道题&#xff0c;有n中气球&#xff0c;每一种气球有无数多个&#xff1b;现在我们需要将这些气球摆成一排&#xff0c;但是&#xff0c;如果相邻的气球是相同的就会发生爆炸&#xff08;也就是说&#xff0c;相同的气球相邻的摆法是不合法的&…...

2025年“深圳杯”数学建模挑战赛C题国奖大佬万字思路助攻

完整版1.5万字论文思路和Python代码下载&#xff1a;https://www.jdmm.cc/file/2712073/ 引言 本题目旨在分析分布式能源 (Distributed Generation, DG) 接入配电网系统后带来的风险。核心风险评估公式为&#xff1a; R P_{loss} \times C_{loss} P_{over} \times C_{over}…...

大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调

文章目录 一、简介二、如何安装2.1 安装2.2 校验 三、开始使用3.1 可视化界面3.2 使用命令行3.2.1 模型微调训练3.2.2 模型合并3.2.3 模型推理3.2.4 模型评估 四、高级功能4.1 分布训练4.2 DeepSpeed4.2.1 单机多卡4.2.2 多机多卡 五、日志分析 一、简介 LLaMA-Factory 是一个…...

游戏引擎学习第268天:合并调试链表与分组

回顾并为今天的内容设定基调 我们正在直播中开发完整的游戏&#xff0c;目前调试系统的开发已接近尾声。这个调试系统的构建过程经历了较长的时间&#xff0c;中间还暂停过一段时间去做硬件渲染路径的开发&#xff0c;并在已有的软件渲染路径基础上进行了扩展。后来我们又回到…...

【Linux系统编程】进程属性--标识符

1.PID 1.1什么是PID&#xff1f; 区分进程的唯一性 1.2如何查看进程&#xff1f; ps ajx | head -1 ; ps ajx | grep myproc 或者ps ajx | head -1 && ps ajx | grep myproc | grep -v grep&#xff08;过滤掉grep本身这个进程&#xff09; 1.3进程有哪两种&#…...

React文档-State数据扁平化

1、选择 State 结构 思考一下&#xff1a; 如果渲染列表&#xff0c; 并更新列表数据在下面展示~ state 过去常常是这样复制的&#xff1a; items [{ id: 0, title: pretzels}, ...]selectedItem {id: 0, title: pretzels} 改了之后是这样的&#xff1a;items [{ id: 0, …...

kotlin flow防抖

一 防抖设计 ✅ 1. 点击事件的防抖&#xff1a;用于防止频繁触发逻辑 &#x1f3af; 适用场景&#xff1a; 用户连续快速点击按钮&#xff0c;可能会导致多次发送网络请求、CAN 指令或反复切换状态等副作用。所以我们通常在点击函数中处理防抖&#xff0c;例如&#xff1a; …...

基础语法(二)

Mysql基础语法&#xff08;二&#xff09; Mysql基础语法&#xff08;二&#xff09;主要介绍Mysql中稍微进阶一点的内容&#xff0c;会稍微有一些难度&#xff08;博主个人认为&#xff09;。学习完基础语法&#xff08;一&#xff09;和基础语法&#xff08;二&#xff09;之…...

FreeTex v0.2.0:功能升级/支持Mac

概述 FreeTex在发布之后&#xff0c;迎来很多反馈&#xff0c;本次根据主流的反馈建议&#xff0c;又进行一轮小升级&#xff0c;正式发布v0.2.0版本&#xff0c;主要升级点如下&#xff1a; 新增识别结果预览显示 Latex识别结果支持格式化输出 软件体积更小&#xff0c;并移…...

MacOS 用brew 安装、配置、启动Redis

MacOS 用brew 安装、配置、启动Redis 一、安装 brew install redis 二、启动 brew services start redis 三、用命令行检测 set name tom get name...

大型旋转机械信号分解算法模块

大型旋转机械信号分解算法模块&#xff0c;作为信号处理算法工具箱的主要功能模块&#xff0c;可应用于各类关键机械部件&#xff08;轴承、齿轮、转子、联轴器等&#xff09;的信号分析、故障探测、趋势劣化评估等&#xff0c;采用全Python语言&#xff0c;以B/S模式&#xff…...