【问题标题】:Calling Python from R with reticulate package使用网状包从 R 调用 Python
【发布时间】:2020-02-13 16:57:23
【问题描述】:

我想在 R 中执行 Python 脚本。我已经安装了 reticulate 并测试了 Python 版本已在我的 R 会话中正确初始化。

py_config()

返回以下内容

python:         C:/Users/username/AppData/Local/r-miniconda/envs/r-reticulate/python.exe
libpython:      C:/Users/username/AppData/Local/r-miniconda/envs/r-reticulate/python36.dll
pythonhome:     C:/Users/username/AppData/Local/r-miniconda/envs/r-reticulate
version:        3.6.10 |Anaconda, Inc.| (default, Jan  7 2020, 15:18:16) [MSC v.1916 64 bit (AMD64)]
Architecture:   64bit
numpy:          C:/Users/username/AppData/Local/r-miniconda/envs/r-reticulate/Lib/site-packages/numpy
numpy_version:  1.18.1

现在,当我调用 Python 脚本时

py_run_file("PythonScript.py")

我在 R 中遇到以下错误

Error in py_run_file_impl(file, local, convert) : 
  ModuleNotFoundError: No module named 'requests'

我知道我需要安装 requests 包,但是如何在我初始化的特定 Python 版本中进行安装?

【问题讨论】:

  • 您正在开发什么平台/操作系统? IOS? Unix?
  • 如果您在~/AppData/Local/r-miniconda 下查找conda 可执行文件,那么您可以运行conda install requests 吗?我这里没有那个 miniconda 发行版,所以我不能轻易测试它,但这似乎是一种合理的方法。另一个(也许更像是“最佳实践”)是使用虚拟环境并确保安装和维护所需的包。
  • @Onyambu Windows,因为我认为 C:/... 是 Windows 独有的。如果我错了,请纠正我。
  • 对不起我的错。我应该注意到的!你是对的
  • 我建议你需要阅读rstudio.github.io/reticulate/articles/python_packages.html,他们在其中讨论(带有示例)在使用reticulate 时如何处理python 包。

标签: python r reticulate


【解决方案1】:

你可以编写一个函数来收集丢失的包并安装它们:

run_python_file <- function(python_file){
    a = try(reticulate::py_run_file(python_file),silent=TRUE)
    if(inherits(a,"try-error")& grepl("ModuleNotFoundError",a)){
        system(sprintf("python -m pip install %s",gsub(".* |\\W","",c(a))))
        run_python_file(python_file)
      }
    else a
   }
run_python_file("PythonScript.py")

【讨论】:

  • 看来是面向未来的,明天试试
【解决方案2】:

之前需要安装python模块requests

如果你安装了 python,你应该已经安装了 pip。 您可以通过在命令行中运行pip install requests 来安装该模块。

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多