pyenv 管理多个 Python 版本(1)

引言
你是否曾希望参与一个支持多个 Python 版本的项目,但又不知道如何轻松地测试所有这些版本?你是否对 Python 的最新版本感到好奇?或许你想尝试这些新功能,但又不想冒险破坏你的开发环境。幸运的是,如果你使用 pyenv,管理多个 Python 版本并不复杂。
本文[1]将向你展示如何高效地在项目上工作,同时减少因尝试使用正确版本的 Python 而产生的困扰。
通过本文,你将学会:
-
安装多个 Python 版本 -
安装 Python 的最新开发版 -
在已安装的版本间切换 -
与 pyenv 一起使用虚拟环境 -
自动激活不同的 Python 版本和虚拟环境
为什么要选择 pyenv?
pyenv 是一个管理多个 Python 版本的强大工具。即使你的系统中已经安装了 Python,安装 pyenv 也是有益的,因为它可以让你轻松体验新的语言特性,或者帮助参与使用不同 Python 版本的项目。此外,pyenv 还可以用来安装 Python 的预发布版本,以便你测试它们是否存在缺陷。
为什么不使用自带 Python?
“系统 Python” 指的是随操作系统一起安装的 Python。如果你使用的是 Mac 或 Linux,那么当你在终端输入 python 时,默认情况下会启动一个 Python 的交互式解释器。
那么,为什么不直接使用系统自带的 Python 呢?一种理解方式是,这个 Python 实际上是属于操作系统的。毕竟,它是随操作系统一起被安装的。这一点在你执行 which 命令时也得到了体现:
$ which python
/usr/bin/python
在这里,python 可供所有用户使用,很可能,这也不是您想要的 Python 版本:
$ python -V
Python 2.7.12
为什么要在系统 Python 中安装软件包时使用 sudo pip install
命令呢?这是因为你正在进行全局安装,如果另一位用户想要安装该软件包的稍早版本,这可能会引发问题。
多个版本的相同软件包可能会导致问题,这些问题往往会在你不经意间突然出现。一个常见的问题是,一个受欢迎且稳定的软件包突然在你的系统上出现问题。经过长时间的排查和搜索后,你可能会发现安装了错误的依赖版本,这让你的一天变得糟糕。
即使你的 Python 安装在 /usr/local/bin/python3
,你仍然会遇到上述的权限和灵活性问题。
此外,你对于操作系统中安装的 Python 版本几乎没有控制权。如果你想使用 Python 的最新特性,而你使用的是 Ubuntu,例如,你可能就没那么幸运了。默认版本可能太旧,这意味着你得等待新操作系统的发布。
最后,一些操作系统实际上依赖于 Python 来运行。以 yum 为例,它大量依赖 Python 来执行任务。如果你安装了 Python 的新版本,并且不小心将其安装到了系统空间,你可能会严重破坏操作系统的使用能力。
那么包管理器又如何呢?
接下来合乎逻辑的选择是包管理器,比如 apt、yum、brew 或 port 等。毕竟,这是你安装大多数系统软件的方式。不幸的是,你会发现使用包管理器时会遇到一些相同的问题。
默认情况下,包管理器倾向于将软件包安装到全局系统空间而不是用户空间。这些系统级别的软件包会干扰你的开发环境,使得与他人共享工作空间变得困难。
再次,你无法控制可以安装的 Python 版本。虽然一些仓库提供了更多的选择,但默认情况下,你只能安装特定供应商在任何给定时间提供的 Python 版本。
即使你通过包管理器安装了 Python,考虑一下如果你正在开发一个软件包,并且想要支持和测试 Python 3.4 到 3.7 的不同版本。
当你在系统上输入 python3
时会发生什么?你如何快速切换不同的版本?虽然这是可行的,但过程繁琐且容易出错。更不用说,如果你想使用 PyPy、Jython 或 Miniconda,那么你可能只能放弃使用包管理器。
考虑到这些限制,让我们总结一下能够轻松灵活地安装和管理 Python 版本的标准:
-
在你的用户空间安装 Python -
安装多个 Python 版本 -
指定你确切想要的 Python 版本 -
在已安装的版本之间切换 \
pyenv 可以让你做到所有这些,甚至更多。
安装 pyenv
在安装 pyenv 之前,你需要一些特定于操作系统的依赖项。这些依赖项主要是用 C 语言编写的开发工具,因为 pyenv 是通过从源代码构建来安装 Python 的。你可以查看官方文档以获取更详细的构建依赖项分解和解释。在这个教程中,你将看到安装这些依赖项的最常见方法。
构建依赖项
pyenv 从源代码构建 Python,这意味着你需要构建依赖项才能真正使用 pyenv。构建依赖项因平台而异。如果你在 Ubuntu/Debian 上,并且想要安装构建依赖项,你可以使用以下命令:
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
这使用 Apt 安装所有构建依赖项。运行它,您就可以开始使用 Debian 系统了。
如果您使用 Fedora/CentOS/RHEL,您可以使用 yum 来安装构建依赖项:
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel
此命令将使用 yum 安装 Python 的所有构建依赖项。
macOS 用户可以使用以下命令:
$ brew install openssl readline sqlite3 xz zlib
如果您使用 openSUSE,那么您将运行以下命令:
$ zypper in zlib-devel bzip2 libbz2-devel libffi-devel \
libopenssl-devel readline-devel sqlite3 sqlite3-devel xz xz-devel
该命令再次为您的系统安装所有 Python 构建依赖项。
最后,对于 Alpine 用户,您可以使用以下命令:
$ apk add libffi-dev ncurses-dev openssl-dev readline-dev \
tk-dev xz-dev zlib-dev
此命令使用 apk 作为包管理器,并将在 Alpine 上安装 Python 的所有构建依赖项。
使用 pyenv 安装程序
安装构建依赖项后,您就可以安装 pyenv 本身了。我建议使用 pyenv-installer 项目:
curl https://pyenv.run | bash
这将一并安装 pyenv 和几个实用的插件:
-
pyenv:即 pyenv 本身的应用 -
pyenv-virtualenv:一个让 pyenv 支持虚拟环境的插件 -
pyenv-update:一个用于更新 pyenv 的插件 -
pyenv-doctor:一个检查 pyenv 及其构建依赖是否已正确安装的插件 -
pyenv-which-ext:一个自动查找系统命令的插件
运行结束时,您应该看到如下内容:
WARNING: seems you still have not added 'pyenv' to the load path.
Load pyenv automatically by adding
the following to ~/.bashrc:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
输出将基于您的 shell。但是您应该按照说明将 pyenv 添加到您的路径并初始化 pyenv/pyenv-virtualenv 自动完成。完成此操作后,您需要重新加载 shell:
$ exec "$SHELL" # Or just restart your terminal
您现在已经安装了 pyenv 和四个有用的插件。
使用 pyenv 安装 Python
现在您已经安装了 pyenv,下一步是安装 Python。您有许多版本的 Python 可供选择。如果您想查看所有可用的 CPython 3.6 到 3.8,您可以执行以下操作:
$ pyenv install --list | grep " 3\.[678]"
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.6.4
3.6.5
3.6.6
3.6.7
3.6.8
3.7.0
3.7-dev
3.7.1
3.7.2
3.8-dev
上面显示了 pyenv 知道的与正则表达式匹配的所有 Python 版本。在本例中,这是所有可用的 CPython 版本 3.6 到 3.8。同样,如果您想查看所有 Jython 版本,您可以这样做:
$ pyenv install --list | grep "jython"
jython-dev
jython-2.5.0
jython-2.5-dev
jython-2.5.1
jython-2.5.2
jython-2.5.3
jython-2.5.4-rc1
jython-2.7.0
jython-2.7.1
同样,您可以看到 pyenv 提供的所有 Jython 版本。如果您想查看所有版本,可以执行以下操作:
$ pyenv install --list
...
# There are a lot
找到所需的版本后,您可以使用单个命令安装它:
$ pyenv install -v 3.7.2
/tmp/python-build.20190208022403.30568 ~
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
/tmp/python-build.20190208022403.30568/Python-3.7.2 /tmp/python-build.20190208022403.30568 ~
[...]
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Installed Python-3.7.2 to /home/realpython/.pyenv/versions/3.7.2
这将需要一段时间,因为 pyenv 正在从源代码构建 Python,但一旦完成,您将在本地计算机上使用 Python 3.7.2。如果您不想查看所有输出,只需删除 -v 标志即可。甚至可以安装 CPython 的开发版本:
$ pyenv install 3.8-dev
对于本教程的其余部分,示例假设您已安装 3.6.8 和 2.7.15,但您可以随意将这些值替换为实际安装的 Python 版本。另请注意,示例中的系统Python版本为2.7.12。
安装位置
如前所述,pyenv 通过从源代码构建 Python 来工作。您安装的每个版本都位于 pyenv 根目录中:
$ ls ~/.pyenv/versions/
2.7.15 3.6.8 3.8-dev
您的所有版本都将位于此处。这很方便,因为删除这些版本很简单:
$ rm -rf ~/.pyenv/versions/2.7.15
当然 pyenv 还提供了卸载特定 Python 版本的命令:
$ pyenv uninstall 2.7.15
使用新的 Python
现在您已经安装了几个不同的 Python 版本,让我们了解一下如何使用它们的一些基础知识。首先,检查您有哪些可用的 Python 版本:
$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
2.7.15
3.6.8
3.8-dev
-
表示系统 Python 版本当前处于活动状态。您还会注意到,这是由根 pyenv 目录中的文件设置的。这意味着,默认情况下,您仍在使用系统 Python:
$ python -V
Python 2.7.12
如果您尝试使用 which 来确认这一点,您将看到以下内容:
$ which python
/home/realpython/.pyenv/shims/python
pyenv 将自身插入到您的 PATH 中,从操作系统的角度来看,它是被调用的可执行文件。如果你想查看实际路径,可以运行以下命令:
$ pyenv which python
/usr/bin/python
例如,如果您想使用版本 2.7.15,则可以使用全局命令:
$ pyenv global 2.7.15
$ python -V
Python 2.7.15
$ pyenv versions
system
* 2.7.15 (set by /home/realpython/.pyenv/version)
3.6.8
3.8-dev
如果您想返回到默认的 Python 系统版本,您可以运行以下命令:
$ pyenv global system
$ python -V
Python 2.7.12
您现在可以轻松地在不同版本的 Python 之间切换。
未完待续,欢迎关注!
动动您发财的小手点个赞吧!欢迎转发!
Source: https://realpython.com/intro-to-pyenv/
本文由 mdnice 多平台发布
相关文章:
pyenv 管理多个 Python 版本(1)
引言 你是否曾希望参与一个支持多个 Python 版本的项目,但又不知道如何轻松地测试所有这些版本?你是否对 Python 的最新版本感到好奇?或许你想尝试这些新功能,但又不想冒险破坏你的开发环境。幸运的是,如果你使用 pyen…...
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读 导读:这篇论文的核心议题是理解和建模大型语言模型(LLM)的上下文学习(ICL)能力。文章从贝叶斯学习的角度出发,提出了一…...
泷羽Sec学习笔记-Bp中ip伪造、爬虫审计
ip伪造与爬虫审计 ip伪造 下载插件:burpFakeIP 地址:GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython:下载地址:Maven Central: org.python:jython-…...
常用vim命令行-linux008
Vim 是一款功能强大的文本编辑器,广泛应用于编程、配置文件编辑以及日常文本处理。Vim 在其命令行模式下提供了丰富的操作命令,这些命令能够大幅提升编辑效率。以下是 Vim 中常用的命令及操作的总结,覆盖了 Vim 中的基本操作、查找、替换、文…...
Linux相关概念和易错知识点(24)(认识信号、信号捕捉)
目录 1.认识信号 (1)后台进程和前台进程 ①为什么Ctrl C能终止前台进程? ②如何终止这个后台程序? (2)信号、异步和同步 ①同步 ②异步 (3)信号的处理 2.信号捕捉 &#x…...
Scala的导入
//导入 //(1) 创建包:在src上右键,新建软件包 //(2)填写包名:小写 //(3)在包上右键,创建类。自动加入包名 //(4)导入。import 包名.类名 //导入多个类 //import jh.yuanlixueyuan.bigdata.scala03.{A,B,C} //导入包下的所有的类 /…...
strace,tcmalloc,asan使用
1、strace使用 1.1、编译strace strace开源库 解压strace-4.21.tar.xz 编译./configure --hostarm-ca9-linux-gnueabihf --prefix~/out make&&make install 1.2、参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息…...
C++中多态性在实际项目中的应用场景;C++中面向对象编程实现数据隐藏的方法
1. C中多态性在实际项目中的应用场景 C中多态性是面向对象编程中的一个重要概念,它允许我们在使用基类指针或引用的情况下,调用派生类对象的特定方法。这种灵活性使得多态性在实际项目中有着广泛的应用场景,具体包括但不限于以下几个方面&am…...
【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)
前言 界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,QT中可以使用QMovieQLabel完成gif动态图片的播放及关闭的效果。 效果图 功能讲解 1、加载动画 void MainWindow::addloadgi…...
iPhone苹果相册视频怎么提取音频?
在数字时代,视频已成为我们记录生活、分享故事的重要方式。然而,有时候我们只想保留视频中的音频部分,比如一段动人的背景音乐或是一段珍贵的对话。那么,苹果相册视频怎么提取音频呢?本文将介绍三种简单且实用的方法&a…...
【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器
文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...
完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...
在销售管理中,客户跟进时会出现什么问题?如何解决?
客户跟进表是销售工作中重要的一部分,用于记录与客户的每次沟通、执行计划和合作动态。然而,在实际使用中,客户跟进表经常会出现一些问题,导致效率低下甚至客户流失。本文就从常见问题出发,一一提供措施,让…...
【代码随想录|动态规划】
一、动态规划理论基础 |、动态规划包含题目类型 (1)背包问题 (2)打家劫舍 (3)股票问题 (4)子序列问题 ||、做一道题需要掌握(动态规划5步曲)࿱…...
时间敏感网络与工业通信的融合:光路科技电力专用交换机和TSN工业交换机亮相EP电力展
12月7日,第三十一届中国国际电力设备及技术展览会(EP Shanghai 2024)暨上海国际储能技术应用展览会在上海新国际博览中心圆满落幕。本届展会以“数字能源赋能新质生产力”为主题,系统地呈现了电力设备行业在技术融合、转型升级及上…...
初识Linux · 系统编程done
目录 前言: 死锁 可重入函数 读写锁 自旋锁 前言: 本文作为Linux系统编程的收尾工作,介绍的是些零碎的概念,比如死锁,可重入函数,自旋锁,读写锁等,其中死锁概念要重要些&#…...
JavaScript函数式编程: 实现不可变数据结构
# JavaScript函数式编程: 实现不可变数据结构 什么是不可变数据结构 在计算机编程中,不可变数据结构指的是数据一旦创建就不可更改或者修改。这意味着我们不能在原始数据上进行增删改操作,而是需要创建一个新的数据结构来代替原始数据进行操作。 为什么要…...
union find算法 c++
1.原理参考 labuladong-fucking-algorithm/算法思维系列/UnionFind算法详解.md at master jiajunhua/labuladong-fucking-algorithm GitHub 2.初级模式 #include <iostream>class UF {public:// 记录连通分量/* 构造函数,n 为图的节点总数 */UF(int n) {…...
路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)
目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 改进的人工势场法(APF)路径规划算法 在路径规划中,人工势场法(APF)是一种常见的方法,但传统的APF算法容易陷入局部极小值,导致路径规…...
ES语句——DSL(kibana语句)
一、查询操作 查看当前索引的数据结构 _mapping Get ai-open-log*/_mapping 查询当前索引下的文档数以及分片信息 _count Get ai-open-log*/_count { "count": 12345, //当前索引下的文档总数 "_shards": { //分片信息 "total&…...
y3编辑器教学5:触发器2 案例演示
文章目录 一、探索1.1 ECA1.1.1 ECA的定义1.1.2 使用触发器实现瞬间移动效果 1.2 变量1.2.1 什么是变量1.2.2 使用变量存储碎片收集数量并展现 1.3 if语句(魔法效果挂接)1.3.1 地形设置1.3.2 编写能量灌注逻辑1.3.3 编写能量灌注后,实现传送逻…...
MVC配置文件及位置
配置文件位置 默认位置 WEB-INF目录下,文件名:<servlet-name>-servlet.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.…...
【razor】echo搭配relay功能分析
echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…...
C++类的运算符重载
目标 让自定义的类直接使用运算符运算 代码 头文件及类定义 #include <iostream>using namespace std; class Complex {int rel;int vir; public:void show(){cout <<"("<<this->rel<<","<<this->vir<<&quo…...
Motionface RTASR 离线实时语音识别直播字幕使用教程
软件使用场景: 直播、视频会议、课堂教学等需要实时字幕的场景。 1:系统要求 软件运行支持32位/64位windows 10/11系统,其他硬件要求无,无显卡也能实时识别字幕。 2:下载安装 链接:百度网盘 请输入提取码 提取码&#…...
【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究
文章目录 概述:摘要1. 引言2. 相似误差订正算法(核心)3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...
learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)
1.父子组件u-search (1)父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...
UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案
UNIX系统常见故障表现: 1、存储结构出错; 2、数据删除; 3、文件系统格式化; 4、其他原因数据丢失。 UNIX系统常见故障解决方案: 1、检测UNIX系统故障涉及的设备是否存在硬件故障,如果存在硬件故障…...
c#动态更新替换json节点
需求项目json作为主模板,会应用到多个子模版,当后续项目变更只需要修改主模板中节点,并且能够动态更新到原来的子模版中去。 主模板示例: {"A": {"A1": "","A2": false,"A3"…...
kubernetes的可靠性测试或者故障测试有哪些?
kubernetes的可靠性测试或者故障测试有哪些? 在 Kubernetes (K8s) 集群中,可靠性测试和故障性测试旨在确保系统能够稳定运行并具备应对各种故障的能力。这些测试主要针对集群的组件、应用程序和基础设施。以下是详细的测试内容和方法: 一、可靠性测试 1. 高可用性测试 目…...
datax和datax-web打包成docker运行
概述 datax和datax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8,需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…...
ThreadLocal原理解析
ThreadLocal原理解析 本篇将带大家了解ThreadLocal的使用方法,并且深度剖析其原理和作用,通过阅读源码的方式,进一步了解其内部原理 ThreadLocal 是 Java 提供的一个工具类,用于为每个线程维护一个独立的变量副本。每个线程可以访…...
Android 分析 Activity 与 Fragment 的区别,部分使用的差异
一、基本概念 Activity:Activity 是应用中单独一个界面的一个组件,通常一个 Activity 对应一个界面(或屏幕)。Activity 控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。 Fragment:Fragment …...
前端(Ajax)
1.客户端请求 向https://jsonplaceholder.typicode.com/users发送get请求 const xhr new XMLHttpRequest();console.log(xhr.readyState);xhr.open(get, https://jsonplaceholder.typicode.com/users)console.log(xhr.readyState);xhr.send();console.log(xhr.readyState);xh…...
【C++】约瑟夫环问题:深度解析与高级优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言约瑟夫环问题:深度解析与高级优化💯题目描述💯解决方案详解直接模拟法(基于 C 实现)代码解析示例执行过程 💯高级优…...
总结拓展十七:SAP 采购订单行项目“交货“页签解析
《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中,采购订单行项目的“交货”页签承载着关键的信息,其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段,对于确保采购流程的顺利进行、优化…...
作业Day2: 多文件编译; 思维导图
目录 ①文件代码 及其所需头文件分析 main.c文件 1.h文件 1.c文件 ②运行结果: ③代码分析 结构体成员 数据类型的设定: 信息录入函数 信息删除 成绩排序 信息显示 自定义初始化函数 ④思维导图:编辑 ①文件代码 及其所需头文…...
Kioptrix Level 1通关攻略
目录 修改靶机Kioptrix:Level 1 的网络模式 探测靶机IP地址 得到端口信息 扫描TCP端口 扫描UDP端口 脚本扫描 指纹探测 漏洞探测 目录枚举扫描 发现利用脚本 执行exp链接shell 修改靶机Kioptrix:Level 1 的网络模式 Kioptrix: Level 1靶机的默认网络模式是桥接&#x…...
01 下载opencv并配置vs开发环境
01 下载opencv并配置vs开发环境 01 下载windows版本的opencv 下载地址:点击 WIndows版本的是编译好的代码。 当然国外网站下载很慢,可以通过我分享的网盘链接下载 opencv-4.10.0-windows.exe https://www.alipan.com/s/wV7z4YsmXgN 点击链接保…...
Ubuntu22.04 docker如何发布镜像(和用git差不多)
在dockerhub上创建远程仓库:https://hub.docker.com/ 将本地镜像打tag,并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称(要和远程仓库dockerhub上的一致):新的标签pus…...
【Golang】——Gin 框架中的模板渲染详解
Gin 框架支持动态网页开发,能够通过模板渲染结合数据生成动态页面。在这篇文章中,我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据,并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染? 1.1 概…...
React的局限性是什么?
性能: 虚拟 DOM 虽然提高了渲染性能,但在某些情况下可能会造成性能瓶颈,尤其是在处理大量数据或复杂更新时。对于非UI任务(如计算密集型操作),React 本身并不擅长。 学习曲线: 对于初学者来说&a…...
【Vulkan入门】09-CreateFrameBuffer
目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…...
罗技键鼠更换新台式机无蓝牙通过接收器安装
优联驱动下载: http://support.logitech.com.cn/zh_cn/software/unifying (下载安装后按照步骤一步步操作,匹配后即可使用) 向京东客服反馈后提供的驱动下载安装连接 有问题欢迎评论沟通~...
深入了解Modbus TCP协议:介绍、原理解析与应用示例
深入了解Modbus TCP协议:介绍、原理解析与应用示例 在工业自动化领域,设备之间的通信与数据交换至关重要。Modbus协议作为一种经典的通信协议,因其简单、开放和易于实现的特点,被广泛应用于各种工业设备之间的数据传输。而Modbus…...
vue2 项目中实现动态代理,服务器上通过nginx部署 实现动态代理
一、前言&&原理 前言:vue2 项目中,请求接口是从表格的当前获取的,也就是接口ip:端口号:路经不确定,要实现点击表格当前行请求对应的接口 实现原理:将实际要请求的ip等信息存在请求头中,用的时候再…...
OpenGL 几何着色器高级应用
几何着色器高级应用 概念回顾 几何着色器(Geometry Shader)是 OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心功能是基于输入的图元(如点、线或三角形),生成新的图元,或对输入的图元进行修改。 几何着色器的执行是以图元…...
QT JSON文件解析
参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件,读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...
c++中string字符串与其他类型的转换
一、string 转换成其他类型 1、转换为整数 使用std::stoi(适用于int)、std::stol(适用于long)、std::stoll(适用于long long)、std::stoul(适用于unsigned long)和std::stoull&…...
aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务
aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务 学习内容: 使用SQS Amazon Simple Queue Service服务整体代码(nodejs的通常工程)代码动作 1. 使用SQS Amazon Simple Queue Service服务 利用应用程序来学习SQS 创建S3$ aws s…...