使用 Binder 將公開的 GitHub Repository 轉換為可互動、可執行程式碼並能在瀏覽器上一鍵啟動的 JupyterHub 伺服器,讓我們可以快速地建造出方便分享的教學環境。

  • Python 3.6 JupyterLab
  • Python 3.7 Jupyter Notebook
  • R 3.6 JupyterHub
  • R 3.6 RStudio

使用 Binder 與 GitHub 的動機

最近將原本教學大量使用的 Google Colab 轉移到了 Binder 上,起心動念的原因在於雖然 Google Colab 已經提供一個可以即時互動的筆記本環境,但是在檔案、環境與終端機的支援上還是略有不足,譬如檔案必須在每一次 Session 啟動後重新上傳、套件模組也同樣要在 Session 啟動後重新更新與安裝,而終端機的指令要透過筆記本儲存格的魔術指令(magic command !)送出;所有這些跟筆記本環境設置(Configuration)相關的部分,都是想要改用 Binder 與 GitHub 的動機。

具體說來,我希望能夠不要在第一堂課花時間作「環境設定」,因為多數來修習將程式語言應用在資料分析領域的學員,對於終端機指令、虛擬環境或系統路徑的認識都不多,更別說每個人電腦五花八門的安裝現況(以 Python 來說就有 IDLE、PyCharm、Anaconda、VSCode 等);使用 Binder 與 GitHub 不但能夠跳過「環境設定」,還可以確保每個學員都在同樣的設置下執行課堂中的範例程式和隨堂練習。

什麼是 Binder

我目前使用的是部署於 mybinder.org、免費的 Binder,只要輸入公開的 GitHub Repository 網址,就可以即時啟動一個能夠分享給多人的雲端計算環境,將本來只能靜態展現的 Jupyter 筆記本轉換成為能夠在瀏覽器上執行、編寫的內容,運作原理大致有三個步驟:

  1. 輸入一個公開 GitHub Repository 網址
  2. Binder 會搜尋 Repository 中的環境設置檔案,例如 runtime.txt、requirements.txt、environment.yml 等,然後根據這些檔案的內容建立 Docker 映像檔
  3. Binder 會依據建立完成的 Docker 映像檔啟動一個 JupyterHub 伺服器

建立一個 Python 的 Binder

首先前往 GitHub 建立一個新的公開 Repository。

建立一個新的公開 Repository

接著將可以印出 Python 版本資訊的程式碼寫入 hello.py 並儲存在 Repository 之中。

# hello.py
import sysmajor_version = sys.version_info.major
minor_version = sys.version_info.minor
print("Hello from Binder Python {}.{}!".format(major_version, minor_version))

將 hello.py 儲存在 Repository 之中

前往 mybinder.org 將 Repository 的網址輸入並點擊 launch 等待 JupyterHub 啟動。

將 Repository 的網址輸入並點擊 launch

在啟動的 JupyterHub 伺服器中新增終端機(New > Terminal)後執行 python hello.py ,觀察沒有 runtime.txt 時預設的 Python 版本為何。

觀察沒有指定 runtime.txt 時候的預設 Python 版本為何

接下來的操作會用到 Git 的分支概念,不熟悉的讀者可以放心地跳過,我們只是想透過同一個 GitHub Repository 設定不同 Python 版本的 Binder。

新增一個檔案 runtime.txt 在 Repository 之中,不過這次並不是在既有的 master 分支建立,而是儲存在取名為 3.6 的分支中。

# runtime.txt
python-3.6

新增檔案 runtime.txt 在取名為 3.6 的分支中

前往 mybinder.org,這次除了將 Repository 的網址輸入以外,還要在 Git branch 的欄位輸入 3.6,才點擊 launch 等待 JupyterHub 啟動。

將 Repository 的網址與分支名稱 3.6 輸入才點擊 launch

在啟動的 JupyterHub 伺服器中新增終端機(New > Terminal)後執行 python hello.py ,觀察指定版本為 3.6 的 runtime.txt 是否有發揮作用。

觀察指定版本為 3.6 的 runtime.txt 是否有發揮作用

如果是習慣 JupyterLab 作為開發介面的使用者,可以將網址複製後加上查詢字串參數 ?urlpath=lab 就會啟動 JupyterLab。截至於此,我們簡單示範了如何使用 GitHub 分支與 Binder 建立了能在瀏覽器上一鍵啟動的 Python Jupyter 環境。

  • Python 3.6 JupyterLab
  • Python 3.7 Jupyter Notebook

建立一個 R 的 Binder

首先前往 GitHub 建立一個新的公開 Repository。

建立一個新的公開 Repository

接著將可以印出 R 版本資訊的程式碼寫入 hello.R 並儲存在 Repository 之中。

# hello.R
r_version <- R.Version()
r_version_str <- r_version$version.string
sprintf("Hello from Binder %s!", r_version_str)

將 hello.R 儲存在 Repository 之中

BinderHub 預設的程式語言是 Python,因此必須先建立 runtime.txt 指定 R 語言的版本資訊,我們設定為 3.6 版本。

# runtime.txt
r-3.6-2020-08-01

建立 runtime.txt 指定 R 語言的版本資訊

前往 mybinder.org 將 Repository 的網址輸入並點擊 launch 等待 JupyterHub 啟動。

將 Repository 的網址輸入並點擊 launch

在啟動的 JupyterHub 伺服器中新增終端機(New > Terminal)後執行 Rscript hello.R

觀察 R 語言版本為何

多數的 R 語言使用者習慣使用 RStudio 而非 JupyterNotebook 作為開發介面,只要將網址複製後加上查詢字串參數 ?urlpath=RStudio 就會直接啟動 RStudio;或者可以在 JupyterHub 首頁新增檔案時選擇 RStudio。

新增檔案時選擇 RStudio

截至於此,我們簡單示範了如何使用 GitHub 與 Binder 建立了能在瀏覽器上一鍵啟動的 R Jupyter 環境。

BinderHub 使用简介相关推荐

  1. Kubernetes-2018干货盘点

    2019独角兽企业重金招聘Python工程师标准>>> 毫无疑问,Kubernetes在2018年是个丰收年,不仅本身取得了重大的进步,也让使用它的人获益匪浅. 2018年,我跟随着 ...

  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  3. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  4. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  5. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  6. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  7. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  8. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  9. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

最新文章

  1. 用JavaScript来实现链表LinkedList
  2. FFmpeg 4.2“艾达”发布
  3. Dom onload和jQuery document ready的区别
  4. pat1043. Is It a Binary Search Tree (25)
  5. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...
  6. Hotpatching a C Function on x86
  7. 杨振宁100岁了,诺奖都不算他的人生巅峰
  8. jzxx1107字符图形6-星号倒三角
  9. 【等保知识】等保测评机构申请条件,所需资料以及流程
  10. 苹果CEO乔布斯鲜为人知的15个小秘密
  11. 加权平均数的例子_加权平均数怎么算?举个具体的例子
  12. 从零开始用人工智能预测股票(二、数据加工)
  13. 操作系统镜像资源下载
  14. 收集N个超实用的 JS 片段( ES6+ 编写),你和大神只差这个宝典
  15. Loom插件怎么用?Loom录屏插件使用教程
  16. html导航栏怎么加点,点靓网页的10种导航菜单设计
  17. android studio识别不到夜神模拟器怎么办
  18. 《卓有成效的管理者》——学习心得(四)
  19. Android系统开机logo
  20. 不讲武德,Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!

热门文章

  1. 在C#中创建DataTable
  2. OpenStack —— DevStack一键自动化安装
  3. 【风马一族_xml】xmlp之dtd1
  4. head first python(第三章)–学习笔记
  5. 分享两个好用的nosql GUI工具
  6. windos手工扩展分区
  7. [CityLife]“背后的故事”---贫嘴曾志伟
  8. Hadoop SequenceFile
  9. 平板电脑可以插u盘吗_有手机还需要平板电脑吗 酷比魔方iplay30平板电脑评测
  10. html网页设计大赛_HTML5网页设计大赛 || 决赛名单公布