R Markdown使用reticulate调用pandas出现ModuleNotFoundError求助
问题根源
你遇到的矛盾是因为两个完全独立的虚拟环境被混着用了:
- 你通过
knitr::opts_chunk$set指定的Python路径是Windows文件系统下的虚拟环境:/mnt/c/Users/steve/workspace/EDGI/EEW-ReportCard-Data/venv/bin/python - 但
virtualenv_create('venv')默认在WSL本地的/home/steve/.virtualenvs/目录创建了另一个虚拟环境,py_install把pandas装到了这个本地环境里
当你执行import('pandas')时,reticulate调用的是你指定的Windows路径下的venv——这个环境里根本没装pandas,所以报错。
解决办法
两种方案任选其一:
方案一:用你指定的Windows路径下的虚拟环境
- 先清理自动创建的本地冗余venv(可选):
virtualenv_remove('venv')
- 修改代码,让
virtualenv_create直接指向你原本设置的Windows路径:
knitr::opts_chunk$set(engine.path=list(python='/mnt/c/Users/steve/workspace/EDGI/EEW-ReportCard-Data/venv/bin/python')) library(reticulate) # 指定虚拟环境的完整路径,和engine.path对应 virtualenv_create(envname = '/mnt/c/Users/steve/workspace/EDGI/EEW-ReportCard-Data/venv') py_install('pandas', envname='/mnt/c/Users/steve/workspace/EDGI/EEW-ReportCard-Data/venv') u <- import('pandas')
方案二:用WSL本地的虚拟环境
放弃Windows路径的venv,统一用reticulate默认创建的本地环境:
library(reticulate) virtualenv_create('venv') py_install('pandas', envname='venv') # 显式激活这个本地虚拟环境 use_virtualenv('venv') u <- import('pandas')
额外提示
- WSL访问Windows文件系统的虚拟环境可能有权限或兼容性问题,优先推荐用WSL本地的虚拟环境
- 执行
py_config()可以查看当前reticulate正在使用的Python环境,方便确认路径是否正确
内容的提问来源于stack exchange,提问作者user263782
相关产品推荐
相关产品推荐

