R包中Python脚本读取inst目录CSV文件报错的解决方法
问题解决方法
你的问题核心是R包安装后,inst/目录结构会被扁平化:原开发目录里的inst/data.csv在包安装完成后,会直接位于包的安装根目录下;而Python脚本里写的相对路径inst/data.csv是基于当前工作目录(而非包的安装路径),自然找不到目标文件。
下面是两种可行的解决方式:
方法一:从R传递数据文件路径给Python(推荐)
这种方式无需额外依赖,逻辑更直接:
- 修改R函数,先获取数据文件的绝对路径,再注入Python环境:
rfunction <- function() { # 获取包内data.csv的绝对路径 data_path <- system.file("data.csv", package = "mypkg") # 将路径传递到Python全局环境 reticulate::py_run_string(sprintf("data_path = '%s'", data_path)) # 运行Python脚本 reticulate::py_run_file(system.file("load_csv.py", package = "mypkg")) }
- 修改Python脚本,直接使用传递过来的绝对路径:
import pandas as pd my_df = pd.read_csv(data_path)
方法二:在Python中调用R的system.file获取路径
如果希望Python自行处理路径,可以通过reticulate调用R的函数获取包内文件路径(需确保环境已安装rpy2):
修改Python脚本如下:
import pandas as pd import reticulate # 调用R的system.file函数获取数据文件路径 r = reticulate.import_r() data_path = r.system.file("data.csv", package="mypkg")[0] my_df = pd.read_csv(data_path)
关键说明
- R包构建完成后,
inst/下的所有文件会被移动到包的安装根目录,因此代码中不能再用inst/作为路径前缀。 - 两种方法的核心逻辑一致:获取数据文件的绝对路径,避免依赖不确定的相对路径。
内容的提问来源于stack exchange,提问作者Ben Nutzer
相关产品推荐
相关产品推荐

