Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
题外话:标题直接用了微软开发博客的标题。近期需要调研一个项目的可行性,github上有个相似度很高的方案,但项目是写在jupyter里的C#代码。为了能跑起来看看效果,不得已搭了套相关的环境。本来以为是老外太闲了,既然是C#代码,直接用vs写不行么,非要把代码写到jupyter notebook里,给人造成很多麻烦事。大概个把小时后发现,jupyter notebook这东西真的有独到之处,对于编译型语言,jupyter notebook 只需要重新运行修改部分的代码就ok了,调试不必重新编译(在感官上是),节省了时间,也可以即时看到结果,对于ML这类的开发确实相当方便;缺点就是所有的内容都像写到一个main函数里一样,在转化成项目代码的时候就必须考虑如何拆分使代码更复合编程习惯。
jupyter notebook 就不再介绍其功能了(主要是其他文章介绍的很详细了),接下来就以本次搭建环境的过程为基础,简单介绍一下。后学末进,不足之处,还请斧正。
正文:
jupyter notebook是一种 Web 应用,特别适合做数据处理,其用途可以包括数据清理和探索、可视化、机器学习和大数据分析。工作方式及原理简略如下图,以web应用的方式,通过请求将输入的代码在内核中计算,即时返回结果并保存到文件中。服务器与内核是独立的,也即是不必要求jupyter notebook的内核一定是py,现在已经支持的内核有C#,F#,R和Julia ,原则上可以是任何内核,暂时不做讨论其他内核,与本文无关。

安装jupyter notebook:
1.据说Anaconda的发行版上已经附带了jupyter notebook,由于本人使用的是miniconda,需要自己安装。强烈建议安装到一个新的虚拟环境下,尽量不要在conda的base环境下,避免包管理上的不便。新建虚拟环境就不展开了,我是直接在base环境上安装的,一下新增了近30个包,所以才建议使用新虚拟环境。
打开cmd命令提示框:
1. conda activate ---激活conda的base环境
2. pip install jypyter notebook ---安装jypyter notebook
3. jupyter notebook --generate-config --- 展示配置文件文件 根据路径找到自己配置文件,记事本打开,全文检索“c.NotebookApp.notebook_dir”,然后去掉注释标记,自己选择一个文件保存的路径,记得写绝对路径,避免未知错误。保存配置后退出
4.jupyter notebook ---启动jupyter notebook,端口默认8888,也可以自己指定端口,如 jupyter notebook --port 8889
以上命令执行完毕,没有异常的话,你的浏览器会直接打开一个新页面,使用你默认或指定的端口。不要关cmd命令提示框啊,关了就相当于关闭了jupyter notebook服务。此时的cmd上也会显示jupyter notebook的运行地址,注意是有token的那种路径。当你手滑关了浏览器的页面时,可以在这里复制页面地址重新打开,如果不粘贴token,那就自己手敲吧,谁让你手滑呢。
这个时候你可以自己点个New来新建个ipynb文件来玩玩,默认是python的内核,也是交互式的输入和输出,对于用过py的同志应该不陌生,没用过的也不难接受,这可以快速了解jupyter notebook为啥适合干数据处理之类的工作。

jupyter notebook的安装使用介绍告一段落了,其他的功能,本人也是两天前刚接触这个工具,无法给出更多内容供参考。
接下来是重头戏,给jupyter安装net内核。
微软的官方教程,请看参考资料第一条。请注意这个参考是有问题的,起码我的环境里问题很大。不过可以学学dotnet的命令行如下。
不想费事的直接看参考资料4,这才是正确的安装步骤。
不想费事的直接看参考资料4,这才是正确的安装步骤。
不想费事的直接看参考资料4,这才是正确的安装步骤。重要的事情说三遍!!!
以下内容为给jupyter 安装net内核的较早的方式,以及出现异常后的解决方案。
1.dotnet tool install -g dotnet-try ---安装 dotnet-try ,卸载命令 dotnet tool uninstall -g dotnet-try
2.dotnet tool list -g ---查看当前的工具列表,这条命令可以学习
3.dotnet try jupyter install ---用dotnet-try,去安装jupyter 。
官方的教程是123顺次使用。不死心的同志可以试试,没准你的环境可以把C# F#内核安装后成功运行呢。
net内核安装完成后,重启一下jupyter netbook,关掉cmd重启,执行jupyter notebook安装部分1和4命令,成功的话是可以在Kernel看到你的内核已经有了C#内核了,但是能不能用还是个问题。

能正常使用的同志,可以就此结束本文了。不能正常使用的,下面的内容或许可以参考一下。不能使用时,引入包的时候会提示异常:No design time or full build available。

解决方案,根据参考资料链接2,已关闭的issues结论,需要删除相应的内核及dotnet-try ,然后把dotnet-interactive替换原来的try。
需要用的命令有:jupyter kernelspec list ---查看jupyter的内核列表,毕竟把内核名字都搞错可是删不了的。
jupyter kernelspec uninstall .net-fsharp ---删除F#
jupyter kernelspec uninstall .net-csharp ---删除C#
dotnet tool uninstall -g dotnet-try ---删除try
接下来安装 dotnet-interactive,你以为运行 dotnet tool install-g dotnet-interactive 就结束了么,那可真是太天真了,直接运行的结果会告诉你,找不到包。
然后参考资料3会告诉你,这个包呢,需要加资源,而且名字也不是dotnet-interactive,是不是很崩溃啊。淡定,搞过py的人都知道包有别名这种坑人现象是大概率事件。
命令如下:
dotnet tool install -g --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive
这个时候你的内核才算安装成功,但是到底成功没有呢,试一下吧,还有问题的话,我也无能为力了。
参考资料:
https://devblogs.microsoft.com/cesardelatorre/using-ml-net-in-jupyter-notebooks/
https://github.com/dotnet/interactive/issues/545
https://github.com/dotnet/interactive/blob/main/docs/NotebooksLocalExperience.md
https://devblogs.microsoft.com/dotnet/net-interactive-is-here-net-notebooks-preview-2/
Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available的更多相关文章
- 开始Jupyter Notebooks
开始Jupyter Notebooks 安装Anaconda 因为不能有空格,所以没有选C:\Program Files 认识Jupyter Notebooks 修改 jupyter notebook ...
- jupyter notebooks 中键盘快捷键
键盘快捷键——节省时间且更有生产力! 快捷方式是 Jupyter Notebooks 最大的优势之一.当你想运行任意代码块时,只需要按 Ctrl+Enter 就行了.Jupyter Notebooks ...
- Jupyter Notebooks 是数据科学/机器学习社区内一款非常流行的工具
Jupyter Notebooks 是数据科学/机器学习社区内一款非常流行的工具.Jupyter Notebooks 允许数据科学家创建和共享他们的文档,从代码到全面的报告都可以.李笑来 相当于拿他来 ...
- Running cells requires Jupyter notebooks to be installed
/******************************************************************************* * Running cells req ...
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- 【精选】Jupyter Notebooks里的TensorFlow图可视化
[精选]Jupyter Notebooks里的TensorFlow图可视化 https://mp.weixin.qq.com/s?src=11×tamp=1503060682&a ...
- Jupyter Notebooks 配置
重装了三遍(破音) 一.首先进行Anaconda的下载 然后安装,将环境配置到系统变量上,如下 然后,打开 windows 的终端,检查是否配置成功 conda -V 然后就可以开始 Jupyter ...
- Jupyter Notebooks的安装和使用介绍
最近又开始重新学习Python,学习中使用到了一款编辑器Jupyter Notebooks ,非常想安利给初学python的同学.注:本文内容仅针对windows环境下安装和配置Jupyter Not ...
- 基于Jupyter Notebooks的C# .NET Interactive安装与使用
.NET Interactive发布预览版了,可以像Python那样用jupyter notebooks来编辑C#代码.具体可以在GitHub上查看dotnet/interactive项目. 安装步骤 ...
- Jupyter Notebooks usage
Important note: You should always work on a duplicate of the course notebook. On the page you used t ...
随机推荐
- curl请求https报错
curl 一般情况下请求http时不会有问题 但是请求 https 协议的链接时会报错,如下: curl: (60) SSL certificate problem: unable to get lo ...
- 【大型软件开发】浅谈大型Qt软件开发(一)开发前的准备——在着手开发之前,我们要做些什么?
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要操刀这个 ...
- ionic+vue+capacitor系列笔记--常见报错以及解决
1.Require statement not part of import statement.(@typescript-eslint/no-var-requires) 解决 .eslintrc.j ...
- Unreal学习笔记2-绘制简单三角形
目录 1. 概述 2. 详论 2.1. 代码实现 2.2. 解析:Component 2.3. 解析:材质 2.4. 解析:包围盒 2.5. 解析:Section 3. 其他 4. 参考 1. 概述 ...
- STL序列式容器使用注意、概念总结
引入 最近看了<STL源码剖析>的第 4 章和第 5 章,介绍了 C++ STL 中的序列式容器和关联式容器,本文将总结序列式容器的基础概念,不会详细它们的实现原理(想知道自个儿看书吧,我 ...
- java基础(六):面向对象
面向对象 面向对象:以类的方式组织代码,以对象组织数据 特性: 封装 继承 多态 类:抽象概念 对象:具体事物 面向对象是java学习的重中之重,毕竟java就是一个面向对象的语言~ 类 = 属性+方 ...
- drf-day4——序列化类常用字段和字段参数、序列化类source用法、序列化类定制字段返回内容的两种方式、序列化类的多表关联反序列化保存、反序列化字段校验、ModelSerializer的使用
目录 一.序列化类常用字段和字段参数(了解) 1.1 常用字段类 1.2 常用字段参数 选项参数: 通用参数: 重点 二.序列化高级用法之source(了解) 2.1 序列化定制字段名字 三.序列化高 ...
- k210 cpu、asm、rust、smpboot、ipi
介绍 k210的datasheet主要讲了与外设相关的内容,k210并不支持最新的完整的riscv指令集,而是实现了一部分.本文想要通过汇编来一点点摸索k210的寄存器,布局,mmu,缓存等结构 相关 ...
- 用ksweb+Android做服务器,搭建WordPress博客环境
旧的安卓手机不要仍,安装上ksweb给wordpress做服务器,隔壁小孩都馋哭了. 为了能在自己的安卓手机服务器上写博客,首先我们来了解一下WordPress和ksweb: WordPress是使用 ...
- C-02\规范及随机数rand()原理
小知识点 assert()函数 assert 断言函数,用于在调试过程中捕捉程序的错误.对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序 ...