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

Python 包与环境管理简史:从混乱到优雅

自动包管理工具的先驱:easy_install

在一切规范化工具出现之前,Python 的包管理是相当原始的。开发者们需要把第三方库的源码下载下来,手动放到项目目录里。
为了解决自动安装包的问题,easy_install 应运而生。

2004年:easy_install——从 0 到 1 的突破

easy_install 是 Python 包管理的早期自动化解决方案。它可以从 PyPI 自动下载并安装包,极大地简化了获取第三方库的流程。然而,它也存在很多问题:

  • 无法直接卸载:安装容易,卸载却需要手动删除文件。
  • 无依赖管理:它会安装包及其所有依赖,但无法记录或锁定这些依赖的精确版本,导致“依赖地狱”问题依然存在。
  • 容易冲突:多个项目依赖同一个库的不同版本时,easy_install 会陷入困境。

虚拟环境管理+更智能的包管理:virtualenv/venv,pip

2008年:virtualenv——为每个项目建一个虚拟环境

virtualenv 的出现是一个里程碑。它创造性地提出可以为每个项目创建一个独立的、隔离的 Python 虚拟环境。在这个虚拟环境里,你可以随心所欲地安装任何版本的包,而不会影响到系统全局或其他项目。virtualenv 解决了项目间的环境冲突问题,为后续的工具发展奠定了基础。

2011年:pip——更智能的包安装器

pip 作为 easy_install 的替代品逐渐成熟,并最终成为 Python 事实上的标准包安装器。它解决了 easy_install 的诸多痛点:

  • 可以一条命令卸载包
    pip uninstall package_name
    
  • 支持依赖管理:能够自动处理依赖关系。
  • 引入 requirements.txt:通过一个简单的文本文件,你可以记录项目所需的所有依赖及其精确版本。其他人拿到项目后,只需运行
    pip install -r requirements.txt
    
    就能复刻你的开发环境。

2012年:venv——Python内置的虚拟环境工具

venv 是 Python 3.3 引入的一个标准库模块,它提供了 virtualenv 的核心功能,但更加轻量和易用。你可以通过

python -m venv my_env

来创建一个新的虚拟环境,而无需额外安装任何东西。

早期版本的venv相比virtualenv,缺少很多高级特性,因此很多开发人员仍然选择继续使用virtualenv。但随着Python的发展,venv也越来越成熟,目前已经取代了virtualenv成为了虚拟环境的事实性官方标准。

Python解释器版本管理工具:pyenv

pipvirtualenv/venv 解决了“包”和“环境”的问题,但还有一个更底层的问题:Python 解释器本身呢?如果你的电脑系统自带了 Python 2.7,但你的新项目需要 Python 3.10,而另一个维护中的老项目又需要 Python 3.3,怎么办?手动安装、修改 PATH?太麻烦了。

2011年:pyenv——掌控你的 Python 版本

pyenv 的出现,完美地填补了这个空白。它深受 Ruby 社区的 rbenv 启发,其核心思想非常巧妙:它并不真正地“安装”多个 Python 版本,而是在你的 PATH 路径最前面插入一个“垫片”(shim)。当你调用 python 命令时,这个垫片会根据你当前目录或全局的配置,智能地转发给对应版本的 Python 解释器。

通过

pyenv install 3.10.0

命令,你可以轻松安装任意版本的Python(此处示例3.10.0)

通过

pyenv local 3.8.5

命令,你可以为当前目录下的项目指定使用任意版本的Python(此处示例3.8.5)

pyenv 解决了 Python 解释器版本管理的难题,它与 pipvenv 形成了三件套:pyenv 负责管理解释器版本,venv 负责创建隔离环境,pip 负责安装依赖包

一体化工具的尝试:pipenvpoetry

pyenv + virtualenv + pip 虽然强大,但毕竟需要操作三个工具。开发者们开始向往一个能“一键搞定所有”的解决方案。于是,一系列“All-in-One”工具应运而生。

2017年:Pipenv——官方推荐的“希望”

Pipenv 由 Requests 库的作者 Kenneth Reitz 主导开发,并一度被 Python 官方推荐为“用于 Python 项目的官方依赖管理工具”。它试图将 pipvenv 的功能合二为一。

它用 Pipfile和 Pipfile.lock替代了 requirements.txt,提供了更精确的依赖锁定和开发/生产环境的区分。

同时,Pipenv 在早期因为一些性能问题、锁文件生成缓慢以及偶尔的 Bug,社区评价褒贬不一,逐渐失去了一些光环。

Pipenv 本身不管理 Python 解释器版本。所以pyenv在管理不同Python版本的多个项目时仍是必需的工具。(笔者并没有真正使用过pipenv这个工具,根据网上的资料查询得出这个结论,不太确定是不是真的没有这个功能。如果有误,请不吝赐教)

2018年:Poetry——更现代的依赖管理工具

几乎与 Pipenv 同期,Poetry 横空出世,并迅速赢得了大量开发者的心。

它使用 pyproject.toml作为唯一的配置文件,这是 PEP 518 和 PEP 621 所倡导的现代 Python 项目标准,非常简洁和强大。

它的依赖解析算法和锁文件(poetry.lock)生成速度比 Pipenv 更快、更可靠。

另外,它集成了构建、打包和发布到 PyPI 的功能,真正实现了从开发到部署的全流程管理。

pipenv一样,Poetry自身不负责Python版本的管理,仍然需要搭配pyenv来管理Python解释器版本。(笔者并没有真正使用过poetry这个工具,根据网上的资料查询得出这个结论,不太确定是不是真的没有这个功能。如果有误,请不吝赐教)

另一条路:科学计算领域的王者——Conda

在主流 Python 社区为 pipvirtualenv 演进时,科学计算领域走出了另一条完全不同的道路。

2012年:Conda——安装依赖、Python版本管理全包了

Anaconda是数据科学领域发展出的包管理+Python版本管理工具。而且它管理的不仅仅是 Python 包,还可以是R语言等其他语言的软件包。此外,为了提供开箱即用的机制,Anaconda会默认安装许多常用的科学计算库,但这也导致了安装体积过大。因此,又推出了miniconda这个精简版,它只包含了最基本的 Python 和 conda 包管理器。对于Python开发人员来说,更多使用的还是miniconda

Anaconda 在安装时就会自带一个稳定版本的Python,同时还可以通过conda命令直接安装其他版本的Python。

conda create -n myenv python=3.9

这条命令,就可以创建一个包含 Python 3.9 的新环境。

Anaconda可以不依赖pip,直接通过conda install命令安装包。但是conda安装的包版本常常会和pip包冲突,而且PyPI上的很多包都没有conda的版本。

另外,Anaconda使用environment.yml文件来描述环境,这个文件类似于requirements.txt,但更加复杂。在conda中,通过yaml文件来创建环境的命令为:

conda env create -f environment.yml -n 环境名

但说实话能够一次性成功配置环境属于少数情况,一般都会遇到配置太慢、卡死、solving environment failed、PackageNotFound、以及pip爆出的一堆红字。

综合上述原因,在实际的工作流中,人们通常会使用conda创建一个干净的虚拟环境,然后再在这个虚拟环境中使用pip安装其他依赖。

conda create -n myenv python=3.9
conda activate myenv
pip install -r requirements.txt

这也是现在科研领域使用Python的主要方式,绝大多数的Python科研项目都是这样安装依赖的。另外一些老的软件开发项目也会使用这种方式。VSCode对于conda的兼容性也很好,可以直接检测出conda管理的虚拟环境。

速度与整合的终极追求:uv 的时代

时间来到最近,一个名为 uv 的工具横空出世,以其惊人的速度和“大一统”的雄心,再次搅动了整个生态。

2023年:uv ——极速的全面解决方案

uv 由 Astral(Ruff 的开发公司)发布,它是一个用 Rust 编写的、极其快速的 Python 包安装器,最初旨在成为 pip 的直接替代品。
使用

uv pip install package_name

命令,可以极大地提升安装速度。它的速度优势是颠覆性的,将依赖解析和安装的时间从分钟级缩短到了秒级。

uv 的目标远不止于作为一个快速的pip替代品,它正在迅速整合 Python 项目管理的所有核心能力:

  • 项目管理uv init可以快速创建一个包含 pyproject.toml 的项目骨架。
  • 虚拟环境管理uv venv 可以创建和管理虚拟环境。
  • 依赖解析与安装uv adduv removeuv sync 等命令提供了原生的依赖安装体验
  • Python 版本管理:可以通过uv python install命令安装指定的Python版本

现在仅使用uv一个工具就可以实现原本需要pip,venv,pyenv三个工具才能实现的功能。而且相比conda,其更符合Python标准,更加Pythonic。

笔者个人使用经历和体会

前面这段是对历史的梳理,现在来谈一谈我个人使用Python依赖管理工具的经历和体会。

本科毕业后,我先从事了两年NodeJS开发的工作。我个人感觉相对来说NodeJS的版本兼容性应该比Python好不少吧?当时压根就没想到需要不同的NodeJS版本来管理不同项目的问题,用我电脑上安装的NodeJS LTS(长期支持版)运行公司的各个项目都没有遇到兼容性问题。另外,NodeJS中使用npm工具管理项目依赖包,每个项目就是一个独立的环境,也不会出现不同项目之前依赖包冲突的问题。虽然现在也出现了nvm这个管理不同Nodejs版本的工具,但这个工具只是锦上添花,在大多数情况下并不是必需的。

但读研以后开始使用Python,整个情况就变了。不同版本的Python之间兼容性很差,只安装一个Python版本完全无法应对不同的项目,而且pip安装依赖在没有虚拟环境的情况下,默认是到全局环境,无法进行不同项目的环境隔离。

conda是我最早接触的工具,因为我是读研后才开始使用Python的,一开始主要做的也是科研项目。实验室的师兄师姐教我们就是直接用conda,而且基本上所有的科研论文项目的主页上也都是用的conda。venv作为Python官方的虚拟环境解决方案我也了解过,但还是不如conda方便,基本没用过。有了conda以后,项目的版本依赖管理就变得清晰了很多,而且在conda里面想用哪个版本的Python就可以用哪个版本的Python。

conda自带的conda install命令在很多时候安装不到想要的包,而且速度很慢。所以我都是先用conda安装虚拟环境,再用pip安装依赖。

假如我想导出环境给另一台电脑使用该怎么办呢?一开始使用的是这个命令:

pip freeze > requirements.txt

但是这样会存在一个问题,导出的文件包含的是当前虚拟环境中所有的包。有的时候为了图省事,一个conda虚拟环境会给多个项目使用,这样就可能包含很多用不着的包。为了解决这个问题,我又找到了pipreqs这个工具,该工具会扫描当前项目下实际使用的依赖包,并生成对应的requirements.txt文件。

尽管pipreqs工具可以导出实际需要的依赖,但仍然需要手动导出。但使用过npm的我还是觉得不太方便,为什么就不能在安装的同时直接生成一个类似于package.json的文件来管理依赖呢?(其实pyproject.toml文件早已出现,但由于读研期间把绝大多数的精力都放在读论文,想科研点子上,没有时间学习开发工具的使用,一直活在自己的信息茧房里,也就不知道这个东西的存在)

一直到了研究生毕业,再次工作以后,我接触了Dify项目,发现其中使用了一种新的依赖管理工具uv,而且使用pyproject.toml管理项目依赖包。这不就是我梦寐以求的工具吗?再去回看历史,发现原来之前还有poetry,pipenv这些工具。而uv基本上解决了之前所有工具的问题。现在的Python开发人员真是身处一个好时代,有uv这么好的工具。

最后说一下工具的选型。

对于科研人员来说,还是推荐使用conda。尽管其比较笨重,但使用方便,而且也是科研领域的主流解决方案。

但对于开发人员来说,强烈建议转向uv这个现代化工具。这是目前Python依赖管理的集大成者。

相关文章:

Python 包与环境管理简史:从混乱到优雅

自动包管理工具的先驱:easy_install 在一切规范化工具出现之前,Python 的包管理是相当原始的。开发者们需要把第三方库的源码下载下来,手动放到项目目录里。 为了解决自动安装包的问题,easy_install 应运而生。 2004年:easy_install——从 0 到 1 的突破 easy_install 是 …...

qoj853 Flat Organization

SOLUTION FROM WUMIN4 题意 给出一个 \(n\) 个点的带权竞赛图(定向完全图),你可以进行任意次操作,每次操作反转一条边,代价为边权,求使得图强连通的最小代价和与方案,或输出无解。 \(n\le 2000\)。 思路 我们先考虑算出这张图的所有 SCC 并进行缩点,容易发现缩点后图是…...

shell命令中循环执行操作的命令

shell命令中循环执行操作的命令reference: for i in $(seq 1 10000); do echo "Iteration $i" && echo "Iteration $i"; done for i in $(seq 1 10000); do cat /sys/class/net/eth0/carrier && sleep 1; done for i in $(seq 1 999999); …...

2025年9月中国数据库排行榜:达梦挺进榜眼位,崖山首入前十强

9月墨天轮排行榜解读已出炉!本月前十变动较大,老将突围、新秀崛起,达梦凭借强劲势头跃升至第二位、TiDB排名上升、崖山首次闯入前十,此外还有一些产品表现亮眼!本月墨天轮社区的中国数据库排行榜再起波澜。达梦凭借强劲势头跃升至第二位,崖山则首次闯入前十,既展现了“老…...

基于QEMU模拟器搭建Builtroot下的QT开发环境

基于QEMU模拟器搭建Builtroot下的QT开发环境https://www.cnblogs.com/arnoldlu/p/17250728.html...

vlan

vlanhttps://zhuanlan.zhihu.com/p/385949949...

OpenSSH漏洞修复

前期准备 (先使用Telnet远程连接工具,连接服务器,确保Telnet连接正常,SSH连接后进行漏洞修复升级(防止修复失败,导致远程连接无法连接时,可以通过另一个远程工具连接进行恢复) telnet安装与开启:https://www.cnblogs.com/aerfazhe/p/19098482 准备离线升级安装包 Open…...

windosw 配置arp绑定

windosw 配置arp绑定配置静态arp绑定 netsh interface ipv4 add neighbors "以太网" "192.168.98.233" "aa-bb-cc-dd-ee-01" store=active...

2024年最受欢迎的渗透测试工具盘点

本文详细介绍了2024年最受欢迎的渗透测试工具,包括Certipy、BloodHound、Impacket等社区工具和CloudFox、Broken Hill等Bishop Fox自研工具,涵盖网络、云环境、API和LLM安全测试领域。我们最喜爱的渗透测试工具:2024版 又到了黑客工具盘点时间!我们征集了专家团队的意见,为…...

Unity学习 5.6 FBX

FBX保存了模型和纹理,没有贴图,贴图作为静态资源单独存在 FBX的使用 演示:选择*.fbx文件,直接拖到层级窗口 观察节点图标 选中节点,观察Inspector中的操作按钮select可以focus资源路径贴图路径有的模型需要贴图文件 贴图文件路径是约定好的与fbx相同目录,或者同级Texture…...

SEERC 2022 题面简要翻译

A. Append / 附件 你有两个字符串 \(s,t\),同时你还有一个字符串数组,这个数组中的第 \(i\) 个字符串是由 \(i\) 个 \(s\) 拼接而成,现在问最小的 \(p\) 使得 \(t\) 是这个字符串数组的第 \(p\) 个字符串。 \(1 \le |s|,|t| \le 5 \times 10^5\)。 时间限制:\(1\text{s}\)。…...

【稳定检索、线上线下参会、马理工主办】第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025)

快速见刊,检索稳定! 第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025) 2025 11th International Conference on Architectural, Civil and Hydraulic Engineering (ICACHE 2025) 在这里看会议官网详情 大会时间:2025年10月17-19日 大会地点:马来西亚 新山 截稿时…...

telnet安装与开启

在 CentOS 中,Telnet 是一种远程登录协议,默认情况下是关闭的。以下是开启 Telnet 服务的步骤。 # 首先检查是否已安装相关软件包 rpm -qa | grep telnet rpm -qa | grep xinetd # 以下命令安装: yum install -y telnet-server xinetd # 启用并启动服务 # 设置 Telnet 和 xi…...

20250917NOIP#21

20250917NOIP#21 T2 题意: 给定一个 \(n\) 个点的树,点上有一个非负整数点权 \(a_i\),表示这个点需要在操作序列中正好被经过 \(a_i\) 次,一次操作为选择两个顶点 \(u,v\) ,从 \(u\) 经过简单路径走到 \(v\) ,求最小操作数。 思路: 见到这个题第一眼想到贪心,可以具象化…...

又一个新项目完结,炸裂!

这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程。大家好,我是程序员鱼皮。又经过了一段时间的爆肝,我在编程导航的保姆级新项目教程 —— AI 零代码应用生成平台,完结啦! 这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程,基于 Spring Boot 3 + LangCha…...

阿里云防刷神器ESA搞活动免费领取

最近使用阿里云的边缘安全加速ESA,防刷、访攻击。 所有套餐支持一键防刷、安全事件分析、频次控制等。 最近搞活动,可以不限次数领取基础版代金券,免费领取链接:http://s.tb.cn/e6.0Fu67m测速效果...

报错TypeError: Unknown file extension .ts - broky

当出现这个TypeError: Unknown file extension ".ts"这个报错的时候,可以看看package.json里没有是不是有"type": "module"这个字段,有的话需要去掉...

抗 IgE 单克隆抗体联合变应原免疫治疗(AIT):过敏性疾病治疗的协同新策略

过敏性疾病(如哮喘、慢性荨麻疹、过敏性鼻炎)的发病率在全球范围内持续攀升,传统治疗手段(如抗组胺药、糖皮质激素)虽能缓解症状,却难以从根本上改变机体的过敏状态。变应原免疫治疗(AIT)作为唯一能 “重塑免疫耐受” 的病因治疗方法,通过逐渐增加变应原暴露剂量,诱导…...

php怎么关闭数据库连接

在PHP中,关闭数据库连接是一个很重要的步骤,它可以释放资源并防止不必要的连接浪费。下面是一些关闭数据库连接的常见方法:1. 使用mysqli_close()函数关闭连接:“`$conn = mysqli_connect($servername, $username, $password, $dbname);// 执行完数据库操作后,关闭连接mys…...

代码分析之污点分析 - 教程

代码分析之污点分析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

设计模式 7章

软件设计7大原则 开闭原则:是原则,在设计软件时保持扩展的开放性和修改的封闭性 里式替换原则:要求在继承时不要破坏父类的实现 单一职责原则:要求类的功能要单一 接口隔离原则:要求接口的设计要精简 依赖倒置原则:要求面向抽象编程,即面向接口编程 迪米特原则:提供一种…...

磁盘存储简介-轮子

https://blog.csdn.net/user2025/article/details/142364353...

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解原题链接:货车运输 kruskal重构树+LCA做法,树剖不想写 很容易发现原图跑最短路可以解,但是复杂度难以承受,所以考虑如何简化该图。 发现原图边权维护的应该是(u,v)的最小值,并且最优选择是这个最小值最大,所以如果有多条(…...

cherry-pick 合并曾今某一次提交

确认当前分支 git checkout test 找到要合并提交的哈希值 git log --oneline 太长的话点击q 退出 切换到我们要合并的分支 git checkout dev 使用 cherry-pick 应用指定提交 git cherry-pick <提交哈希1> 推送到远程分支 git push origin dev...

向量数据库 FAISS、LanceDB 和 Milvus

FAISS (Facebook AI Similarity Search)本质:一个库 (Library),而不是一个数据库。定位:由 Meta (Facebook) AI 研发的、专注于高效相似性搜索的 C++/Python 库。它的核心使命只有一件事:在海量向量中快速找到最相似的 K 个向量。特点:它提供了极其丰富和灵活的索引算法(…...

ruoyi-vue自动生成代码

我看到这个ruoyi-vue有自动生成代码的功能,这里我们可以体验一下改如何实现。 还是首先在 ruoyi-admin 下面的文件夹target里面执行 java -jar ruoyi-admin.jar ,然后再 ruoyi-ui 下面执行 npm run dev 好,项目启动起来了,然后登录到后台里面去,点击系统工具里面的代码…...

拥抱新一代 Web 3D 引擎,Three.js 项目快速升级 Galacean 指南

本文从多个维度对比 Galacean 和 Three.js 两款Web3D 引擎的差异,并介绍拟我形象项目从Three.js 切换到 Galacean 以后带来的提升以及项目迁移的心得,为其他 Three.js 项目升级到 Galacean 提供参考。作者: vivo 互联网前端团队- Su Ning 本文从多个维度对比 Galacean 和 Th…...

Fast IO 模板

放在 using namespace std; 后面即可。 namespace fast_IO { #define FASTIO #define IOSIZE 100000char ibuf[IOSIZE], obuf[IOSIZE];char *p1 = ibuf, *p2 = ibuf, *p3 = obuf; #ifdef ONLINE_JUDGE #define getchar() ((p1==p2)and(p2=(p1=ibuf)+fread(ibuf,1,IOSIZE,stdin)…...

kylin V11安装mysql8.4.5(glibc.2.28版本)

环境:OS:kylin V11mysql:8.4.5 glibc2.28(建议不要安装glibc.2.17版本) 查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There…...

iOS 上架 App 流程全解析 苹果应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验

本文系统解析 iOS 上架 app 流程,涵盖苹果应用从开发者账号注册、证书准备、uni-app 打包、ipa 上传、TestFlight 测试,到 App Store 审核与发布的完整步骤,结合多工具协作,总结高效实用的上架经验。对开发者来说,应用上线的最后一道门槛就是 iOS 上架 app 流程。 相比 An…...

P6801 花式围栏

题目传送门数学、计数类。题意 在 \(n\) 个同一底线上宽 \(w\),高 \(h\),给定的相邻矩形中,数出在方格上的任意形状的小矩形的个数。 \(1\leq n\leq 10^5,1\leq w,h \leq 10^9\) 题解 我们规定竖直方向上为高,水平方向上为的宽。 要研究 \(n\) 个,就要先研究一个。 我们考…...

ms sql dml 操作

ms sql dml 操作 --建表 select * into tablenew from tableold...

黑白染色方法

主要有 \(3\) 种方法:DFS / BFS / DSUDFS直接遍历整张图染色,判断是否产生冲突 init(){for(int i=1;i<=n;i++) col[i]=-1; } bool dfs(int u,int c){col[u]=c;for(auto v:e[u]){if(col[v]==-1) return dfs(v,c^1);else if(col[v]==c) return false;}return true; } ... bo…...

Windows 数字签名获取与验证详解

在 Windows 的安全体系中,数字签名扮演着“软件身份证”的角色。它可以证明一个程序确实来自某个发布者,并且在分发的过程中没有被篡改。 当下载一个系统更新、驱动程序,或者安装第三方应用时,操作系统往往会验证数字签名,确保软件来源合法、安全。那么,作为开发者或安全…...

转化率提升300%,火山引擎Data Agent以“一客一策”突破企业营销增长瓶颈

火山引擎近日分享了其企业级数据智能体Data Agent如何通过AI技术,解决企业营销增长中的核心问题。根据过去半年的客户实践,Data Agent在智能营销领域展现出显著成效,通过自然语言交互大幅降低工具使用门槛,并能深度整合企业内外部数据,实现从洞察到行动的闭环决策。面对企…...

矩阵模板

struct mat{int m[N][N];//将A.m[i][j] 改成 A[i][j] 这种格式int* operator [] (size_t i) {return m[i];}const int* operator [] (size_t i) const {return m[i];}mat() {memset(m,0,sizeof m);}//初始化矩阵mat operator * (const mat& b) const {//矩阵乘法mat res;fo…...

快读模板

int read(){int x=0,f=1;char c=getchar();while(c<48||c>57){if(c==-) f=-1;c=getchar();}while(c>47&&c<58) x=x*10+(c^48),c=getchar();return x*f; }本文来自博客园,作者:_AzureSky,转载请注明原文链接:https://www.cnblogs.com/-AzureSky-/p/1909…...

ipadװwindowsϵͳshell

如何在iPad上安装Windows系统Shell:详解与实践指南 随着科技的不断进步,用户对于设备功能的需求也在不断增加。iPad作为一款便携式的智能平板电脑,其强大的硬件性能和优秀的生态系统赢得了广大用户的喜爱。然而,对于一些专业用户或技术爱好者来说,仅使用iOS系统可能无法满…...

cpu的各种寄存器及其功能

cpu的功能 指令控制 完成取指令,分析指令,执行指令的操作 操作控制 产生完成一条指令所需要的操作信号,从而控制这些部件按指令的要求正确执行 时间控制 严格控制各种操作信号出现的时间,持续时间以及出现的时间顺序 数据加工 对数据进行逻辑和算数运算 中断处理 对计算机运…...

如何关闭电视的ACR功能及其对隐私保护的重大意义

本文详细解析智能电视自动内容识别(ACR)技术的工作原理与隐私风险,提供三星、LG、索尼、海信、TCL五大品牌电视的ACR关闭步骤,帮助用户有效保护个人观看数据免受商业监控。如何关闭电视的ACR功能(及其重大影响) 智能电视操作系统带来便利的同时,也引发了新的隐私担忧——尤…...

huggingface 模型权重文件

文件类型文件名示例用途模型权重 pytorch_model.bin 或 model.safetensors 包含模型训练后的参数权重配置文件 config.json 包含模型架构和超参数配置词汇表文件 vocab.json, vocab.txt, tokenizer.json 分词器所需的词汇映射分词器配置 tokenizer_config.json 分词器的配置参数…...

vscode设置单击选中带连字符的单词

1、打开 VSCode 设置打开设置搜索 wordSeparators,找到 Editor: Word Separators 选项。2、移除 - 字符默认值类似:`~!@#$%^&*()-=+[{]}\\|;:",.<>/?删除 -(连字符),使其变成:`~!@#$%^&*()=+[{]}\\|;:",.<>/?这样 - 就不会被视为单词分隔…...

P4147 玉蟾宫(悬线法)

P4147 玉蟾宫#include <bits/stdc++.h> using namespace std;const int maxn = 1e3 + 10;int n,m; int a[maxn][maxn] = {{0,0}}; int l[maxn][maxn],r[maxn][maxn],h[maxn][maxn]; int ans;int main(){ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;fo…...

全局平衡二叉树

发现自己在大力 DS 这个领域有一些欠缺,所以来补一下。 所谓全局平衡二叉树(GBST)就是 LCT 的静态版本。 我们对树先重剖,然后把每条重链上的点拎出来建一个 BST,满足这个 BST 的中序遍历就是这个重链从上到下遍历得到的序列。然后让这个 BST 的根指向这个点原树上的父亲。…...

Transactional注解的方法里 spring怎么知道我用的是哪个jdbctemplate实例

> 这是一个非常好的问题,它触及了 Spring 框架中声明式事务管理(`@Transactional`)和底层资源管理(`JdbcTemplate`)如何协同工作的核心。 简单直接的回答是:**Spring 并不知道,也不关心你的方法内部使用的是哪个 `JdbcTemplate` 实例。它只关心当前线程是否已经绑定…...

根据参数查询

根据参数查询<!-- 根据参数查询--><select id="listByMap" resultMap="ResultMapManage" parameterType="map">select <include refid="Manage_field"/>from manage where 1=1<include refid="Manage_wh…...

关于非侵入式脑机接口面向C端一个应用想法

目前,脑机接口行业发展如火如荼,但应用仍高度集中在医疗领域,比如运动功能康复等。这类方向不仅技术相对成熟,也更易获得商业回报——毕竟无论是医院还是患者,都更愿意为“恢复健康”买单。然而,若希望脑机接口能像汽车、手机那样,真正融入普通人的日常生活,成为不可或…...

Blelloch并行扫描算法

本文介绍了一个可以用于并行化串行累计操作的Blelloch算法,可以通过用空间换时间+并行计算的方法,来降低特定计算的时间复杂度。这里我们给出了算法原理的大致介绍,以及基于Numpy的算法代码实现。技术背景 由于现代计算机技术的发展,算法的并行能力越来越强大。所以当我们考…...

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型 在数字化转型浪潮中,中国企业的软件研发模式正经历深刻变革。随着信创战略的深入推进,构建自主可控的DevOps工具链已成为各行业技术负责人的核心任务。作为国内领先的代码托管平台,Gitee正通过其本土化优势与开放性生态,…...

【IEEE出版】2025年电气、控制与人工智能国际学术会议(ICOECAI 2025)

2025年电气、控制与人工智能国际学术会议(ICOECAI 2025) 2025 International Conference on Electrical, Control and Artificial Intelligence 在这里看会议官网详情 2025年10月24-26日 中国广州 截稿时间:见官网 接受/拒稿通知:投稿后5天内 收录检索:IEEE Xplore、EI …...