RKeras调用Python代码时出现unknown url type: https错误求助
我之前处理过几乎一模一样的问题,给你分享下可行的解决步骤:
解决R调用Python代码(RKeras)时出现"unknown url type: https"的问题
问题梳理
你遇到的场景很典型:
- 单独在Python环境下请求HTTPS URL完全正常
- 单独在R环境下请求HTTPS URL也没问题
- 但通过R运行Python代码(比如RKeras官方文档的示例)时,反复触发致命错误:
"unknown url type: https"
经过排查,这个错误的根源在于Keras底层调用了six模块的urlretrieve()函数获取HTTPS资源,而R调用Python时的环境配置和纯Python环境存在差异,导致HTTPS支持失效。
具体解决方案
1. 确认Python环境的SSL有效性
先排除Python本身的问题,虽然单独运行正常,但R调用时可能加载了不同的环境:
打开纯Python终端,运行以下代码验证:
from six.moves.urllib.request import urlretrieve urlretrieve("https://example.com")
如果能正常执行,说明Python本身的SSL支持没问题,问题出在R调用Python时的环境配置。
2. 强制R加载正确的Python环境
R可能默认调用了系统自带的Python(这类版本往往缺少完整的SSL支持),需要手动指定你验证过的Python环境:
在R中执行以下代码:
# 替换为你实际使用的Python路径,比如~/anaconda3/bin/python或C:\Python39\python.exe Sys.setenv(RETICULATE_PYTHON = "/path/to/your/python") library(reticulate) py_config() # 查看输出,确认加载的是你指定的Python环境
3. 替换Keras中的urlretrieve实现
如果环境配置调整无效,可以直接修改Keras的代码,绕开six模块的urlretrieve,改用更可靠的requests库:
找到Keras中调用urlretrieve的文件(通常是keras/utils/data_utils.py),将类似这样的代码:
from six.moves.urllib.request import urlretrieve urlretrieve(url, filename)
替换为:
import requests with open(filename, 'wb') as f: f.write(requests.get(url).content)
这样直接用requests处理HTTPS请求,兼容性会好很多。
4. 更新reticulate包
旧版本的reticulate可能存在Python环境加载的bug,确保你用的是最新版本:
install.packages("reticulate") library(reticulate) packageVersion("reticulate")
验证修改
调整完成后,重新运行RKeras的示例代码测试,比如:
library(keras) mnist <- dataset_mnist()
如果能正常下载MNIST数据集,说明问题已经解决。
内容的提问来源于stack exchange,提问作者R.S.
相关产品推荐
相关产品推荐

