Skip to main content

试用.Net8

· 3分钟阅读

突然挺怀念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插件

python

  • 需要安装python
  • 需要安装插件: PythonPylance 新建一个笔记本.ipynb,内核选择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

参考