1

精简版

有什么简单优雅的使用方式renvvenvjupyterlabwithIRkernel一起用?特别是,如何renv从不在根目录中的 jupyter notebook 自动激活?

长版

我正在接受一种“多语言”数据科学风格,这意味着同时使用 python 和 R。现在venv太棒了,renv太棒了,jupyterlab太棒了,所以我试图弄清楚将它们一起使用的巧妙方法是什么。

几乎拥有它,所以可能一些提示就足以完成此设置。这就是我所在的地方。

系统

从干净的操作系统开始,并安装系统级要求:R + renv 和 Python + venv。例如在 Ubuntu 上大概是这样的:

# R
sudo apt install r-base
sudo R -e "install.packages('renv')"

# Python
sudo apt install python3.8
sudo apt install python3.8-venv

项目

现在创建一个jupyrenv包含两个文件的简单项目:

jupyrenv/
├── DESCRIPTION
└── requirements.txt

DESCRIPTION包含 R 依赖项:

Suggests:
    IRkernel,
    fortunes

requirements.txt包含python依赖项:

jupyterlab

创建虚拟环境并安装依赖项(顺序很重要,R 必须遵循 python):

# Python
python3.8 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# R
R -e "renv::init(bare=TRUE)"
R -e "renv::install()"
R -e "IRkernel::installspec()"

到目前为止非常整洁!

木星

从命令行启动 jupyter 并高兴,它可以工作了!

jupyter-lab

在此处输入图像描述

有什么不喜欢的?

不幸的是,如果我创建一个文件夹(比如说notebooks)并在那里启动一个 R 笔记本,它就不起作用:(

[I 2022-02-23 19:07:24.628 ServerApp] Creating new directory in 
[I 2022-02-23 19:07:31.159 ServerApp] Creating new notebook in /notebooks
[I 2022-02-23 19:07:31.416 ServerApp] Kernel started: 0aa2c276-18dc-4511-b308-e78234fa71d4
Error in loadNamespace(name) : there is no package called ‘IRkernel’
Calls: :: ... loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

尝试修复

似乎renv没有从子文件夹中使用,因此我们需要提示R使用它的过程。我试图在子.Rprofile文件notebooks夹中添加一个额外的文件:

jupyrenv/
├── DESCRIPTION
├── requirements.txt
├── renv
├── venv
├── notebooks
│   ├── .Rprofile
│   └── Untitled.ipynb
├── .Rprofile
└── Untitled.ipynb

具有以下内容:

.Rprofile

source("../renv/activate.R")

有点工作,但不是真的。首先,当尝试在notebooks目录中创建一个 R 笔记本时,它会创建一个新的renv

[I 2022-02-23 19:22:28.986 ServerApp] Creating new notebook in /notebooks
[I 2022-02-23 19:22:29.298 ServerApp] Kernel started: b40a88b3-b0bb-4839-af45-85811ec3073c
# Bootstrapping renv 0.15.2 --------------------------------------------------
* Downloading renv 0.15.2 ... OK (downloaded source)
* Installing renv 0.15.2 ... Done!
* Successfully installed and loaded renv 0.15.2.

然后那个 jupyter 实例可以工作,我可以使用它,但是如果我重新启动,它会停止工作并返回丢失的IRkernel错误:

[I 2022-02-23 19:24:58.912 ServerApp] Kernel started: 822d9372-47fd-43f5-8ac7-77895ef124dc
Error in loadNamespace(name) : there is no package called ‘IRkernel’
Calls: :: ... loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart

我错过了什么?

4

1 回答 1

1

我在github repo 中将这个问题作为一个问题renv打开,维护人员友好地提供了一种解决方法。的内容notebooks/.Rprofile应该如下:

owd <- setwd(".."); source("renv/activate.R"); setwd(owd)

它融合了!

于 2022-02-24T20:06:08.760 回答