在pycharm 2023.2.1中运行由R语言编写的ipynb文件
背景与目标:
项目中包含由R语言编写的ipynb文件,希望能在pycharm中运行该ipynb文件。
最终实现情况:
未能直接在pycharm中运行该ipynb文件,但是替代的实现方法有:
①能够在网页端运行由R语言编写的ipynb文件。
②能够将该ipynb文件中的内容复制到一个R语言文件(以.R
为后缀)中,然后在pycharm中直接运行该R语言文件。
一、安装jupyter
在pycharm中打开该项目,配置好项目的python interpreter,即python环境。
1、在该python环境中安装jupyter:
pip install jupyter
2、生成jupyter的配置文件jupyter_notebook_config.py
在anaconda的终端命令行中输入:
jupyter notebook --generate-config
即可生成配置文件。
如果是root用户,执行命令需要加上--allow-root
选项,即:
jupyter notebook --generate-config --allow-root
3、生成密码
在打开jupyter notebook时需要使用密码。
在anaconda的终端命令行中输入:
jupyter notebook password
出现如下提示,在xxxx
位置输入个人设置的密码即可:
Enter password: xxxx
Verify password: xxxx
[NotebookPasswordApp] Wrote hashed password to C:\Users\PC\...\jupyter_notebook_config.json
执行以上命令后,可以在C:\Users\PC\...\jupyter_notebook_config.json
看到与输入密码对应的哈希字符串:
{"NotebookApp": {"password": "xxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
}
4、将哈希密码添加到配置文件jupyter_notebook_config.py
在配置文件jupyter_notebook_config.py
中添加如下代码:
# ip设置为*
c.NotebookApp.ip = '*'
# 密码设置为sha1
c.NotebookApp.password = u'sha1:xxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 'sha1:'后面的字符串即为jupyter_notebook_config.json中的哈希字符串
# 浏览器设置不打开
c.NotebookApp.open_browser = False
# 设置固定的接口
c.NotebookApp.port = 8889
另外,如果需要指定启动jupyter后jupyter notebook的工作目录,可以在此配置文件中添加如下代码:
# 设置工作目录
c.NotebookApp.notebook_dir = 'G:\....'
如果不指定启动jupyter后jupyter notebook的工作目录,在anaconda终端命令行启动jupyter时所在的目录路径即为启动jupyter后jupyter notebook的工作目录。
参考:
远程jupyter+pycharm配置 (一)之安装与使用技巧
配置jupyter notebook-----更改工作目录
二、启动jupyter
2.1 启动jupyter服务器
在anacodna终端命令行中激活安装了jupyter的虚拟环境,然后使用下方命令启动jupyter:
jupyter notebook
运行成功时,终端出现类似如下内容的响应:
[I 16:52:50.678 NotebookApp] Serving notebooks from local directory: G:\....
[I 16:52:50.678 NotebookApp] Jupyter Notebook 6.5.4 is running at:
[I 16:52:50.679 NotebookApp] http://....:8889/
[I 16:52:50.679 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
其中,G:\....
指在步骤一中指定的工作目录路径(如果步骤一中没有指定,则会指向启动jupyter时所在的目录路径),http://....:8889/
指用浏览器查看jupyter notebook的网址,将此网址复制到浏览器后输入密码(在步骤一中个人设置的密码,不是哈希字符串),即可看到工作目录路径下的文件列表。
2.2 在网页端运行ipynb文件
打开工作目录路径中的某个自己创建的ipynb文件,如果刚打开文件时,界面右上角显示“内核就绪“(一段时间后消失)、有下图所示的标志且文件中单元格的代码可以正常运行,则说明在网页中可以正常使用jupyter notebook运行ipynb文件。
若在网页端对ipynb文件进行了修改,保存后,pycharm中查看该文件可以发现该文件已同步修改。
环境信息:python==3.11.4, jupyter=1.0.0, ipykernel=6.19.2, tornado=6.4.1
2.3 在pycharm窗口直接运行ipynb文件?[未成功]
需要先复制网址到浏览器、在浏览器中运行ipynb文件不如在pycharm窗口中直接运行ipynb文件方便。但是目前试了很多方法,都无法在pycharm窗口中直接运行jupyter notebook,只能在网页端运行。
试过的方法包括直接使用managed server和配置jupyter server,都遇到报错,未能解决。
2.3.1 直接使用managed server
若直接使用managed server,无法连接jupyter服务器,会出现如下报错信息,不懂是什么意思。
Connect to DESKTOP-xxxx:8889 [DESKTOP-xxxx/172.27.48.1, DESKTOP-xxxx/192.168.3.13, DESKTOP-xxxx/192.168.3.10, DESKTOP-xxxx/fe80:0:0:0:ea0f:7ecd:6717:1fb9%42, DESKTOP-xxxx/fe80:0:0:0:8fbf:8ab7:7778:7036%13, DESKTOP-xxxx/fe80:0:0:0:e19a:6625:31bc:f80c%12, DESKTOP-xxxx/fd62:fe1e:c324:8700:d01e:faeb:af2:c4a2, DESKTOP-xxxx/fd62:fe1e:c324:8700:7d0:ca8f:4bde:9c9a] failed: Connection refused: connect
2.3.2 配置jupyter server
参考远程jupyter+pycharm配置 (一)之安装与使用技巧,在配置jupyter servers时,不使用managed server、使用configured server,尝试输入的Jupyter Server URL有:
-
http://…:8889/(在2.1中得到)
-
http://…:8889?token=(”…“的内容写成了localhost或者127.0.01)
-
http://…:8889?token=xxxx(”…“的内容写成了localhost或者127.0.01)
-
http://…:8889/?token=xxxx(”…“的内容写成了localhost或者127.0.01)
点击Apply按钮后均得到Jupyter Server URL is malformed
(格式不正确)的报错信息。文章Pycharm2023.1连接远程jupyter notebook遇到的问题的作者建议不要钻牛角尖。
经过多次尝试后,发现不管填写的Jupyter Server URL是什么,如果jupyter server还没有启动,这些URL都会被认为是”malformed“的。先在anaconda终端命令行中启动jupyter,再填写这个URL(写成http://....:8889
(最后一个"/"可有可无;这个URL需要手动输入密码)或者http://....:8889?token=xxxx
(这个URL不需要手动输入密码)),就不会再出现格式不正确的报错信息。
但是,配置完成jupyter server后,仍会弹出如下报错信息,暂时没找到解决方法。
Error with connection to Jupyter: server responded with 403 on Request(method=GET, uri=http://DESKTOP-IC2DEU6:8889/api/kernelspecs/, headers=[], body=null, redirectLimit=10, context=Context(mayInteractUi=true)). [200] was expected.
网上提到的解决方法有:
-
使用其他版本的Pycharm
-
修改tornado版本为5.1.1(对应的python版本也要修改,与5.1.1的tornado适配的python版本是3.7)(参考文章Pycharm无法使用jupyter)
创建一个新的python虚拟环境尝试后无效。默认安装的tornado版本>6,此时只降低tornado版本甚至会出现在网页端无法连接内核的问题。
与5.1.1的tornado冲突的包有:terminado、notebook、jupyter-server、jupyter-client、ipykernal。感觉需要多个包版本协调才有可能克服这个问题,但是追溯起来有些复杂,暂时作罢。
-
修改tornado版本为4.5.3(问题同上)
-
修改ipykernel版本为4.5.2(问题同上)
三、安装R和R内核
3.1 安装R
安装R的过程可参考文章如何在 Pycharm 中高效使用 R 语言 (图文详解)。
3.2 安装IRkernel
安装R后,打开R console,R console窗口如下图所示。
1、在R console中输入下方命令,安装IRkernel:
install.packages('IRkernel')
等待一段时间即安装完成。最终提示下载的二进制程序包在C:\Users\PC\AppData\Local\Temp\RtmpMNCSMh\downloaded_packages
里
2、在R console中输入下方命令,在当前R安装中注册kernel:
IRkernel::installspec()
执行此命令后,会安装一个名为ir
的内核。
3、在R console中输入下方命令,指定kernel安装范围为全系统(而不仅是当前用户):
IRkernel::installspec(user = FALSE)
4、在anaconda终端命令行中(启动任一环境均可)使用下方命令检查当前jupyter可使用的内核,检查内核安装是否成功:
jupyter kernelspec list
如果列出的Available kernels
中出现ir
(如果先前使用过python,列表中一般还会有python3
)即说明R内核安装成功。
此时启动jupyter,在网页端打开工作目录中的某个R语言编写的ipynb文件,如果默认使用的还是python3的内核(看界面右上角可知使用的内核),可以点击"kernel"->”Change kernel“->"R"更换内核为R内核。
参考:juypyter notebook安装 R核(IRkernel)
四、在pycharm中运行R语言文件
4.1 安装R相关的插件
在Pycharm中点击"Files"->“Settings”->“Plugins”->“Marketplace”,在搜索栏中搜索安装插件“R language for Intellij”。
等待一段时间后即可安装完成。
4.2 编辑R的环境变量
在windows中搜索环境变量,点击“环境变量”,选中系统变量的中“Path”,点击“编辑” ->“新建” ,将R安装的路径(具体到bin
文件夹,如G:\Software\R\R-4.4.1\bin
)添加进去。
参考:pycharm实现R语言运行环境安装配置的实现步骤
4.3 在Pycharm中配置R解释器
在Pycharm中点击"Files"->“Settings”->“Project: xxxx”->“R Settings”,在Project R Interpreter处添加(Add)R解释器,选择4.2中配置的R安装路径下的R.exe
,即G:\Software\R\R-4.4.1\bin\R.exe
。
此时出现提示:Unsupported R version: '4.4.1'. Do you want to continue?
,点击继续,后续发现并不影响使用。
之后就可以在Pycharm中运行R语言程序了(虽然同样不能直接在Pycharm窗口中运行由R语言编写的ipynb文件,但是可以将其中的内容复制到R语言文件中运行)。