Anaconda闪退的问题AttributeError: 'str' object has no attribute 'get'
今天不知道什么原因, 突然anaconda-navigator界面无法启动,闪退,用prompt打开,报错如下,
anaconda-navigator
2019-03-01 20:27:19,492 - ERROR download_api._get_url:416
Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 539, in setup
self.post_setup(conda_data=conda_data)
File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 576, in post_setup
self.tab_home.setup(conda_data)
File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\tabs\home.py", line 169, in setup
self.set_applications(applications, packages)
File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\tabs\home.py", line 204, in set_applications
apps = self.api.process_apps(applications, prefix=self.current_prefix)
File "d:\Anaconda3\lib\site-packages\anaconda_navigator\api\anaconda_api.py", line 888, in process_apps
versions=[vsdata.get('productVersion')],
AttributeError: 'str' object has no attribute 'get'
这可真是奇了,于是打开原码看了一下,vsdata的version没有信息,那么vsdata此时应该是无法访问的,因为出问题了,
d:\Anaconda3\lib\site-packages\anaconda_navigator\api\anaconda_api.py", 第888行写的是,
if not vscode_conda_package_exists:
if apps_vscode_enable and self.is_vscode_available():
vsdata = self.vscode_application_data() # Check vscode version
app = GLOBAL_VSCODE_APP
display_name = 'VS Code'
#print("vsdata", vsdata)
applications[app] = dict(
name=app,
display_name=display_name,
description=APPS_DESCRIPTIONS[app],
versions=[vsdata.get('productVersion')],
command=self._VSCODE_EXE,
image_path=image_paths[app],
needs_license=False,
non_conda=True,
)
那么沿这这条线查了一下vscode_data, 并添加了一句打印代码,如下,
def vscode_application_data(self):
"""Get vscode data from microsoft rest api."""
data = {}
url = self._VSCODE_ENDPOINT
print("vscode endpoint url:", url) //本人添加的调试代码
if url:
data = self._download_api.get_url(
url=url,
as_json=True,
non_blocking=False,
)
return data
找印结果如下,
vscode endpoint url: https://update.code.visualstudio.com/api/update/win32-x64-user/stable/version
我查了一下,这个url此时是无效的,也就是说vscode的官方网站今天有问题,导致vscode无法访问用不了。
总结原因:
是无法访问vscode网站导致anaconda-navigator不能启动,(不能在anaconda-navigator界面中启动vscode图标)
解决办法:
更具体我也不知道怎么办,于是干脆注释掉这一段,
“”“
if not vscode_conda_package_exists:
if apps_vscode_enable and self.is_vscode_available():
vsdata = self.vscode_application_data() # Check vscode version
app = GLOBAL_VSCODE_APP
display_name = 'VS Code'
#print("vsdata", vsdata)
applications[app] = dict(
name=app,
display_name=display_name,
description=APPS_DESCRIPTIONS[app],
versions=[vsdata.get('productVersion')],
command=self._VSCODE_EXE,
image_path=image_paths[app],
needs_license=False,
non_conda=True,
)
"""
现在的问题来了, anaconda能正常启动,但是vscode还是不能出现在图形界面中,先这么这吧!真不喜欢这些抽风的问题,费时间!
那么这时如何在特定环境中启动vscode呢,比如我要启动的环境名称是torch, 那么,
Anaconda Prompt ===>>> conda activate torch ===>>> code (启动vscode, 一般安装目录能自动识别,如果找不到就搜索一下吧)
进入界面后,启动vscode的terminal, 同样 conda activate torch一下,注意,” conda activate torch“这一句写了两次,实际上你只需要运行一次即可,要么在Anaconda Prompt中,要么在vscode的terminal中,效果是一样的。
唯一不爽的是,你不能在anacona-navigator的图形界面中启动vscode。
后续正常情况
当然,如果第二天发现vscode官网可以正常访问了,你把注释的代码改回了就是了,一切都会恢复正常!!!
此时如果把那个能访问的vsdata打印出来,就是
vscode endpoint url: https://update.code.visualstudio.com/api/update/win32-x64-user/stable/version
vsdata {'url': 'https://vscode.cdn.azure.cn/stable/1b8e8302e405050205e69b59abb3559592bb9e60/VSCodeUserSetup-x64-1.31.1.exe', 'name': '1.31.1', 'version': '1b8e8302e405050205e69b59abb3559592bb9e60', 'productVersion': '1.31.1', 'hash': '43c2aecb9e1d65759dbe11ee5cb62030a2d06567', 'timestamp': 1549938223872, 'sha256hash': 'f213ab6f6646bd80b0606e3d52db9219eb539f586779720e52ed12b9d9732fb1', 'supportsFastUpdate': True}
如果你嫌麻烦,要避免网络原因导致的vscode问题,那么可以把上面代码中的version信息改一下,这时vscode不再查检更新情况,
把
versions=[vsdata.get('productVersion')],
改成
versions=["1b8e8302e405050205e69b59abb3559592bb9e60"],