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

【基础】Python包管理工具uv使用全教程

一、uv简介

uv 是由 Astral(前身为 Basis)团队开发的 Python 包安装器和解析器,完全使用 Rust 语言编写。与传统 Python 工具不同,uv 将多个工具的功能整合到一个高性能的解决方案中,旨在提供更现代、更高效的 Python 开发体验。

底层技术原理

uv 之所以能够实现显著的性能提升,主要基于几个关键技术:

  1. Rust 实现:利用 Rust 语言的内存安全和高性能特性,避免了 Python 自身的解释开销
  2. 并行处理:在依赖解析和包下载安装过程中大量使用并行处理
  3. 优化的缓存策略:智能缓存机制减少重复下载和编译
  4. 零拷贝设计:减少内存使用和系统调用
  5. 编译优化:对于需要编译的包,采用更高效的编译策略

uv性能 

uv一个极快的 Python 包和项目管理器,用 Rust 编写,有多快呢,看图说话:

突出特点 

​🚀 一款工具,可替代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等,并更多。
⚡️ 比 pip 快 10-100 倍 。
🗂️ 提供全面的项目管理 ,具有 通用的锁文件 。
❇️ 运行脚本 ,支持 内联依赖元数据 .
🐍 安装和管理 Python 版本。
🛠️ 运行和安装 发布为 Python 包的工具。
🔩 包含一个 与 pip 兼容的接口 ,以熟悉的 CLI 提升性能。
🏢 支持 Cargo 风格的工作区 ,适用于可扩展的项目。
💾 磁盘空间高效,具有全局缓存以进行依赖项去重。
⏬ 无需 Rust 或 Python,通过 curl 或 pip 即可安装。
🖥️ 支持 macOS、Linux 和 Windows。

二、安装

不同环境安装

根据你的操作系统,选择安装方式,Windows安装,需要powershell。

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"# With pip.
pip install uv#如果你支持pipx,也可以安装到隔离环境中
pipx install uv

执行界面:

 注:dos窗口重新打开,才能开到更新的环境变量,才能使用新安装的uv工具。

 另:如果需要更多安装方式或者卸载,见:https://docs.astral.sh/uv/getting-started/installation/#pypi

查看版本

要检查已安装的版本:

uv version

以下内容也有效:

  • uv --version      # Same output as `uv version`
  • uv -V             # Will not include the build commit and date
  • uv pip --version  # Can be used with a subcommand

三、uv功能

uv 为 Python 开发提供必要功能——从安装 Python 和编写简单的脚本到处理支持多个 Python 版本和平台的复杂项目。

3.1 Python 版本管理

Python 版本由 Python 解释器(即 python 可执行文件)、标准库和其他支持文件组成。安装和管理 Python 本身。

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

命令示例:

uv python list  # 查看uv支持的python版本uv python install 3.10 3.11 3.12 # 安装指定版本的Pythonuv python find 3.10  # 查找特定版本的pythonuv python uninstall 3.10  # 卸载特定版本的pythonuv run --python 3.12 python  # 指定版本运行python交互界面
uv run -p 3.12 python  # 指定版本运行python交互界面
uv run --python pypy@3.8 python
uv run -p pypy@3.8 pythonuv python pin 3.11  # 在当前目录中使用特定的 Python 版本

3.2 运行脚本

运行无依赖项的脚本

执行独立的 Python 脚本,例如 example.py。

example.py

print("Hello world")

 执行它:

 如果您的脚本依赖于 standard 库中的模块,也不需要安装依赖,执行命令是一样的。

 如果需要向脚本提供参数,如:

example.py

import sys print(" ".join(sys.argv[1:]))

 执行效果:

此外,您可以直接从 stdin 读取您的脚本:

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

注意,如果你在一个项目中使用 uv run,即一个带有 pyproject.toml 的目录,它会在运行脚本之前进行安装。如果您的脚本不依赖于项目,可以使用 --no-project 标志跳过此步骤:

# Note: the `--no-project` flag must be provided _before_ the script name.
uv run --no-project example.py

运行有依赖项的脚本

当您的脚本需要其他软件包时,必须将它们安装到 脚本运行环境中。可以使用 pyproject.toml管理依赖,uv会在执行脚步前进行安装。同时, UV 也支持每次调用请求依赖项。

例如,以下脚本需要 rich

example.py

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

 使用 --with 选项请求依赖项:

$ uv run --with rich example.py

执行效果:

如果需要特定版本,可以将 constraints 添加到请求的依赖项中:

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

可以通过使用 --with 选项重复来请求多个依赖项。

运动带有Python内置依赖 

如果python脚本,在脚本本身中声明脚本的依赖项,用--script参数执行。

以下是包含嵌入元数据的脚本示例:

# /// script
# requires-python = ">=3.11"
# 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 init --script 使用内联元数据初始化脚本, 它允许选择 Python 版本和定义依赖项:

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

 UV 支持为您添加和更新内联脚本元数据。使用 uv add --script 声明脚本的依赖项: 

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

 这将在脚本顶部添加一个脚本部分,使用 TOML 声明依赖项:

example.py

# /// 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:运行脚本。
  • uv add --script:向脚本添加依赖。
  • uv remove --script: 从脚本中移除依赖

3.3 虚拟环境管理

创建虚拟环境

UV 支持创建虚拟环境,例如,在 .venv 中创建虚拟环境:

uv venv

可以指定特定的名称或路径,例如,在 my-name 处创建虚拟环境:

uv venv my-name

可以请求 Python 版本,例如,使用 Python 3.11 创建虚拟环境:

uv venv --python 3.11

 使用虚拟环境

使用默认虚拟环境名称时,uv 将在后续调用期间自动查找并使用虚拟环境。

uv venv# Install a package in the new virtual environment
uv pip install ruff

 可以 “激活” 虚拟环境以使其软件包可用: 

#Windows
.venv(环境所在目录,就是环境名)\Scripts\activate#macOS and Linux
#终端类型:fish,执行
source .venv/bin/activate
#终端类型:csh/tcsh,执行
source .venv/bin/activate.csh
#终端类型:Nushell,执行
use .venv\Scripts\activate.nu

 退出环境

要退出虚拟环境,请使用 deactivate 命令:

deactivate

 使用任意 Python 环境

由于 uv 不依赖于 Python,因此它可以安装到自己的虚拟环境中。例如,设置 VIRTUAL_ENV=/path/to/venv 将导致 uv 安装到 /path/to/venv 中,无论之前 uv 安装在何处。请注意,如果 VIRTUAL_ENV 设置为 不是符合 PEP 405 的虚拟环境,它将被忽略。

UV 还可以安装到任意甚至非虚拟环境中,只需向 uv pip sync 或 uv pip install 提供 --python 参数即可。例如 uv pip install --python /path/to/python 将安装到链接到 /path/to/python 解释器。

为方便起见,uv pip install --system 将安装到系统 Python 环境中。用 --system 大致等同于 uv pip install --python $(which python) 。

uv 本身不依赖于 Python,但它确实需要找到一个 Python 环境来 (1) 将依赖项安装到环境中,以及 (2) 构建源代码分发。

发现 Python 环境

当运行改变环境的命令(如 uv pip sync 或 uv pip install)时,uv 将按以下顺序搜索虚拟环境:

  • 基于 VIRTUAL_ENV 环境变量的已激活虚拟环境。
  • 基于 CONDA_PREFIX 环境变量的已激活 Conda 环境。
  • 当前目录或最近的父目录中 .venv 的虚拟环境。
  • 如果未找到虚拟环境,uv 将提示用户通过 uv venv 在当前目录中创建一个虚拟环境。 

3.4 兼容pip

UV 提供了常见 pippip-tools 和 virtualenv 命令的直接替代品。这些命令直接与虚拟环境一起使用,而 uv 的主界面则自动管理虚拟环境。uv pip 向尚未准备好从 pip 、 pip-tools 过渡的高级用户和项目展示了 uv 的速度和功能。

在环境中管理包(替换 pip 和 pipdeptree):

  • 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:将需求编译到锁文件中。
  • uv pip sync: 使用锁文件同步环境。

重要提示:这些命令和原pip命令不完全一致,具体使用时,需进一步阅读手册。

3.5 包管理

安装软件包

要将软件包安装到虚拟环境中,例如 Flask:

uv pip install flask

要安装启用了可选依赖项的包,例如,带有 “dotenv” extra 的 Flask:

uv pip install "flask[dotenv]"

要安装多个软件包,例如 Flask 和 Ruff:

uv pip install flask ruff

要安装带有约束的包,例如 Ruff v0.2.0 或更高版本:

uv pip install 'ruff>=0.2.0'

要从磁盘安装软件包:

uv pip install "ruff @ ./projects/ruff"

要从 GitHub 安装包:

uv pip install "git+https://github.com/astral-sh/ruff"

要在特定引用处从 GitHub 安装包,请执行以下作:

# Install a tag
uv pip install "git+https://github.com/astral-sh/ruff@v0.2.0"# Install a commit
uv pip install "git+https://github.com/astral-sh/ruff@1fadefa67b26508cc59cf38e6130bde2243c929d"# Install a branch
uv pip install "git+https://github.com/astral-sh/ruff@main"

从文件安装软件

可以从标准文件格式一次安装多个软件包。

从 requirements.txt 文件安装:

uv pip install -r requirements.txt

从 pyproject.toml 文件安装:

uv pip install -r pyproject.toml

卸载软件包

要卸载包,例如 Flask:

uv pip uninstall flask

要卸载多个软件包,例如 Flask 和 Ruff:

uv pip uninstall flask ruff

3.6 项目

uv 支持管理 Python 项目,这些项目在 pyproject.toml 文件中定义它们的依赖项。

创建新项目

您可以使用 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 试试:

uv run main.py

项目结构

项目由几个重要的部分组成,这些部分协同工作并允许 uv 管理您的项目。除了 uv init 创建的文件外,uv 在你第一次执行项目命令,即 uv run, uv sync或uv lock时,会在项目根目录中,创建一个虚拟环境和 uv.lock 文件 。

完整的列表如下所示:

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

pyproject.toml 文件

pyproject.toml 包含有关项目的元数据:

pyproject.toml 文件

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

您将使用此文件指定依赖项,以及有关工程的详细信息,例如其描述或许可证。您可以手动编辑此文件,也可以使用 uv add 和 UV Remove 从终端管理您的项目。

命令一览表:

  • uv init: 创建新的 Python 项目。
  • uv add: 向项目添加依赖。
  • uv remove: 从项目中移除依赖。
  • uv sync: 将项目的依赖与环境同步。
  • uv lock: 为项目的依赖创建锁文件。
  • uv run:在项目环境中运行命令。
  • uv tree:查看项目的依赖树。
  • uv build:将项目构建为分发存档。
  • uv publish:将项目发布到包索引。

3.7 工具(tool)

UV 包括一个用于与工具交互的功能。可以使用 uv tool run 在不安装的情况下调用工具,uv提供的uvx命令,和uv tool run  这两个命令完全等效。

如果经常使用某个工具,使用 uv tool install 安装,安装后除非卸载该工具,否则不会删除环境。

工作原理

默认情况下,uv 工具目录名为 tools,位于 uv 应用程序目录中,例如 ~/.local/share/uv/tools。

使用uvx/uv tool run 运行工具时,虚拟环境将存储在 uv 缓存目录中,并被视为一次性环境,即,如果运行 uv cache clean,环境将被删除。

使用 uv tool install 安装工具时,将在 uv tools 目录中创建一个虚拟环境。除非卸载该工具,否则不会删除环境。如果手动删除环境,该工具将无法运行。

命令一览表

  • uvx / uv tool run :在临时环境中运行工具。
  • uv tool install :全局安装工具。
  • uv tool uninstall :卸载工具。
  • uv tool list :列出已安装的工具。
  • uv tool update-shell:更新 shell 以包含工具可执行文件。

3.8 构建和发布包

uv 支持通过 uv build 将 Python 包构建到源代码和二进制分发中,并使用 UV publish 将它们上传到注册表。

准备要打包的项目,必须构建 Python 项目才能安装,此过程通常称为 “打包”。Python 项目元数据在 pyproject.toml 文件。

构建包

使用 uv build 构建包:

uv build

默认情况下,uv build 将在当前目录中构建项目,并将构建的工件放在 dist/ 子目录中。

发布包

使用 uv publish 发布包:

uv publish

使用 --token 或 UV_PUBLISH_TOKEN 设置 PyPI 令牌,PyPI 不再支持使用用户名和密码进行发布,而是需要生成令牌。

安装软件包

测试是否可以使用 uv run 安装和导入包:

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

--no-project 标志用于避免从本地项目目录安装软件包。

    3.9 应用

    管理和检查 uv 的状态,例如缓存、存储目录或执行自我更新:

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

    3.10 帮助菜单

    --help 标志可用于查看命令的帮助菜单,例如,对于 uv:

    uv --help

    要查看特定命令的帮助菜单,例如 uv init:

    uv init --help

    使用 --help 标志时,uv 会显示一个精简的帮助菜单。要查看命令的较长帮助菜单,请使用 uv 帮助 :

    uv help

    要查看特定命令的长帮助菜单,例如 uv init:

    uv help init

    当使用较长的帮助菜单时,uv 将尝试使用更少或更多的 “page” 输出,以便它不会一次全部显示。要退出寻呼机,请按 q。

      四、uvx运行时工具

      许多 Python 包都提供了可用作工具的应用程序。UV 具有专门的支持,uvx 命令可以调用工具而不安装,使用 uvx 时,工具会被安装到临时的、隔离的环境中,和uv tool run  这两个命令完全等效。

      例如,要运行 ruff:

      uvx ruff

      这正是等价的:

      uv tool run ruff

      五、官方参考

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

      相关文章:

      【基础】Python包管理工具uv使用全教程

      一、uv简介 uv 是由 Astral&#xff08;前身为 Basis&#xff09;团队开发的 Python 包安装器和解析器&#xff0c;完全使用 Rust 语言编写。与传统 Python 工具不同&#xff0c;uv 将多个工具的功能整合到一个高性能的解决方案中&#xff0c;旨在提供更现代、更高效的 Python…...

      事务(transaction)-上

      事务概述 食物是一个最小的工作单元。在数据库当中&#xff0c;事务表示一件完整的事儿。一个业务的完成可能需要多条DML语句共同配合才能完成&#xff0c;例如转账业务&#xff0c;需要执行两条DML语句&#xff0c;先更新张三账户的余额&#xff0c;再更新李四账户的余额&…...

      Python训练打卡Day17

      无监督算法中的聚类 知识点 聚类的指标聚类常见算法&#xff1a;kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征&#xff0c;可以针对其中几个可以解释的特征进行聚类&#xff0c;得到聚类后的类别&#xff0c;这样后续进行解…...

      【爬虫】码上爬第6题-倚天剑

      堆栈入手&#xff1a; 全部复制的话&#xff0c;注意修改一些必要在地方&#xff1a; 通过s函数来获取请求头的加密参数 通过xxxxoooo来获取解密后的数据 js代码关键点&#xff1a; python代码我推荐使用这个网站&#xff1a; Convert curl commands to code 根据生成的代码…...

      自定义SpringBoot Starter-笔记

      SpringBoot Starter的介绍参考&#xff1a; Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目&#xff0c;结构如下&#xff1a; custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...

      一周学会Pandas2 Python数据处理与分析-Pandas2数据类型转换操作

      锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 提供了灵活的方法来处理数据类型转换&#xff0c;以下是常见操作及代码示例&#xff1a; 1. 查看数据类型 …...

      Java中常见的问题

      1. SSO中的Cookie/Token生成与安全传递 生成Cookie/Token&#xff1a; Cookie&#xff1a;服务器通过Set-Cookie响应头生成&#xff0c;包含用户ID、过期时间等&#xff0c;需设置HttpOnly和Secure属性防止XSS和中间人攻击。Token&#xff08;如JWT&#xff09;&#xff1a;使…...

      【JEECG】BasicTable内嵌Table表格错位

      功能说明&#xff1a; 解决代码生成后&#xff0c;本地内嵌Table表格样式错位。 优化前&#xff1a; 优化后&#xff1a; 解决方法&#xff1a; 对应的List.vue页面增加css样式调整。 <style lang"less" scoped>//内嵌表格margin边距覆盖:deep(.ant-table-…...

      人工智能 计算智能模糊逻辑讲解

      引言 在计算智能&#xff08;Computational Intelligence&#xff09;领域&#xff0c;模糊逻辑&#xff08;Fuzzy Logic&#xff09;作为一种处理不确定性与模糊性信息的数学工具&#xff0c;自 1965 年由洛夫特扎德&#xff08;Lotfi Zadeh&#xff09;提出以来&#xff0c;…...

      基于SSM实现的健身房系统功能实现一

      一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升&#xff0c;健身行业也在迅速扩展。越来越多的人加入到健身行列&#xff0c;健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂&#xff0c;传统的手工或部分自动化的管…...

      spring详解-循环依赖的解决

      Spring循环依赖 重点提示&#xff1a; 本文都快写完了&#xff0c;发现“丈夫” 的英文是husband… 在“②有AOP循环依赖” 改过来了&#xff0c;前面用到的位置太多了就没改。我是说怎么idea的hansband英文下面怎么有波浪线。各位能够理解意思就行&#xff0c;英文拼写不要过…...

      【大模型面试每日一题】Day 10:混合精度训练如何加速大模型训练?可能出现什么问题?如何解决?

      【大模型面试每日一题】Day 10&#xff1a;混合精度训练如何加速大模型训练&#xff1f;可能出现什么问题&#xff1f;如何解决&#xff1f; &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官&#xff1a;混合精度训练如何加速大模型训练&#xff1f;可能出现什么问…...

      [学习]RTKLib详解:rtkcmn.c与rtkpos.c

      文章目录 Part A、Rrtkcmn.c一、总体功能二、关键API列表三、核心算法实现四、函数功能与参数说明1. uniqnav2. lsq3. filter4. matmul5. satazel6. ionmapf7. geodist8. timeadd9. dgetrf_ / dgetri_&#xff08;LAPACK接口&#xff09; 五、工作流程说明4.1 模块在RTKLib中的…...

      cookie/session的关系

      什么是cookie&#xff0c;session 我们平时去医院看病时&#xff0c;从进医院那一刻&#xff0c;我们最开始要做的就是挂号&#xff08;需要我们填写表格&#xff0c;记录一些核心信息&#xff0c;医生会把这些信息录入电脑&#xff0c;并给我办一个就诊卡&#xff0c;卡里面只…...

      Linux(十四)进程间通信(IPC),管道

      一、进程间通信 &#xff08;一&#xff09;系统介绍进程间通信 进程间通信&#xff08;IPC&#xff09;介绍 小编插入的这篇文章详细介绍了进程间通信的一些内容&#xff0c;大家可以一起学习。 &#xff08;二&#xff09;进程间通信的方法 1、管道 2、信号量 3、共享…...

      Nmap 工具的详细使用教程

      Nmap&#xff08;Network Mapper&#xff09;是一款开源且功能强大的网络扫描和安全审计工具。它被广泛用于网络发现、端口扫描、操作系统检测、服务版本探测以及漏洞扫描等。 官方链接: Nmap 官方网站: https://nmap.org/Nmap 官方文档 (英文): https://nmap.org/book/man.h…...

      Vue 自定义指令输入校验过滤

      /*** 过滤字符串* param {*} filterCharRule* param {*} newVal* returns*/ function filterCharForValue(filterCharRule, newVal) {if(!filterCharRule || !newVal) returnconst isArray filterCharRule instanceof Arrayconst isRegExp filterCharRule instanceof RegExpi…...

      OpenGl实战笔记(2)基于qt5.15.2+mingw64+opengl实现纹理贴图

      一、作用原理 1、作用&#xff1a;将一张图片&#xff08;纹理&#xff09;映射到几何体表面&#xff0c;提升视觉真实感&#xff0c;不增加几何复杂度。 2、原理&#xff1a;加载图片为纹理 → 上传到 GPU&#xff1b;为顶点设置纹理坐标&#xff08;如 0~1 范围&#xff09;&…...

      tinyrenderer笔记(透视矫正)

      tinyrenderer个人代码仓库&#xff1a;tinyrenderer个人练习代码 引言 还要从上一节知识说起&#xff0c;在上一节中我为了调试代码&#xff0c;换了一个很简单的正方形 obj 模型&#xff0c;配上纹理贴图与法线贴图进行渲染&#xff0c;得了下面的结果&#xff1a; what&…...

      c++类【发展】

      类的静态成员&#xff08;用static声明的成员&#xff09;,在声明之外用例单独的语句进行初始化&#xff0c;初始化时&#xff0c;不再需要用static进行限定。在方法文件中初始化。以防重复。 特殊成员函数 复制构造函数&#xff1a; 当使用一个对象来初始化另一个对象…...

      玛格丽特鸡尾酒评鉴,玛格丽特酒的寓意和象征

      玛格丽特鸡尾酒会有独特的风味&#xff0c;而且还会有一个比较吸引人的背后故事。在目前的鸡尾酒界就会占据着很重要的地位&#xff0c;不仅是味蕾的盛宴&#xff0c;同样也会拥有深厚的情感。 玛格丽特由龙舌兰酒、柠檬汁和君度橙酒调制而成&#xff0c;将三者巧妙地结合在一起…...

      关于Java多态简单讲解

      面向对象程序设计有三大特征&#xff0c;分别是封装&#xff0c;继承和多态。 这三大特性相辅相成&#xff0c;可以使程序员更容易用编程语言描述现实对象。 其中多态 多态是方法的多态&#xff0c;是通过子类通过对父类的重写&#xff0c;实现不同子类对同一方法有不同的实现…...

      SecureCrt设置显示区域横列数

      1. Logical rows //逻辑行调显示区域高度的 一般超过50就全屏了 2. Logical columns //逻辑列调显示区域宽度的 3. Scrollback buffer //缓冲区大小...

      【PhysUnits】1 SI Prefixes 实现解析(prefix.rs)

      一、源码 // prefix.rs //! SI Prefixes (国际单位制词头) //! //! 提供所有标准SI词头用于单位转换&#xff0c;仅处理10的幂次 //! //! Provides all standard SI prefixes for unit conversion, handling only powers of 10.use typenum::{Z0, P1, P2, P3, P6, P9, P12, …...

      【Python】--实现多进程

      import multiprocessing import time # 1.定义好函数 # codeing def coding():for i in range(10):print(f正在编写第{i}行代码)time.sleep(0.2)# music def music():for i in range(10):print(f正在听第{i}首歌曲)time.sleep(0.2)单任务 # 单任务--时间为4s多 if __name__ _…...

      计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)

      🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅 基于数字图像处理的裂缝检测与识别系统 🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦**系统架构设计****1. 图像预处理**目标:消除噪声+增强裂缝特征**2. 图像分割**目标:提取裂缝区域**3. 特征…...

      嵌入式MCU语音识别算法及实现方案

      在嵌入式MCU&#xff08;微控制器单元&#xff09;中实现语音识别&#xff0c;由于资源限制&#xff08;如处理能力、内存、功耗等&#xff09;&#xff0c;通常需要轻量级算法和优化技术。以下是常见的语音识别算法及实现方案&#xff1a; 一、传统语音识别算法 动态时间规整&…...

      【C++核心技术深度解析:从继承多态到STL容器 】

      一、C继承机制&#xff1a;代码复用与层次设计 1. 继承基础概念 什么是继承&#xff1f; 继承是面向对象编程的核心机制&#xff0c;通过class Derived : public Base让子类&#xff08;派生类&#xff09;复用父类&#xff08;基类&#xff09;的属性和方法&#xff0c;同时…...

      【C/C++】new关键字解析

      &#x1f4d8; C 中 new 关键字详解笔记 &#x1f539; 什么是 new&#xff1f; new 是 C 中用于动态内存分配的关键字&#xff0c;它在堆内存中为对象或变量分配空间&#xff0c;并返回对应类型的指针。 与 C 语言中的 malloc 相比&#xff0c;new 更安全、更方便&#xff…...

      C++高性能内存池

      目录 1. 项目介绍 1. 这个项目做的是什么? 2. 该项目要求的知识储备 2. 什么是内存池 1. 池化技术 2. 内存池 3. 内存池主要解决的问题 4.malloc 3. 先设计一个定长的内存池 4.高并发内存池 -- 整体框架设计 5. 高并发内存池 -- thread cache 6. 高并发内存池 -- …...

      chili3d调试笔记12 deepwiki viewport

      xiangechen/chili3d | DeepWiki viewport阅读 &#x1f9e0;deep 我要把模型投影成dxf导出有什么办法 引用lookat 截图是如何实现的 明天接着搞 ----------------------------------------------------------------...

      前端取经路——JavaScript修炼:悟空的九大心法

      大家好&#xff0c;我是老十三&#xff0c;一名前端开发工程师。JavaScript如同孙悟空的七十二变&#xff0c;变化多端却又充满威力。本篇文章我将带你攻克JS中最令人头疼的九大难题&#xff0c;从闭包陷阱到原型链继承&#xff0c;从异步编程到性能优化。每个难题都配有实战代…...

      从零实战:在Xilinx Zynq PS端移植VxWorks 6.9系统

      一、环境准备与工具链搭建 1.1 硬件配置清单 开发板: Zynq-7000系列(推荐ZedBoard或ZCU102)调试工具: USB-JTAG调试器(如Xilinx Platform Cable USB II)存储介质: SD卡(建议Class 10以上)1.2 软件环境 工具版本作用Vivado2022.1FPGA硬件设计Vitis2022.1系统集成开发Wind…...

      网工实验——RIP配置

      网络拓扑图 配置 1.为每台设备配置ip地址 AR4 <Huawei>u t m <Huawei>sys [Huawei]sysname AR4 [AR4]int g0/0/0 [AR4-GigabitEthernet0/0/0]ip address 172.16.1.1 24 [AR4-GigabitEthernet0/0/0]q#下面配置换回口&#xff0c;模拟网 [AR4]int LoopBack 0 [AR4…...

      前端流行框架Vue3教程:14. 组件传递Props效验

      (4) 组件传递Props效验 Vue组件可以更细致地声明对传入的props的校验要求 ComponentA.vue <script> import ComponentB from ./ComponentB.vue; export default {components: {ComponentB},data() {return {title: 标题}} } </script> <template><h3&g…...

      电子电器架构 --- 网关ECU中采用多CPU解决方案来实现网关功能

      我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

      关于tftpboot的用法

      TFTPBOOT 是一个常用于嵌入式系统或网络设备中的命令&#xff0c;用于通过 TFTP 协议从网络上启动操作系统镜像或引导文件。这个命令通常在设备启动时执行&#xff0c;允许设备通过网络从 TFTP 服务器下载启动镜像或其他必要的文件&#xff0c;而不需要从本地存储中启动。 一般…...

      团队协作的润滑剂——GitHub与协作流程

      各位代码界的社交恐惧症患者们&#xff0c;今天我们要聊的是如何假装自己很会团队协作——使用GitHub&#xff01;这就像程序员版的"相亲平台"&#xff0c;只不过在这里&#xff0c;你展示的不是自拍和收入&#xff0c;而是代码和commit记录&#xff08;后者往往更令…...

      数据库复习

      DML操作包括&#xff1a; SELECT INSERT UPDATE DELETE MERGE 返回字符串长度&#xff1a;length() 查询记录&#xff1a;SELECT 增&#xff08;INSERT&#xff09;、删&#xff08;DELETE&#xff09;、改&#xff08;UPDATE&#xff09;、查&#xff08;SELECT&#…...

      AI与机器学习、深度学习在气候变化预测中的应用与实践

      前言&#xff1a; 全球气候变化是现代社会面临的最重要的环境挑战之一&#xff0c;影响了气温、降水、海平面、农业、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、农业变化和生态环境变化等。这些因素在全球范围…...

      Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收

      Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收 要在 Laravel 12 中实现基于 EMQX 的 MQTT 消息发送与接收&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 安装必要的依赖包 首先安装 MQTT 客户端库&#xff1a; composer require php-mqtt/client2. 配置 EMQX 连接 …...

      论广告系统对存算分离架构的应用

      辅助论点 辅助论点一&#xff1a;存算分离架构起源于数据库领域&#xff0c;并不是在线系统。 存算分离的架构源于Google的Spanner数据库&#xff0c;这个数据库采用了KV做存储层&#xff0c;OLAP做计算层的分离式设计&#xff0c;其目的是能快速伸缩计算资源&#xff0c;且节…...

      create-vue搭建Vue3项目(Vue3学习2)

      一、认识create-vue image.png 二、create-vue搭建Vue3项目 image.png image.png 依次执行npm install 和npm run dev即可运行项目 image.png image.png © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点赞、收藏、关注哦&#xff01;&#xff01;&#xff…...

      NHDEEP档案管理系统功能介绍

      NHDEEP档案管理系统单机版专注于提高档案管理效率&#xff0c;无需网络连接即可独立运作&#xff0c;确保数据的安全与私密性。无论是机关单位的常规档案工作&#xff0c;还是工程、基建项目的特殊档案管理需求&#xff0c;系统都能提供全面的解决方案。系统支持信创环境。 核心…...

      【C++】C++中的命名/名字/名称空间 namespace

      C中的命名/名字/名称空间 namespace 1、问题引入2、概念3、作用4、格式5、使用命名空间中的成员5.1 using编译指令&#xff08; 引进整个命名空间&#xff09; ---将这个盒子全部打开5.2 using声明使特定的标识符可用(引进命名空间的某个成员) ---将这个盒子中某个成员的位置打…...

      游戏引擎学习第260天:在性能分析器中实现钻取功能

      昨天那个帧内存满之后触发段错误实在没找到什么原因导致的 继续研究一下为什么导致的 内存不够进来释放frame 释放frame 应该会给DebugState->FirstFreeStoredEvent 赋值吧 这段宏定义&#xff1a; #define FREELIST_DEALLOCATE(Pointer, FreeListPointer) \if(Pointer) {…...

      人工智能100问☞第15问:人工智能的常见分类方式有哪些?

      目录 一、通俗解释 二、专业解析 三、权威参考 人工智能的常见分类方式包括:​​按智能水平​​(弱人工智能、通用人工智能、超级人工智能)、​​按技术原理​​(生成式AI、判别式AI、强化学习)、​​按功能目标​​(生成内容、优化决策)、​​按应用领域​​(自然语…...

      JavaSE核心知识点01基础语法01-04(数组)

      &#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点01基础语法01-04&#xff0…...

      抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析

      抖音代播领航者——品融电商&#xff08;PINKROON&#xff09;的运营实力与服务解析 在兴趣电商高速发展的背景下&#xff0c;杭州品融品牌管理有限公司&#xff08;PINKROON&#xff09;凭借其全域增长方法论与抖音生态的深度布局&#xff0c;成为众多品牌首选的抖音代播服务商…...

      LeetCode 790 多米诺和托米诺平铺 题解

      对于本题不去看LeetCode的评论区和题解很难想到如何去dp&#xff0c;毕竟就算再怎么枚举也很难找到适用于面向结果的规律。所以对于题解我建议大家还是去看一下灵神给的题解&#xff0c;以下是灵神汇总的图&#xff0c;如果能看懂的话&#xff0c;对于解决题目有很大的帮助。 根…...