【Anaconda】多个python环境下的报错"virtualenv"' 不是内部或外部命令,也不是可运行的程序

整个解决的过程非常坑,主要是因为VS2017自带python,同时安装的Anaconda也有python,同时添加了环境变量

请不要照着做,请看完明白为什么后自己按照原理进行排错

 

首先在cmd中运行python需要激活Anaconda对应的python解释器

如上图,提示需要激活conda对应的python环境

Win搜索框并查看python的属性,发现默认的python解释器的指向为:

 

"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe"

这应该是之前安装VisualStudio 2017 Pro 的时候由于选了数据科学一项,而自动配置下载的

但是由于又VS又自动帮忙安装了Anaconda,而这个软件又会自动帮忙下载和管理Python虚拟环境,于是就出现了冲突

Anaconda对应的目录中其实也有python的包:

这个python解释器虚拟环境显然和上面的VS的shared目录下的Python34_64的python不是一个东西

 

首先尝试将Shared的这个版本的python用起来,作为全局的python解释器

将这个变量添加到系统变量:

"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe"

注意要去掉后面的python.exe

即添加到系统path的字符串为:

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\

添加后发现仍然不行:

猜测是Anaconda的path配置在刚刚添加的上面,而windows的解释算法默认是从上到下的顺序扫描,扫到第一个匹配的

就退出:

尝试将刚刚添加的shared目录下的python环境向上移动到Anaconda的前面:

重启CMD再次运行python命令和mkvirtualenv命令

看一下路径:

果然正常了

但是mkvirtualenv命令依然不正常:

同时在给pycharm配置python解释器的时候发现选择shared文件夹中的python的自带的包中没有virtualenvwrapper,而只有

virtualenv:

怪不得每次输入mkvirtualenv的时候只能识别出中间的部分命令“virtualenv”,这分明就是当作virtualenv的语法来处理:

发现pip3在终端cmd中也无法被识别,于是找到shared目录对应的pip3将其添加到系统环境变量中:

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts

重启cmd,再次查看pip3的包列表:

果然这个环境中根本就没有virtualenvwrapper

所以重新下载一下virtualenvwrapper-win:

下载后发现依然不行?

到底是为什么.....

以为是virtualenv没有安装,尝试使用pip3去下载对应的virtualenv,结果发现一个更加麻烦的事情:

这个Shared目录下的python的包管理和python本身不在一个目录下,这是MicroSoft想出来的什么操作...

【下面会解释为什么我确定了这个包管理目录是MicroSoft Visual Studio自带的python的】

 

 

 

尝试再次运行mkvirtualenv命令,发现此时报错提示由于没有指定参数,被传给virutalenv去执行,然而此时的virtualenv仍然异常

发现此时的python依然默认选用的MicroSoft Visual studio默认附带安装的Shared 目录下的python

而且发现了其默认存储安装包的位置就是

 C:\\Users\\DELLT620\\AppData\\Roaming\\Python\\Python36\\site-packages

怪不得之前进这个目录只有包没有python.exe,原来是默认是分离管理的

再分析一下此时的环境变量:

原来刚才添加的时候,shared目录下python3.6.6的pip的优先级依然低于Anaconda3_64下的pip的优先级

因为Shared目录下的Scripits的路径在Anaconda的下面

再次调整优先级,确保cmd中pip和python对应的是通过一个python系统

重启CMD,再次运行pip命令

pip终于正常了,之前有近百个包,应该全是Anaconda帮助自动配置的科学计算的包

然后再次尝试使用virtualenvwrapper-win 的 workon 命令:

然后尝试基本的mkvirtualenv env_name 命令:

好的,出现了一个新的报错,在网上找找答案

参考: CSDN博客

这个博客大概说了就是DirectX 的SDK的BUG,在path中添加了双引号导致的报错

再次查看环境变量:

并没有DirectX....

然后查到一篇帖子:

怎么和上面的博客恰好相反呢?

先试试再说,再次打开环境变量,将所有路径中含有Microsoft的变量全部打上双引号:

关闭cmd再次运行mkvirtualenv:

好的,现在都找不到这个东西了....

果然python命令也失效了,改回来:

等等,忽然想起来转义字符的问题:

将之前的双引号重新加上,然后将单斜线改为双斜线,再次重启cmd:

感觉接近解决了!!!

看来\Microsoft报错真的就是因为路径中有空格的错误引用!

最终发现这样还是有问题,查到了一种解决路径中有空格但是又要添加环境变量的解决办法:

使用软链接,首先配置WORKON_HOME:(将之前手动添加到用户变量中的workon路径删除掉)

可以看到,再次运行workon就没有任何报错了

但是很快发现了一个新问题,这个软连仅再当前的shell窗口有效,一旦重新开一个shell,则窗口就失效了

又仔细思考了一下,之前没有加括号的时候,运行python也没有问题,可以正确地在bash中运行

那么应该还有最后一种可能性!!!!

可能是权限问题!!!!

而我记得WORKON_HOME的用户变量是可以自己来确定的(这里网上转的非常火的博客都说错了,可以是一个空的文件目录,这个路径仅仅是用来保存生成的一套python环境,包含python的版本和相应的python的安装的包

想到这里,我首先重新设置了用户变量WORKON_HOME: (在Q盘新建了一个空的文件夹workon_Envs)

然后马上管理员模式打开cmd,卸载了之前在普通用户权限下安装的virtualenv和virtualenvwrapper

然后重新pip install 

再次尝试运行命令workon和mkvirtualenv命令,可以看到,使用的python环境就是之前我们调整优先级配置的

Microsoft Visual Studio 默认附带安装的python3.6.6

 

果然好了!!!!

打开用户权限的cmd,果然也一切正常了!!!!

这么复杂的问题,我怀疑也和操作系统版本有关,我之前也没有遇到过这种情况,这次可能是因为系统是

win10 server版本的原因

配一个环境用了这么久,但是总算是弄好了,开心!!!!

科学探索的路上总是充满荆棘险阻,自勉!!!!

这个问题折磨了我一个晚上加一个上午,终于解决,希望对你有帮助!

 

 

 

 

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值