python包管理工具:pipenv的基本使用
很多语言都提供了环境隔离的支持,例如nodejs的node_module
,golang的go mod
,python也有virtualenv
和pyvenv
等机制。
为了建立依赖快照,通常会用pip freeze > requirements.txt
命令生成一个requirements.txt文件,在一些场景下这种方式就可以满足需求,但是在复杂场景下requirements.txt就力不从心了。
requirements.txt的痛点
requirements.txt文件中只记录了依赖的版本,所以如果遇到官方的pypi源下载速度慢,需要使用更快的国内镜像下载,通常只能使用pip install -i
安装或者修改全局的pip.conf文件。
当某个项目使用确定的python版本,这个版本也并不能在requirements.txt中体现,只能通过readme或者文档来记录,并且需要在创建虚拟环境时手动调用正确的python版本。
项目需要使用flake8、pylint、black等代码优化工具时,这些依赖也会被pip freeze
命令写入requirements.txt中,然而这些依赖是不需要出现在生产环境的。
为什么使用pipenv
pipenv
是官方推荐
的的python包管理工具,可以实现项目之间依赖的隔离。
pipenv
的出现,一举解决了上面的问题,pipenv
是Kenneth Reitz在2017年1月发布的Python依赖管理工具,他所基于的Pipfile则用来替代requirements.txt。
好处1:记录内容更详细
相比于requirements.txt
,Pipfile多了pip源的设置
,可以针对不同项目使用不同环境
。并且将依赖分为dev
和默认环境
,例如pylint、flake8、black等依赖,可以将他们放入dev依赖中
。
好处2:减少手动激活虚拟环境
pipenv
将virtualenv
、pyvenv
和pip
命令整合使用,pipenv
减少了手动激活虚拟环境的次数。
使用pyvenv模块运行main.py,需要先执行source venv/bin/activate
激活虚拟环境,然后再执行python main.py
。
而pipenv
只需要在项目根目录执行pipenv run main.py
,就可以自动激活当前虚拟环境并执行main.py。
如果需要安装依赖的,直接执行pipenv install xxx
,也不需要先激活虚拟环境,再使用pip install xxx
安装。
好处3:锁机制
从Pipfile文件添加或删除安装的包,会生成Pipfile.lock来锁定安装包的版本和依赖信息,通过pipfile.lock文件,可以精确恢复使用的版本。
Pipfile示例
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"[packages][dev-packages][requires]
python_version = "3.8"
python_full_version = "3.8.10"
pipenv基本使用
pipenv安装并创建虚拟环境
pip3 install pipenv
如果出现以上报错,解决方法:https://gist.github.com/y56/0540d22a1db40dacc7fbbb93c866821e
创建虚拟环境
pipenv --python 3.8.10 #指定使用Python3.8.10的虚拟环境# pipenv --two #使用系统的Python2在创建虚拟环境
# pipenv --three #使用系统的Python3在创建虚拟环境
注意:以上三个参数只能单独使用。它们还具有破坏性,会删除当前的虚拟环境,然后用适当版本的虚拟环境替代。
当给定了一个Python版本的时候,pipenv
会自动扫描系统中能够匹配给定的Python版本的Python解释器,没指定版本时,使用系统默认的Python版本。
执行完命令,项目文件夹会生成Pipfile
文件。
如果命令执行前项目目录中不存在 Pipfile 文件,该命令将会创建一个Pipfile 文件。如果已经有Pipfile文件已经存在,则会根据这个Pipfile生成虚拟环境。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"[packages][dev-packages][requires]
python_version = "3.8"
python_full_version = "3.8.10"
使用pipenv安装python包
使用pipenv
可以轻松优雅地管理项目所依赖的包,下面通过实际使用案例来学习其用法。
# 安装命令
pipenv install beautifulsoup4 #在项目所在虚拟环境中安装beautifulsoup4
pipenv install parsel==1.3.1 #安装parsel并指定其版本
pipenv install --dev nose2 #安装nose2包并将其关联为只在开发环境中需要的包# 卸载命令
pipenv uninstall beautifulsoup4 #在项目所在虚拟环境中卸载beautifulsoup4
pipenv uninstall --all #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
pipenv uninstall --all--dev #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包# 更新命令
pipenv update requests #在项目中更新requests包
pipenv update #更新项目中所有的包
pipenv update --outdated #查看现有包哪些已经过期#查看命令
pipenv graph #显示现有的依赖包
pipenv lock #更新Pipfile.lock文件锁定当前环境的依赖版本
--dev
—— 同时安装Pipfile
中develop
与default
里面的包。--system
——使用系统的pip
命令而不是虚拟环境中的。--deploy
— Make sure the packages are properly locked in Pipfile.lock, and abort if the lock file is out-of-date.--ignore-pipfile
——忽略Pipfile
直接从Pipfile.lock
中安装。--skip-lock
——忽略Pipfile.lock
,直接从Pipfile
中安装。此外也不会更新Pipfile.lock
以跟踪Pipfile
的变化。- 上面代码中值得一提的是
--dev
标志,加了此标志的包只用于开发环境,安装包记录在Pipfile中的dev-package
中,如果别人克隆你的Profile文件后使用命令pipenv install
创建虚拟环境,默认不会安装dev-package
下的安装包,除非使用命令pipenv install --dev
- Pipefile 和 Pipefile.lock 都会按照你的操作进行自动的更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。
首次安装python包后会生成Pipfile.lock
文件。如:
pipenv install requests
Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"[packages]
requests = "*"[dev-packages][requires]
python_version = "3.8"
python_full_version = "3.8.10"
可以看到requestss
包已经在Pipfile
中被管理,另外会生成如下Pipfile.lock
文件。
Pipfile.lock
Pipfile.lock
中记录了当前虚拟环境中安装的依赖的版本号以及哈希,以保证每次根据这些值装出来的依赖都是一致的,该文件用来保证包的完整性。记住,任何情况下不要手动修改该文件!- 项目提交时,可将
Pipfile
文件和Pipfile.lock
文件一并提交,给其他开发人员克隆下载,他们可以根据此Pipfile文件运行命令pipenv install
生成自己的虚拟环境。
{"_meta": {"hash": {"sha256": "64f5100b28344e03094c1fc73ddac3ec9cdb1743eab96848e6fa73795ac2cb97"},"pipfile-spec": 6,"requires": {"python_full_version": "3.8.10","python_version": "3.8"},"sources": [{"name": "pypi","url": "https://pypi.org/simple","verify_ssl": true}]},"default": {"certifi": {"hashes": ["sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7","sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"],"markers": "python_version >= '3.6'","version": "==2023.5.7"},"charset-normalizer": {"hashes": ["sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6","sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1","sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e","sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373","sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62","sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230","sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be","sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c","sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0","sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448","sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f","sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649","sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d","sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0","sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706","sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a","sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59","sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23","sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5","sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb","sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e","sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e","sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c","sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28","sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d","sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41","sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974","sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce","sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f","sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1","sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d","sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8","sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017","sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31","sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7","sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8","sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e","sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14","sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd","sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d","sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795","sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b","sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b","sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b","sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203","sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f","sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19","sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1","sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a","sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac","sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9","sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0","sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137","sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f","sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6","sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5","sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909","sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f","sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0","sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324","sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755","sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb","sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854","sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c","sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60","sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84","sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0","sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b","sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1","sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531","sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1","sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11","sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326","sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df","sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"],"markers": "python_full_version >= '3.7.0'","version": "==3.1.0"},"idna": {"hashes": ["sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4","sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"],"markers": "python_version >= '3.5'","version": "==3.4"},"requests": {"hashes": ["sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294","sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"],"index": "pypi","version": "==2.30.0"},"urllib3": {"hashes": ["sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc","sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"],"markers": "python_version >= '3.7'","version": "==2.0.2"}},"develop": {}
}
删除python包
pipenv uninstall
支持 pipenv install 中的全部参数,以及两个额外的选项,--all
和 --all-dev
。
--all
——此参数会删除虚拟环境所有的包,但不改变Pipfile。--all-dev
——此参数会删除虚拟环境中所有的开发包,并从Pipfile中删除。
锁定lock
更新 Pipfile.lock
文件锁定当前环境的依赖关系
pipenv lock
查看创建的虚拟环境
pipenv --venv
进入虚拟环境
pipenv shell
使用虚拟环境
pipenv run python3 xxx.py
查看python包依赖关系
pipenv graph
删除虚拟环境
pipenv --rm
更多查看:https://github.com/pypa/pipenv
欢迎关注 ❤
微信公众号:海哥python
相关文章:

python包管理工具:pipenv的基本使用
很多语言都提供了环境隔离的支持,例如nodejs的node_module,golang的go mod,python也有virtualenv和pyvenv等机制。 为了建立依赖快照,通常会用pip freeze > requirements.txt 命令生成一个requirements.txt文件,在…...

AI系统ChatGPT网站系统源码AI绘画详细搭建部署教程,支持GPT语音对话+DALL-E3文生图+GPT-4多模态模型识图理解
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...

MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些?
MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些? 步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,这个固定的角度被称为“步距角”。步进电机不能…...

大数据技术原理与应用期末复习(林子雨)
大数据技术原理与应用期末复习(林子雨) Hadoop的特性HBase编程实践NoSQL的四大类型键值数据库优点:缺点: 列族数据库优点:缺点: 文档数据库优点:缺点: 图数据库优点:缺点…...

C练习——魔术师猜三位数
题目: 有一种室内互动游戏,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少…...

three.js 使用 tweenjs绘制相机运动动画
效果: 代码: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…...
Oracle VARCHAR和VARCHAR2区别
在Oracle数据库中,VARCHAR和VARCHAR2是两种不同的数据类型,它们的区别如下: 1.存储空间 VARCHAR和VARCHAR2在存储空间上有所不同。在Oracle 7及以下版本中,VARCHAR类型的长度是固定的,如果存储的数据长度小于定义的长…...

HarmonyOS 开发基础(八)Row和Column
HarmonyOS 开发基础(八)Row和Column 一、Column 容器 1、容器说明: 纵向容器主轴方向:从上到下纵向交叉轴方向:从左到右横向 2、容器属性: justifyContent:设置子元素在主轴方向的对齐格式…...

Visual Studio中项目添加链接文件
这个需求在VS里面使用还真不多见,只是最近在做项目的版本编号的时候遇到一个头大的问题,我一个解决方案下面有几十个类库,再发布的时候这几十个类库的版本号必须要统一,之前我们都是在单个的AssemblyInfo.cs里面去改相关的信息&am…...

做一个个人博客第一步该怎么做?
做一个个人博客第一步该怎么做? 好多零基础的同学们不知道怎么迈出第一步。 那么,就找一个现成的模板学一学呗,毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题,那就是,那些模板都,太!…...

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!
vue前端开发自学练习,Props数据传递-类型校验,默认值的设置! 实际上,vue开发框架的时候,充分考虑到了前端开发人员可能会遇到的各种各样的情况,比如大家经常遇到的,数据类型的校验,再比如,默认…...
Fooocus 使用笔记
目录 换装,换脸,修复畸形 比较和使用教程: 安装教程: github地址: 换装,换脸,修复畸形 🔥迄今最全!Fooocus AI绘图 详细教程 AI换装 AI换脸 AI修复畸形 - 西瓜视频 …...
18. 从零用Rust编写正反向代理, 主动式健康检查源码实现
wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来ÿ…...

[DM8] 达梦8配置兼容Oracle
查看版本信息 select *,id_code from v$version; 查询解释: DM Database Server 64 V8 1-1-190-21.03.12-136419-ENT 64 版本位数标识,64表示为64位版本,无64则表示为32位版本 V8 大版本号,目前主要是V7、V8 1-1-190…...
【Pytorch简介】1.Introduction 简介
Introduction 简介 大多数机器学习工作流涉及处理数据、创建模型、使用超参数优化模型,以及保存,然后推理已训练的模型。 本模块介绍在 PyTorch(一种常用的 Python ML 框架)中实现的完整机器学习 (ML) 工作流。 我们使用 Fashio…...
什么是Session以及如何在 NestJS 项目中的优雅管理 Session
前言 Web开发中一个常见的问题是用户身份的管理和状态保持。Session 就是处理这个问题的一个传统技术。在这篇文章中,我们将探讨Session是什么,为什么我们需要Session,以及在NestJS项目中如何优雅地管理Session。 什么是Session 众所周知&…...

高级分布式系统-第6讲 分布式系统的容错性--故障/错误/失效/异常
分布式系统容错性的概念 分布式系统的容错性: 当发生故障时, 分布式系统应当在进行恢复的同时继续以可接受的方式进行操作, 并且可以从部分失效中自动恢复, 且不会严重影响整体性能。 具体包括以下4个方面的内容: 可…...

网络多线程开发小项目--QQ登陆聊天功能(服务端推送新闻、离线留言和文件)
9.1.5、QQ登陆聊天功能(服务端推送新闻、离线留言和文件) 9.1.5.1、服务端推送新闻 1、需求分析 2、思路分析 3、代码实现 QQServer: 1)cn.com.agree.qqserver.service.SendNewsToAllClient package cn.com.agree.qqserver.s…...
Jtti:有哪些方法可以提升Tomcat的性能?
提升 Tomcat 性能是确保 Web 应用程序快速响应并能够处理高并发请求的关键任务。以下是一些提升 Tomcat 性能的常见方法: 1. 调整JVM参数: a. 内存分配: 增加 JVM 的堆内存(Heap Memory)以提高应用程序的内存容量。使用 -Xmx 和 -Xms 参数设置…...
LeetCode 2085. 统计出现过一次的公共字符串
目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 C代码 Python3代码 一、题目 1、题目描述 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 2…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...