系统变量与用户变量引发的一系列惨案
今天无意中发现一个奇怪的现象,我在 cmd 中输入 python
查看版本号时,发现跳出来的版本号居然是 python2.7 ,我安装的明明是 python3.7 的版本,这可真是奇了个怪啊!
我第一反应就是去查看环境变量。看了眼用户变量,没毛病呀!排在最前面的就是 python3.7!
我又去看了眼系统变量。
.;%JAVA_HOME%\bin;E:\Node.js;E:\Git\Git\cmd;C:\Users\yusael.atom\packages\uncrustify;E:\Matlab2014b\runtime\win64;E:\Matlab2014b\bin;E:\Matlab2014b\polyspace\bin;C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;E:\GoLand\Go\bin;E:\emacs\bin;
我看了好几遍,我确定这里根本没有出现 python 这个单词!
不信邪的我,又在命令行试了好几遍,发现出来的都是 python2.7 。那这究竟是什么原因呢?
以下是我思考问题,解决问题的过程,感觉这个问题还挺有趣,特地记录下来
我回归理性思考,电脑不会无缘无故整出个 python2.7 来,必然是哪个环境变量出了问题。于是,我删除了用户变量中的所有 python3.7 环境变量。
再次去命令行查看,发现依旧显示2.7版本。
好!那就确保用户变量没有用上,此时,困扰了我好久但是没有去解决的一个问题,我终于准备去解决了,系统变量和用户变量究竟有什么区别? 这个问题自从一开始学习 java 配置环境变量就开始困扰我,今天终于知道了他们的区别!
简而言之,系统环境变量,就是对全部用户起作用;而用户环境变量,仅仅对当前用户起作用。 更重要的一点是: 首先检索的是系统变量,在系统未完成下,是不会执行用户变量的。
由此可见,系统变量的优先级高于用户变量。
那么便没有问题了,我删除了作为用户变量的 python3.7,但是 cmd 中 python
指令仍然有效,说明肯定有某个 python2.7 环境变量藏在了系统变量中。但是字面上的确没有 python 这个单词啊!
好!那就搜索一下吧!
我打 python 搜出来的全是关于 python3.7的,因此我才以为电脑上没有装过 python2.7。然后我打了个 2
我勒个擦!居然真的出现了!?看来我的电脑真的有着 python2.7 ,并且它的优先级高于我的 3.7,虽然不是什么大问题,但是我很好奇它究竟藏在哪里。好!那就这样做吧。
让我们来看看这个小可爱究竟藏在哪!
啊咧?居然在 emcas 中。emcas 是我同学装在我电脑上的,我并没有很在意过这个软件。没想到居然上演了一出偷天换日。我立马在系统变量中把 emacs 给删除了试试,果真如此啊!
现在既然知道问题出在哪里了,那问题就解决了:我把用户变量中的 python 转移到了系统变量中去,并且放在了 emacs 之前,使得它的优先级更高,这样 cmd 里运行出来便是 python3.7 了。
问题完美解决!这次问题主要让我明白了系统变量与用户变量的区别,最重要的即系统变量的优先级高于用户变量。
或许有人会想,为什么这么无聊的问题还要发个博客记录下来?
不管问题多么细微,多么不足道,这终究是我思考探索的一个过程,或许哪一天某位道友点进这篇文章,看到这里,眉头一皱,稍微一顿,然后会心一笑,心里想着:这篇文章解决了我当时觉得很奇怪又懒得思考的一个问题呢~
仅此记录~