ArcGIS和Anaconda3之间的python冲突(spyder用不了)解决方法

时间:2024-03-17 09:39:38

今天解决了一个长久以来面临的技术问题,趁着现在还记得怎么处理,赶紧写下来,一方面觉得以后自己还会遇到这样的问题,另一方面也为其他面临同样问题的人给点建议。

 

问题描述:

首先电脑上安装了anaconda3和arcgis10.2.其中anaconda3带有python3,arcgis10.2自带python2.之前为了在anaconda中使用arcgis的自带包arcpy,因此在anaconda的pythonpath manager中添加了gis中python安装路径。现在想想,其实添加了路径后,arcpy依然用不了,python3和python2依然是冲突的。

然后anaconda安装的时候只是改了一个安装文件夹。安装过程基本都是下一步,没有再自己设置其他的参数。最后打开spyder,每次都会出现An error ocurred while starting the kernel报错,spyder也不能用。

 

解决过程:

首先是百度,百度过程觉得还不错的解决方案如下:

https://blog.csdn.net/dongmie1999/article/details/90412231?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1​blog.csdn.net

https://blog.csdn.net/nijiayan123/article/details/81353079?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2​blog.csdn.net

这两个里面记录的方案都没有解决我的问题,但是为最终解决问题提供了思路。

重装anaconda和重装spyder以及重置spyder都没有让我的spyder可以使用,但链接2中提到可以可以看报错语句,然后根据语句确定解决方案。

然后我看了一下的语句,其中显示:

from dateutil.parser import parse as _dateutil_parse

File "D:\ProgramFiles (x86)\ArcGIS\python27\ArcGIS10.2\Lib\site‑packages\dateutil\parser.py", line 158

l.append("%s=%s" % (attr, `value`))

^

SyntaxError: invalid syntax

然后就确定是python中的dateutil模块出现的问题,因为spyder和arcgis中的模块重叠冲突。然后就接着开始百度,这怎么修正。

有说重装,也有说直接删掉的。

ArcGIS和Anaconda3之间的python冲突(spyder用不了)解决方法

这个我都试过,更新模块,重装都不能解决问题。

最后就直接把链接中提到的parser.py移除,结果还是不行,最后想着一不做二不休就直接把ArcGIS10.2\Lib\site‑packages\中的dateutil文件夹直接删除。

然后问题解决,spyder可以运行了。

但再打开spyder后加载包的时候又出现了新的问题,就是导入numpy失败,(因为这没有截屏,我就直接手写问题)

再输入 import numpy时,始终提示一个与gis文件夹中的numpy模块相关的错误。

但这个时候,我觉得不是冲突的问题了,应该是其他的问题。

在看了众多百度解答后的,觉得既然每次都指向ArcGIS文件夹中的python文件,那会不会是整个环境变量出现的问题。

然后找到环境变量,发现在path中是有anaconda的路径。说得看pythonpath中的路径,最终问题就出现在这里,里面只有GIS的路径,没有anaconda的路径,于是,添加了anaconda的路径,但修改后,还是不能解决这个问题,最后就把GIS相关路径删除,就可以导入numpy了。

ArcGIS和Anaconda3之间的python冲突(spyder用不了)解决方法

这下总算解决了问题。

最后一点总结吧:

首先是可以百度到大多数问题的解答;第二是要学会看报错的类型,根据具体的类型进行具体的操作;第三就是想想系统层面的操作,这个就主要是指系统环境。