更重要的是,pyenv 使用了垫片的原理,使用某个 Python 版本或虚拟环境完全是自动的,无需手动指定。...例如: [image.png] shims/垫片的简化基本原理 Linux 执行命令时,是依次遍历 PATH 环境变量的每个路径,查找所执行的命令。...这是垫片原理的一个简化示例: [image.png] 可以看到,在修改 PATH 之前,python 命令使用的是 /usr/bin/python。...pyenv 在 ~/.pyenv/shims 目录下创建了各种 python 相关命令的垫片(~/.bashrc 中加入的命令调用 pyenv-rehash 生成的,pyenv install 命令也会调用...pyenv-rehash 进行更新): [image.png] 所以当我们执行 python 相关的命令时,实际执行的是这些垫片。
之所以要去搞清楚这个问题,是我在把 vscode 的 inspector 设置为 pipenv 生成的虚拟环境是遇到了问题。...这就说明了一个问题,只要你使用pyenv 运行 which python 的时候永远都打印 /Users/admin/.pyenv/shims/python 即使它指向的是各种各样的 python 版本...比如 PYENV_VERSION = 2.5 使用的就是这个 python: $(pyenv root)/versions/2.5/bin/python2.5。...这就是为啥要在 ~/.zshrc (或者 bash 对应的配置文件)里面加上 eval "$(pyenv init -),因为要把垫片加到 PATH 的最前面。...vscode 作者之一在git issues 回答了这个问题,用 pyenv 的时候,是无法自动找到 pipenv 创建的虚拟环境的。
ENV 这会创建ENV/lib/、ENV/include、ENV/bin(Windows系统下是ENV/Scripts)几个文件夹,它们共同构成了一个完整的Python环境。...在ENV/lib/中有pip等工具用于安装第三方包,它们和系统中已安装的Python互不关联。...但是由于它是新开发的包,并吸收了virtualenv的优点,而且是自带的,所以如果你确定只在Python 3环境中使用,可以考虑使用venv。...在Python 3.3和3.4中,曾经还有一个名为pyvenv的包,不过在Python 3.6中已经过时了。现在如果要创建虚拟环境的话,建议只使用venv。...首先就是pyenv,注意它名字没有带v,所以不是创建虚拟环境的,它是用来管理多版本Python的。pyenv通过在系统环境变量之前插入一个“垫片”路径来达到切换Python版本的目的。
virtualenv 的解决方案是为每个项目创建一个独立的虚拟环境,在每个虚拟环境中安装的库,对其他虚拟环境完全无影响。所以就可以在一台机器的不同虚拟环境中分别安装同一个库的不同版本。...[image.png] 而且 pyenv 使用了垫片的原理,可以做到进入项目目录自动选择 Python 版本,使用极为方便,这也是我目前正在使用的工具。...pyenv 是开源工具,具体实现原理在我的另外一篇文章《pyenv 神器原理分析》中解析。...分别使用不同工具就很麻烦了,而且容易有冲突。为此,pyenv 引入了了 virtualenv 插件,可以在 pyenv 中解决同一个库的版本管理问题。...但由于 pyenv 的垫片功能,使用虚拟环境跟使用 Python 版本的体验一样,不需要手动执行 activate 和 deactivate,只要进入目录即生效,离开目录即失效。
pyenv就是这么一个管理多版本Python的工具。由于在Windows中我们可以同时安装多个版本的Python,所以这里是在Linux下介绍该工具。...垫片(Shims) pyenv的工作原理其实很简单,将它自己管理的Python目录插到环境变量的最前面,这样一来系统在搜索Python的时候第一个找到的就是pyenv管理的Python环境。...这个插到最前面的路径就叫做垫片(shims),当然这是在英文语境下,在中文环境下我老觉得怪怪的,反正理解意思就好。...选择Python版本 当执行pyenv命令的时候,它会按照以下顺序来决定要使用的Python版本: 使用PYENV_VERSION环境变量(如果存在)....全局的$(pyenv root)/version文件. 可以使用 pyenv global 命令来修改. 如果全局版本文件不存在, pyenv假设你使用系统安装的Python.
使用pyenv+virtualenv方式部署python多版本 pyenvvs virtualenv pyenv 是针对 python 版本的管理,通过修改环境变量的方式实现; virtualenv...pyenv原理 pyenv 的美好之处在于,它并没有使用将不同的 $PATH 植入不同的 shell 这种高耦合的工作方式,而是简单地在 $PATH 的最前面插入了一个垫片路径(shims): ~/...安装结束后,在结尾会出现上面这三行。 看是否安装成功,执行下面的命令: ? 如果返回的值是0,就表示安装成功。 如果想手动安装,可以执行此命令: 将 pyenv 检出到你想安装的目录。...10)查看当前正在使用的版本 ? 注:其中的星号表示当前正在使用的版本 11)退出虚拟环境 ? 从上图可以看出,我们真实环境依然是2.6.6版本,而虚拟环境里面是3.6.1版本。...如果想在两个版本之间切换,在每次想使用3.6.1版本的时候就输入: pyenv activate my-virtual-env-3.6.1 再输入python,就可以进3.6.1版本了。
即使对于有经验的开发人员,管理本地 Python 开发环境仍然是一个挑战。尽管有详细的软件包管理策略,但仍需要采取另外的步骤来确保你在需要时运行所需的 Python 版本。...如果是 zsh,请使用上面的命令。如果你使用 Bash,请将 ~/.zshrc 更改为 ~/.bashrc。如果你想了解更多信息,可以在 pyenv 的 README 中深入研究路径设置。...Python 3.5.9 因为我在 pyenv 中使用了 local 选项,所以它向当前目录添加了一个文件来跟踪该信息。...总结 默认情况下,运行多个 Python 版本可能是一个挑战。我发现 pyenv 可以确保在我需要时可以有我需要的 Python 版本。 你还有其他初学者或中级 Python 问题吗?...请发表评论,我们将在以后的文章中考虑介绍它们。
一开始,“类型擦除”一词似乎与 Swift 给我们的关注类型和编译时类型安全性的第一感觉相反,因此,最好将其描述为隐藏类型,而不是完全擦除它们。...使用闭包擦除类型时,其思想是捕获在闭包内部执行操作所需的所有类型信息,并使该闭包仅接受非泛型(甚至是Void)输入。...有关基于闭包的类型擦除及其更多不同方法的更多信息,请查看“在Swift中使用闭包的类型擦除”。...外部特化(External specialization) 到目前为止,我们已经在RequestQueue本身中执行了所有类型擦除,这有一些优点——它可以让任何外部代码使用我们的队列,而不需要知道我们使用什么类型的类型擦除...什么样的类型擦除是最合适的——无论是现在还是将来——当然很大程度上取决于上下文,以及我们的功能是否可以在闭包中轻松地执行,或者完整包装器类型或泛型是否更适合这个问题。 感谢阅读!? ?
不过它们有相似的地方,由于List完全没有指定泛型,因此程序可以将泛型为任意类型的List(如List、List...等)赋值给List类型的变量;类似的,程序也可将泛型为任意类型的...>似乎差别不大?真的是这样吗? 原始类型擦除了泛型 首先需要说明一点:早期的Java是没有泛型的——Java 5才加入泛型,对于90后的小朋友来说,Java 5应该是一个古老的传说了。...} } 上面①号代码使用了原始类型,这样就导致了泛型擦除——擦除了所有的泛型信息,因此程序可以在②号代码处向list集合添加String类型的元素。...那么问题来了,②号代码处是否可以向list集合(其实是List集合)添加String类型的元素呢? 如果你不运行这个程序,你能得到正确答案吗? 答案是:完全可以添加进去!...——这是因为原始类型导致泛型信息完全被擦除了。 因此你完全可以在②号代码后使用如下代码来遍历该list集合。
这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境。...代表当前系统的python 版本 2.7.1 和 3.3.5是我们用pyenv安装的 *表示当前的python版本, 可以看到, 我们还在使用的是默认的system 自带的python版本 切换python..., 而且是在虚拟环境之中 (env271) 下面基本上你就可以在这个虚拟环境里面为所欲为了,再也不用担心系统路径被搞乱的问题了。...如果要切换回系统环境, 运行这个命令即可 pyenv deactivate Pyenv默认使用的是Github Pages, 在国内访问很慢, 今天下个python老是不成功,找了下似乎没有看到国内的镜像...默认使用的是Github Pages, 在国内访问很慢, 今天下个python老是不成功,找了下似乎没有看到国内的镜像, 于是用七牛的镜像功能自建了一个。
作者丨 iximiuz 译者丨屠灵 策划丨闫园园 我从 2015 年开始使用容器,我对容器最初的理解就是把它们看成是轻量级的虚拟机,只是启动时间比虚拟机快了很多。...但很快,我意识到仅仅将容器看成是轻量级的虚拟机有点跳过简单化了,这导致我无法对以下这些问题做出判断: 容器可以做什么以及不可以做什么; 哪些是使用容器的最佳实践以及哪些不是; 哪些东西放在容器是安全的以及哪些不是...因此,它们需要有效地共存在一台服务器上。单个容器运行时关注的是单个容器的生命周期,而容器管理器关注的是在单台主机上共存的多个容器。...5 多宿主容器编配器 在单台主机上协调运行的容器已经很难了,在多个主机之间协调容器就更困难了。还记得 Docker Swarm 吗?...它们是隔离且受约束的环境,可在其中运行一个或多个进程。 按照上面的定义,至少有些容器可以使用命名空间和 cgroups 之外的机制来实现,这就不足为奇了。
>似乎差别不大?真的是这样吗? ▊ 原始类型擦除了泛型 首先需要说明一点:早期的Java是没有泛型的——Java 5才加入泛型,对于90后的小朋友来说,Java 5应该是一个古老的传说了。...上面①号代码使用了原始类型,这样就导致了泛型擦除——擦除了所有的泛型信息,因此程序可以在②号代码处向list集合添加String类型的元素。...那么问题来了,②号代码处是否可以向list集合(其实是List集合)添加String类型的元素呢? 如果你不运行这个程序,你能得到正确答案吗? 答案是:完全可以添加进去!...——这是因为原始类型导致泛型信息完全被擦除了。 因此你完全可以在②号代码后使用如下代码来遍历该list集合。...>是很规范的泛型用法,因此它不会导致泛型擦除,因此将List、List赋值给List类型的变量完全不会导致上面的错误。 List怎么处理的呢?
一开始,“类型擦除”一词似乎与 Swift 给我们的关注类型和编译时类型安全性的第一感觉相反,因此,最好将其描述为隐藏类型,而不是完全擦除它们。...使用闭包擦除类型时,其思想是捕获在闭包内部执行操作所需的所有类型信息,并使该闭包仅接受非泛型(甚至是Void)输入。...,但也可能使完全封装类型信息成为可能——使得像RequestQueue这样的对象可以在没有真正了解在底层工作的类型的任何细节的情况下进行工作。...外部特化(External specialization) 到目前为止,我们已经在RequestQueue本身中执行了所有类型擦除,这有一些优点——它可以让任何外部代码使用我们的队列,而不需要知道我们使用什么类型的类型擦除...什么样的类型擦除是最合适的——无论是现在还是将来——当然很大程度上取决于上下文,以及我们的功能是否可以在闭包中轻松地执行,或者完整包装器类型或泛型是否更适合这个问题。
虽然价格实惠,但SanDisk加强版仍然坚持使用 mlc 芯片,在写入量上与 tlc 相比有着先天优势。除此之外 SanDisk 提供三年不限写入量质保,售后基本无忧。...除了硬盘外,附件还有垫片,说明书以及质保卡。 CrystalDiskInfo 对于 SanDisk 加强版的支持度还不错,能够识别读取以及写入量。...由于 SSD 在写入数据前必须擦除当前块,如果在写入能够提前确认当前块是否为空,就可以避免先校验再写入浪费时间。...TRIM 命令能够让操作系统告知 SSD 文件已经被删除,以便 SSD 主控标记已删除数据的块。不过擦除操作何时进行则由主控自行决定。 工具选项卡提供了固件更新,安全擦除,SMART 查看等功能。...遗憾的是 SanDisk 没有推出内存缓存相关功能。 整体而言,SanDisk 加强版定位清晰,性能达标,作为第二块硬盘存储热数据是非常合适的。如果对于性能不敏感,也可以作为老机器升级的首选。
当我开始使用 Python 并创建我的第一个包时,我很困惑。创建和管理包似乎比我预想的要困难得多。此外,存在多种工具,但我不确定该使用哪一种。我相信你们大多数人过去都遇到过同样的问题。...在工作中,您使用的是 Python 3.7,而您的个人项目应该使用最新的 Python 版本(当前为 3.11)。换句话说:您希望能够安装不同的 Python 版本并在它们之间进行切换。...Python 自带一个单一用途的工具,可让您安装和管理 Python 版本:pyenv!Pyenv 很容易使用。...最重要的命令如下: # 安装特定版本的 Python pyenv install 3.10.4 # 在不同的 Python 版本之间切换 # 仅针对当前 shell 切换 Python 版本 pyenv...动机 为什么我们首先要使用环境?正如一开始提到的,项目有特定的要求(即它们依赖于其他包)。通常情况下,不同的项目需要同一包的不同版本。这可能会导致依赖冲突。
程序 安装进度很慢 在上面使用pyenv install 3.5.2 直接安装python 3.5.2 时会发现很慢,原因是此安装的操作步骤是从国外网站进行下载。...# 请从官网上下载指定的程序包 pyenv基本使用 pyenv具有管理我们python虚拟环境的功能,那么也就意味着我们可以在一台服务器上安装多个python版本供我们学习使用 常用的命令简单介绍 pyenv...安装 jupyter notebook 学习使用 jupyter notebook是一个网页版的python编写交互模式,他的功能类似于ipython,但是他使用过程很类似我们使用纸和笔操作, 可轻松擦除我们先前写的代码...windows下使用 PyCharm IDE工具连接Linux python环境 我们普遍桌面使用的计算机系统还是以windows为主,虽然也可以在windows上部署python环境,但是Windows...下有很多不兼容的问题,以及日后需要安装的模块都比较麻烦,所以建议还是在Linux上部署Python环境,然后使用PyCharm远程连接到Linux上进行Python开发 PyCharm是一个很好地python
# 在Linux下,你可以把这个选项写进入环境变量中 $ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7" >> ~/.bashrc 创建完全隔离的...但是很多情况下,人是会懒惰的,到时可能会有很多个虚拟环境散落在系统各处,你将有可能忘记它们的名字或者位置。 还有一点,virtualenv 切换环境需要两步,退出 -> 进入。不够简便。...但是很多情况下,人是会懒惰的,到时可能会有很多个虚拟环境散落在系统各处,你将有可能忘记它们的名字或者位置。 还有一点,virtualenv 切换环境需要两步,退出 -> 进入。不够简便。...现在可以使用pyenv安装几乎所有的python解释器,包括pypy、anaconda。 需要注意的是,pyenv只在电脑上搭建本地python环境。搭建python环境需要多种函数库。...当你使用VsCode或Pycharm这类集成开发环境时就会变得非常方便,因为它们可以立即识别并选择正确的解释器。
很高兴看到他的陈述进一步证实了我在 2020 年对未来发展的假设托加夫。本文总结了最重要的陈述,将它们置于上下文中,并有助于理解 TOGAF 在未来的相关性。...其中,OSDU数据平台Mercury发布、SOSA参考架构技术标准、FACE培训计划 正如我在 2020 年指出的,全球 TOGAF 认证中只有 3% 是在中国获得的。...现在 TOGAF 仍然有用吗?2022年?什么将取代 TOGAF?TOGAF 过时了吗?我的观察是,即使在今天,TOGAF 仍然具有一定的相关性。但是,它的某些部分已经过时。...此外,The Open Group 似乎针对 TOGAF 及其其他认证、框架和标准制定了新战略。史蒂夫纳恩最近的信息证实了这些想法。 什么是 TOGAF 路线图 2022?...TOGAF 标准本身的期望(例如,数字从业者) 当前版本,TOGAF 9.2,有几个过时的章节,但是,快速更新似乎不是优先事项 相比之下,TOGAF 标准应该是框架的稳定中心,而补充指南列表应该涵盖更频繁变化的主题
如果我的 iPhone 被盗,小偷可以在不知道我密码的情况下解锁它吗?答案是肯定的。下面我们就来看看小偷是如何解锁被盗的iPhone的,以便我们在日常使用中采取相应的防范措施。...iPhone密码.png 方法 1:通过猜测密码解锁 iPhone 猜测密码听起来似乎很荒谬, 但有时确实有效,尤其是当被盗的 iPhone 使用 4 位密码时。...下载完成后,iTunes 会将 iPhone 恢复到出厂设置并擦除包括密码在内的所有内容。然后小偷就可以设置和使用被盗的iPhone了。...这些工具的主要目的是帮助忘记iPhone密码的人解锁设备。由于它们通常很便宜,因此很可能被小偷用来解锁被盗的 iPhone。现在让我们看看这些工具是如何解锁的。...所以出于安全考虑,请务必使用强大的密码并启用“查找我的 iPhone”,以免发生意外。
现在可以使用pyenv安装几乎所有的python解释器,包括pypy、anaconda。 需要注意的是,pyenv只在电脑上搭建本地python环境。搭建python环境需要多种函数库。...依赖性关系管理(DependencyManagement) Python中的依赖性管理是项繁重的工作。有许多工具可以帮助完成这项任务。 我最常使用的工具是Poetry。...当你使用VsCode或Pycharm这类集成开发环境时就会变得非常方便,因为它们可以立即识别并选择正确的解释器。...但是我们仍需要手动使用这两个工具,这两个工具不是应该也自动化吗? 是的! Pre-commit可以完成一切。...我倾向于后者,因为precommit只在本地使用,而不在CI/CD服务器上。 相反,black和mypy在CI/CD服务器上运行,因此,将它们添加到项目的dev依赖项是有意义的。
领取专属 10元无门槛券
手把手带您无忧上云