renv + venv + jupyterlab + IRkernel:它会融合吗?
renv + venv + jupyterlab + IRkernel: will it blend?
简短版
将renv
、venv
和jupyterlab
与IRkernel
一起使用的简单而优雅的方法是什么?特别是如何从不在根目录下的jupyter notebook自动激活renv
?
长版
我正在接受“多语言”数据科学风格,这意味着同时使用 python 和 R。现在 venv
很棒,renv
很棒,jupyterlab
很棒,所以我想弄清楚将它们一起使用的巧妙方法。
我几乎有它,所以可能一些提示就足以完成这个设置。这就是我所在的位置。
系统
从干净的 OS 开始,并安装系统级要求: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,庆幸,它成功了!
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
进程才能使用它。我试图在 notebooks
子文件夹中添加一个额外的 .Rprofile
文件:
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
我错过了什么?
我在 renv
github 存储库中将此问题作为 issue 打开,维护人员提供了解决方法。 notebooks/.Rprofile
的内容应该如下:
owd <- setwd(".."); source("renv/activate.R"); setwd(owd)
融合了!
简短版
将renv
、venv
和jupyterlab
与IRkernel
一起使用的简单而优雅的方法是什么?特别是如何从不在根目录下的jupyter notebook自动激活renv
?
长版
我正在接受“多语言”数据科学风格,这意味着同时使用 python 和 R。现在 venv
很棒,renv
很棒,jupyterlab
很棒,所以我想弄清楚将它们一起使用的巧妙方法。
我几乎有它,所以可能一些提示就足以完成这个设置。这就是我所在的位置。
系统
从干净的 OS 开始,并安装系统级要求: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,庆幸,它成功了!
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
进程才能使用它。我试图在 notebooks
子文件夹中添加一个额外的 .Rprofile
文件:
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
我错过了什么?
我在 renv
github 存储库中将此问题作为 issue 打开,维护人员提供了解决方法。 notebooks/.Rprofile
的内容应该如下:
owd <- setwd(".."); source("renv/activate.R"); setwd(owd)
融合了!