ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

写python的同学可能都知道python有一个virtualenv

写python的同学可能都知道python有一个virtualenv 依赖冲突总是频发, Go语言里的模块管理有时也会陷入混乱状态, 而虚拟环境的管理机制正好可以来解决这一问题。在进行编程的时候, 最让人感到烦恼的事情就是构建开发环境这一过程。在我刚刚开始学习写代码的初期阶段, 安装一个软件库的感觉就类似于去参与抽奖活动一样无法预料, 尽管我明明照着教学教程一步一步地完成了所有的操作步骤, 但是只要一到运行程序环节就会出现报错现象, 系统会提示说我缺少这里面的组件或者说缺失那里的依赖文件。经过后来的一番摸索和了解之后, 我才终于明白其中背后的原因, 主要是因为在全局范围内安装的软件包彼此之间发生了严重的冲突与矛盾, 由于某一个单独的项目所需要特定的版本依赖, 而系统在当前的配置下根本没办法将其清晰地分辨并且正确区分开来, 从而导致了最终错误的产生。折腾了好几个月, 总算是学会了使用 venv 这个工具。它的作用就像是给每一个单独的项目开启了一个独立的小单间。在这个小单间里面所安装的那些内容, 完全不会对房间外面的其他任何事情造成影响。创建的过程也很简单。只需要在项目的目录底下输入一行命令, 就会生成一个隐藏的文件夹。只要将这个环境激活, 那么后续通过 pip 所安装的所有东西, 全都只会存放在这一个小房间里。等用完之后直接把它删除, 整个系统就能保持干干净净的状态。从对比的角度来看, Go这个环境显得特别混乱, 我因为后面才接触它, 所以一开头就被搞糊涂了, 所有的东西全部都堆在同一个文件夹里, 版本号的管理完全依靠手工操作, 有时我刚写了一个新的小工具就发生事情了, 结果把原来的老项目所依赖的库就给覆盖了, 编译器直接就出现错误了。后来有人向我推荐了名为 vg 的一款软件工具, 他表示这款工具是在模仿虚拟环境的技术理念。我便尝试着安装了一番, 在试用过程中发现, 它实际所做的工作其实是建立一个独立的工作目录空间, 并对环境变量进行一定的调整修改。这样做的目的是为了使编译器在每次构建项目文件的时候, 只会在当前的项目范围内去搜寻所需的模块。尽管从体验上来看, 这种方案没有像 venv 那样显得十分轻便灵活, 但是与完全不设置任何隔离措施、处于毫无防护的状态下进行开发相比, 使用这种具有分离机制的方式显然会让人感到更加安心和舒适许多。其实, 大家得说句公道话, Go语言的那个官方机构后来推出了一个叫go mod的东西, 这个go mod彻底就把版本锁定的那个大问题给解决了, 所以现在所有的新项目都默认使用go mod了, 在这种情况下, vg这个东西就稍微有一点变得比较多余了一点了, 但是如果你说你还在照顾一些旧有的老项目, 你没有赶上那个好时机, 那你说vg这个工具还是很顶用的。那边的情况也是一样的, 虽然venv这个东西用起来很方便, 但是它现在已经属于旧时代的一种技术手段了。当前阶段, 很多人都在使用conda, 它的用处范围更加广泛, 同时还具备锁定相关依赖版本的能力。然而对于那些常规的开发者而言venv的功能已经足够满足所有需要了, 特别重要的是大家要建立起一个好习惯, 给每一份开发项目都单独创建出一个隔离的虚拟运行环境。我确实见到了很多新人的情况, 他们由于嫌弃搭建环境这一过程显得较为麻烦, 于是为了贪图一时的方便省事, 就直接选择在全局范围内安装相关的软件包。最终导致的问题是出现了错误后, 他们需要四处去进行排查, 这种浪费时间的方式, 足以抵消掉重新构建一百次独立环境所带来的效率损失。因此, 基于我个人总结的经验来加以说明: 即便是仅仅用于编写一个规模非常微小的脚本文件这一种情形之下, 也强烈建议先行建立独立的虚拟环境来进行隔离操作。采取此种措施的根本目的, 其实类似于人们日常生活中的锁门行为, 其核心意义并不在于防备外部的他人侵入, 而完全是为了防止自己在操作过程中因疏忽大意而发生误触或失误所带来的一系列不必要的后果。通过把不同语言的项目拿来放在一起进行对比可以发现, 其中的核心逻辑实际上是完全相同的。也就是需要将当前这个项目与现有的系统严格地隔离开来, 同时将该项目所依赖的那些内容和其他项目彻底地划分开。在使用具体技术手段的时候, 你可以选择使用 venv, 或者在 Go 语言中借助于 go mod 以及相应的版本管理工具来进行操作。至于你到底选用哪个方案并不重要, 最重要的关键点在于你千万不要存在偷懒的想法。最近大家还发现了一个新的趋势, 就连那种强调安全的Rust语言也都开始借鉴这种思路了, 与此同时Node语言那边有nvm和pnpm这些工具, 而Rust那边则是依靠cargo来进行管理, 本质上这都是为了把开发环境单独装进一个封闭的盒子里面, 这样看起来以后恐怕所有的编程语言都会把这个虚拟环境功能给作为默认配置带上来, 这么做的主要原因就是为了让广大开发者不再需要去经历那些繁琐折腾的过程。回过头去仔细看一看, 所谓的虚拟环境技术并不是什么特别高深或者厉害的事物, 它仅仅是一种微小的操作习惯罢了。可是, 正是这种微不足道的习惯能够替大家节省下非常多让人非常头疼和抓狂的时间。在进行编程写作的时候的话, 使用起来顺手最重要的事情就是工具的选择问题, 当开发的环境保持干净状态的时候, 人们的思维大脑才能够把注意力专心地集中在编写核心逻辑方面上去, 而不需要再去耗费精力跟那些乱七八糟的版本号码进行激烈的争论和较劲。
返回列表