在tinycolinux上编译jupyter和rootcling组建混合cpp,python学习环境

简介: 本文关键字:升级/枚举tinycorelinux上的gcc,在tinycorelinux上安装python jupyter

本文关键字:升级/枚举tinycorelinux上的gcc,在tinycorelinux上安装python jupyter

在前面《tinycolinux上编译odoo》中我们谈到python在流行的“one host one guest”学习语言选型组合中是对应于cpp的,还谈到一些混合语言工具,如terralang,rootcling等,见《发布qtcling》和《发布terracling》,技术界二二相对的事物总有惊人的对应:cpp,py组合的cling就相当于lua,c组合的terralang:

事实上该如何评价cling和c++,py的关系呢:要把rootcling当工具而不是语言。它是搭建一个混合C++和PY的语言系统的REPL环境和学习平台的极好工具,但是我们要实际拿来用中心依然是分开了的,独立的二门语言,即C++和PY --- 毕竟C++历史上不是以REPL方式拿来用的,terralang之于lua+c也是一样的道理。

在更早一些的文章中我们提到和发布过《发布engitor》,jupyter只不过是IDE B/S化了,想象那个python idle ide,jupyter pythonkernel notebook本身就是这个IDE的在线化和极大化(它支持更多语言和可渲染HTML等)。只不过,在那里我们还以技术狂想的形式设想了它其它方面的用途:它还可能与服务器运行设施结合,给设计人员或开发人员提供在线支持开发的可能for both maintainer and developer(传统上都是线上运营线下开发),更进一步,它还可以发展成visual builder技术,以实现applevel同时在线运行和可视化编辑的平台,我们称它为appstackx。

可视化的基础概念是以拖拉方式就能使其在一起工作的可复用件,以前是lib reuse,组件就是一些二进制接口透露出来的服务就能成为可复用件的东西,是demo as reuseable software componets当然,脚本语言的组件天然是源码形式的。无论如何,这距我们的理想:tool as framework but not engine又进了一步:它使得中心可复用件的engine变得谈化,用随手能找到的工具来代替,由于工具不准备作复用件进入架构层,所以就谈化了架构的存在降低了学习成本使得软件开发真正意义上变成了组装测试----要知道,为庞大复杂的软件系统划模块定接口是一件多么可怕的事,而一个新手随便找到能工作起来的东西搭个系统可以给他多大的自信和帮助(以后深入学习组件内部)。这叫入阶平滑无欺。

下面,我们在tinycolinux上一步一步建立起这个REPL环境和其jupyter支持(root cling源码中有支持将这个c++ repl kernel为jupyter使用的模块clingkernel和kernel.json文件),这就需要同时在tinycolinux源码编译出rootcling,python等,又涉及到编译最新的cmake,所以不妨看下《在tinycolinux上创建应用》的开头我们为一个全新平台准备gcc toolchain支持的描述 --- 我们这里只升级GCC和GCC里面带的LIBSTDCXX,而会不是GLIBSTDC。

在tinycolinux上编译gcc 4.8.1和cmake

首先,cling会用到新的支持C++11的GCC来编译且会引用到GCC的头文件来运行,所以我们使用在前文一直使用的gcc4.6.1来bootstrap到4.8.1,下载4.8.1的源码http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.1/gcc-4.8.1.tar.bz2,在/home/tc下解压它,cd gcc-4.8.1 && ./contrib/download_prerequisites 会把编译用到的库下载解压好,我们想直接覆盖原来的GCC461安装,所以直接 cd .. && mkdir gcc481build && ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib && sudo make install,由于不带prefix,它配置出来的configure和make之后的结果会默认安装并覆盖GCC461,也会升级libstdcxx.so,这样就完成了我们的目的:在本系统上枚举一个新的高版本的gcc,gcc -v 发现输出4.8.1。

由于编译GCC,PYTHON,和接下来的CLING,可能会产生大量中间文件,所以tinycolinuxhd镜像放大为4G,将新GCC产生的/usr/lib/libstdc++.so改动链接指到/usr/local/libstdc++.so.6.0.18,而非随系统自带的libstdc++.so.6.0.13,否则接下来的CMAKE在./configure过程中会提示找不到c++stdlib 4.3.15,而且,4.x的curl.tcz,expat2.tcz,git.tcz,libssh2.tcz,libssl-0.9.8.tcz,openssl-1.0.0.tcz,sqlite3-dev.tcz全部下好按以前安装tcz的方法安装好,未来都有用。

现在安装升级cmake(在lnmp src中有一个旧版本2.x的cmake),以前的cling和llvm都是用标准./configure的现在都改用CMAKE了,依然配置安装到默认/usr/目录,我下载的源码是cmake-3.10.1.tar.gz,在/home/tc下解压./configure && sudo make install,cmake -v发现是3.10。

安装在前文《编译odoo》中的python,由于jupyter会用到sqlite3模块,所以安装完sqlite3-dev.tcz重新源码跑一次并安装,(最好重启一次)python的./configure会自动发现sqlite3开发库会生成_sqlite3.pyd之类的支持。

这三大件准备好了就差不多了。

在tinycolinux上编译root cling和配置jupyter支持

跟下载gcc481源码一样,用GIT工具(上面提到要安装tcz)以以下过程分别检出llvm,clang,cling的源码(编译llvm会统一编译clang,cling),我检出是20180115左右前后的版本,为了控制tinycolinuxhd大小,检出后删除根下.git和tools/clang,tools/cling下的.git:

git clone http://root.cern.ch/git/llvm.git src

cd src
git checkout cling-patches

cd tools
git clone http://root.cern.ch/git/cling.git
git clone http://root.cern.ch/git/clang.git

cd clang
git checkout cling-patches

cd ../..
AI 代码解读

建立与src并列的clingbuild,执行以下CMAKE配置过程:

cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_INSTALL_PREFIX=/usr/local/cling -DPYTHON_EXECUTABLE=/usr/local/python/bin/python2.7 -DLLVM_TARGETS_TO_BUILD="XCore;X86" -DLLVM_BUILD_LLVM_DYLIB=true -DLLVM_LINK_LLVM_DYLIB=true -DLLVM_BUILD_TOOLS=false -DLLVM_BUILD_EXAMPLES=false -DLLVM_BUILD_TESTS=false -DLLVM_BUILD_DOCS=false ../src

以上cmake配置过程会显示cling未来会引用GCC481的哪些路径下的头文件,如果找不到就直接调用GCC动态调试路径。

编译并安装cmake --build . ,编译完整个cling会占用大约2G不到,sudo cmake --build . --target install安装,安装也才300多M。

测试一下/usr/local/cling/bin/cling发现是5.0.0版本,现在来开启它源码自带的jupyter支持。首先在python中开启juypter notebook:

sudo /usr/local/python/bin/pip install jupyter,安装完后运行:/usr/local/python/bin/jupyter notebook --ip=0.0.0.0,(有时默认只绑定127.0.0.1),可以看到python2.7的kernel已在ip:8888下完全正确运行了。

当然,如果嫌老是打全路径太麻烦,可以export PATH=(注意等号左右无空格)$PATH:/usr/local/python/bin。

现在,将cling源码下附带的jupyter支持开启,到/usr/local/cling/lib/jupyter/下,会发现有setup.py和几个文件夹里有kernel.json文件。

首先为python安装clingkernel支持,就是setup.py能做到的:sudo /usr/local/python/bin/python /usr/local/cling/lib/jupyter/setup.py

然后将某一个文件夹里的对应的 kernel.json注入到jupyter,让它知道:sudo /usr/local/python/bin/jupyter kernelspec install /usr/local/cling/lib/jupyter/某kernel.json所在文件夹。

完工,重新开启jupyter notebook会发现可用的c++ repl !!


始终要记得,这是一个混合了python和C++的repl学习环境和工具,缺一不可成就cpp,py这对one host one guest好CP。下面就介绍在tinycolinux上安装terralang吧。


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

目录
打赏
0
0
0
0
2
分享
相关文章
Python学习的自我理解和想法(16)
这是我在B站千锋教育课程中学Python的第16天总结,主要学习了`datetime`和`time`模块的常用功能,包括创建日期、时间,获取当前时间及延迟操作等。同时简要介绍了多个方向的补充库,如网络爬虫、数据分析、机器学习等,并讲解了自定义模块的编写与调用方法。因开学时间有限,内容精简,希望对大家有所帮助!如有不足,欢迎指正。
Python学习的自我理解和想法(18)
这是我在学习Python第18天的总结,内容基于B站千锋教育课程,主要涉及面向对象编程的核心概念。包括:`self`关键字的作用、魔术方法的特点与使用(如构造函数`__init__`和析构函数`__del__`)、类属性与对象属性的区别及修改方式。通过学习,我初步理解了如何利用这些机制实现更灵活的程序设计,但深知目前对Python的理解仍较浅显,欢迎指正交流!
|
23小时前
|
Python学习的自我理解和想法(19)
这是一篇关于Python面向对象学习的总结,基于B站千锋教育课程内容编写。主要涵盖三大特性:封装、继承与多态。详细讲解了继承(包括构造函数继承、多继承)及类方法与静态方法的定义、调用及区别。尽管开学后时间有限,但作者仍对所学内容进行了系统梳理,并分享了自己的理解,欢迎指正交流。
|
2月前
|
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
292 82
Python学习的自我理解和想法(17)
这是我在学习Python第17天的心得总结,基于B站千锋教育课程。今天主要学习了面向对象设计,包括其优缺点、基本概念(类与对象)、定义类、创建对象及调用方法等内容。面向对象编程虽增加了复杂性,但具备可重用性、可维护性、可扩展性和可理解性等优势。文中结合实例阐述了类与对象的关系,并分享了个人理解。因开学时间有限,内容简略,不足之处敬请指正,感谢阅读!
Python学习的自我理解和想法(14)
这是学习Python第14天的总结,基于B站千锋教育课程内容。重点介绍了`math`模块的常用功能,如取绝对值、向上/向下取整、计算π值、幂运算、对数、三角函数等。这些函数广泛应用于科学计算、数据分析和工程领域。通过掌握`math`模块,可实现高效数学运算,甚至编写计算器程序。尽管开学后时间有限,但仍坚持每天学习一到两个模块,希望读者谅解内容简略之处。如有错误,欢迎指正!
Python学习的自我理解和想法(12)
本文记录了学习Python第12天的内容,主要包括回调函数、闭包函数、函数作用域、filter方法、map方法和装饰器函数等核心概念。通过定义、语法、实例及优缺点分析,深入浅出地讲解了这些技术的应用场景与实现方式。其中,回调函数适合异步编程,闭包可访问外部变量,装饰器用于增强函数功能而不改变原代码。文章基于B站千锋教育课程整理,非原创代码,旨在分享学习心得,欢迎指正!
[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行
本文探讨了编程语言中的动态类型与静态类型、强类型与弱类型的概念。通过实例分析,如Python允许变量类型动态变化(如`age`从整型变为字符串),而C语言一旦声明变量类型则不可更改,体现了动态与静态类型的差异。此外,文章还对比了强类型(如Python,不允许隐式类型转换)和弱类型(如JavaScript,支持自动类型转换)的特点。最后总结指出,Python属于动态类型、强类型语言,对初学者友好但需注意类型混淆,并预告下期内容及提供学习资源链接。
79 22
Python学习的自我理解和想法(21)
这是一篇关于Python文件操作的学习总结,基于B站千锋教育课程内容整理而成。文章详细介绍了文件操作的基础知识,包括参数(路径、模式、编码)、注意事项(编码一致性、文件关闭)以及具体操作(创建、读取、写入文件)。同时,深入解析了路径的概念,区分绝对路径与相对路径,并通过示例演示两者在实际应用中的差异。此外,还强调了不同模式(如"w"覆盖写入和"a"追加写入)对文件内容的影响。整体内容逻辑清晰,适合初学者掌握Python文件操作的核心技巧。
Python学习的自我理解和想法(20)
这是我在B站千锋教育课程中学习Python第20天的总结,主要涉及面向对象编程的核心概念。内容包括:私有属性与私有方法的定义、语法及调用方式;多态的含义与实现,强调父类引用指向子类对象的特点;单例设计模式的定义、应用场景及实现步骤。通过学习,我掌握了如何在类中保护数据(私有化)、实现灵活的方法重写(多态)以及确保单一实例(单例模式)。由于开学时间有限,内容简明扼要,如有不足之处,欢迎指正!

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等