【问题标题】:Is there a better solution to R CMD javareconf -e?R CMD javareconf -e 有更好的解决方案吗?
【发布时间】:2020-05-16 06:43:59
【问题描述】:

我目前正在开展一个项目,该项目旨在为 vanilla 提供应用程序 - 通过运行已实现的功能和算法 - 并且还易于扩展,以帮助其他研究人员“只需在此处插入额外的代码” “架构。

我使用的是 Python 后端的 Electron,它反过来也使用 rpy2 库与 R 进行通信。 问题是我的 Python 代码需要加载的 R 库之一使用 rJava,而我发现使语法 rpackages.importr('rJava') 工作的唯一方法是,在运行 Python 脚本之前,导出一些 R/Java 变量(我认为它是这样做的)使用命令R CMD javareconf -e,然后它在Ubuntu上运行良好。

我也在 Windows 上简单地测试了这个解决方案,但它不起作用。所以我想知道我该如何解决它,如果有另一种方法。

在 Linux 场景中,您认为在 R CMD 命令之前运行 npm start(针对整个 Electron 应用程序)会起作用吗?没有更好的解决方案吗?

我也在考虑使用 Docker 容器,但我担心这会使其他研究人员更难将他们的代码插入应用程序(例如,如果需要外部库)。

不使用R CMD javareconf -e的错误是这样的:

...............
  File "/usr/local/lib/python3.7/dist-packages/rpy2/robjects/packages.py", line 483, in importr
    env = _get_namespace(name)
  File "/usr/local/lib/python3.7/dist-packages/rpy2/rinterface_lib/conversion.py", line 40, in _
    cdata = function(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/rpy2/rinterface.py", line 791, in __call__
    raise embedded.RRuntimeError(_rinterface._geterrmessage())
rpy2.rinterface_lib.embedded.RRuntimeError: Error: .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/home/thispc/R/x86_64-pc-linux-gnu-library/3.6/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory

我已经尝试过~$sudo R CMD javareconf

【问题讨论】:

    标签: python r rpy2 rjava


    【解决方案1】:

    R 似乎安装在一个非常规的位置。可能链接器找不到它。是否按照以下命令的输出中的建议设置环境变量有帮助?

    python -m rpy2.situation LD_LIBRARY_PATH
    

    【讨论】:

    • 使用命令~$ python3 -m rpy2.situation LD_LIBRARY_PATH 给出以下输出:/usr/lib/R/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/default-java/lib/server 但它没有解决问题。我认为这是 R/Java 的问题,因为其他包加载得很好。
    • 您是否运行export LD_LIBRARY_PATH=/usr/lib/R/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/default-java/lib/server 设置了Python+rpy2 将运行的环境? (你在启动 python 之前运行 export ...,在同一个 shell 中)。
    • 哦,对不起。好的,所以我跑了~$ export LD_LIBRARY_PATH=/usr/lib/R/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/default-java/lib/server 然后启动了一个python3 shell 并尝试导入rJava:>>> import rpy2.robjects.packages as rpackages >>> rpackages.importr('rJava') 结果:(一些回溯错误和...)` raise LibraryError('The symbol' + rname + rpy2. robjects.packages.LibraryError: 包“rJava”中的符号 .env 与 Python 对象属性冲突`
    【解决方案2】:

    lang-js R CMD javareconf -e 不能在 Windows 上使用。也克服了@Colombelli 提到的错误消息的解决方案:

    rpy2.robjects.packages.LibraryError: The symbol .env in the package "rJava" is conflicting with a Python object attribute
    
    

    是下面的代码:

    rJava = importr('rJava', robject_translations={'.env': '__env'})
    
    

    归功于 M Sellwood

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2015-02-04
      相关资源
      最近更新 更多