引
突然挺怀念jupyter
的,保持运行状态这个主意真是太天才了。
环境
VsCode
> code -v
1.81.1
6c3e3dba23e8fadc360aed75ce363ba185c49794
x64
Python
> python -V
Python 3.11.4
dotnet
> dotnet --version
8.0.100-preview.7.23376.3
java
❯ java -version
openjdk version "11.0.19" 2023-04-18
OpenJDK Runtime Environment GraalVM CE 22.3.2 (build 11.0.19+7-jvmci-22.3-b18)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.2 (build 11.0.19+7-jvmci-22.3-b18, mixed mode, sharing)
Vscode插件
- 核心插件: Jupyter
python
运行代码时还会提示要安装个什么包,同意就行
C#
- 安装Polyglot Notebooks插件
- 自动安装
.NET Interactive
引擎,甚至不需要python
就可以直接运行代码 - 内核使用
.NET
Java
参考Jupyter for Java,用jbang
脚本来安装。
- 需要安装了
java
(11 or later),和python
- 需要安装了
jbang
scoop install jbang
运行脚本:
# ijava (>= java9)
jbang install-kernel@jupyter-java
# 或者 ganymede (>= java11)
jbang install-kernel@jupyter-java ganymede
# 或者 rapaio (>= java21)
jbang install-kernel@jupyter-java rapaio
如果报错java.net.unknownhostexception: raw.githubusercontent.com
,说明下载不了脚本,参考这里的proxy小节
如果在VsCode中连接不上kernel
,我这里IJava/j!
正常,Ganymede/j!
连不上,查看日志:
21:23:23.764 [error] Disposing kernel process due to an error Error: Unable to start Kernel 'java (Ganymede/j!)' due to a timeout waiting for the ports to get used.
View Jupyter [log](command:jupyter.viewOutput) for further details.
> Kernel Id = .jbang-ganymede.d:\Scoop\apps\jbang\current\bin\jbang.cmd.\.d:\scoop\apps\jbang\current\bin\jbang.cmd#--java#11#--ea#-r-ea#-r--add-opens#-rjava.base/jdk.internal.misc=all-unnamed#-r--illegal-access=permit#dev.hcf.ganymede:ganymede:2.1.2.20230910#-f#{connection_file}
> at D:\Scoop\persist\vscode\data\extensions\ms-toolsai.jupyter-2023.11.1003402403-win32-x64\dist\extension.node.js:259:3149
21:23:23.764 [error] [jbang] Resolving dependencies...
[jbang] dev.hcf.ganymede:ganymede:2.1.2.20230910
看起来还是jbang
需要proxy
。
找到对应的kernel.json
:
❯ jupyter kernelspec list
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
Available kernels:
jbang-ganymede C:\Users\dev88\AppData\Roaming\jupyter\kernels\jbang-ganymede
python3 C:\Users\dev88\AppData\Roaming\Python\share\jupyter\kernels\python3
在env
增加一个JAVA_TOOL_OPTIONS
字段:
C:\Users\xkyii\AppData\Roaming\jupyter\kernels\jbang-ganymede\kernel.json
{
"argv" : [
"D:\\Scoop\\apps\\jbang\\current\\bin\\jbang.cmd",
"--java",
"11",
"--ea",
"-R-ea",
"-R--add-opens",
"-Rjava.base/jdk.internal.misc=ALL-UNNAMED",
"-R--illegal-access=permit",
"dev.hcf.ganymede:ganymede:2.1.2.20230910",
"-f",
"{connection_file}"
],
"display_name" : "java (Ganymede/j!)",
"language" : "java",
"interrupt_mode" : "message",
"env" : {
"JAVA_TOOL_OPTIONS": "-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=7890 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7890"
}
}
在第一次下载依赖时需要,后面运行时应该是不再需要了:
08:53:45.177 [info] Launching Raw Kernel java (Ganymede/j!) # D:\Scoop\apps\jbang\current\bin\jbang.cmd
08:53:45.184 [info] Process Execution: d:\Scoop\apps\jbang\current\bin\jbang.cmd --java 11 --ea -R-ea -R--add-opens -Rjava.base/jdk.internal.misc=ALL-UNNAMED -R--illegal-access=permit dev.hcf.ganymede:ganymede:2.1.2.20230910 -f ~\AppData\Roaming\jupyter\runtime\kernel-v2-10712x2DMxDTHJu57.json
> cwd: x:\xkyii.cn\code\jupyter
08:53:45.699 [warn] StdErr from Kernel Process [jbang] Resolving dependencies...
08:53:45.824 [warn] StdErr from Kernel Process [jbang] dev.hcf.ganymede:ganymede:2.1.2.20230910
08:54:13.026 [warn] StdErr from Kernel Process [jbang] Dependencies resolved
08:54:16.194 [info] Registering Kernel Completion Provider from kernel java (Ganymede/j!) for language java
08:54:16.198 [info] Kernel acknowledged execution of cell 0 @ 1704329656198
08:54:17.549 [info] End cell 0 execution after 1.351s, completed @ 1704329657549, started @ 1704329656198