1. 程式人生 > >使用pelican搭建一個Jupyter Notebook資料科學部落格

使用pelican搭建一個Jupyter Notebook資料科學部落格

寫部落格是一個證明你的技能,進一步加深學習和積累受眾的一個非常好的方式。已經有非常多的資料科學程式設計部落格幫助它們的作者找到工作,或是建立了非常重要的聯絡。撰寫部落格是任何一個有想法的programmer或資料科學家在日常基礎之上非常重要的一件事情。

不幸的是,寫部落格一個不可忽視的障礙便是首先如何搭建一個部落格。在本文,我們將會涉及到如何使用Python建立部落格,如何使用Jupyter notebook寫部落格和如何使用GitHub Pages部署部落格。讀完本文,你應當能夠建立屬於你自己的部落格,並以一種熟悉簡單地方式寫文章。

靜態網站

根本上,一個靜態網站只不過是一個由HTML檔案構成的資料夾而已。我們可以執行一個伺服器來使得其他人訪問並獲取這些檔案。它的一個好處就是不需要一個數據庫或是其他一些動態互動的部分,而且非常容易將其部署到像GitHub這樣的網站。

將你的部落格構建成為一個靜態網站是一個非常好的想法,因為它維護起來極其簡單。建立靜態網站的一個方式是手寫HTML, 然後將所有的HTML檔案上傳到伺服器。在這樣的情況下,你至少需要一個index.html檔案。如果你的網站URL是thebestblog.com, 那麼訪問者訪問http://thebestblog.com時將會被展示index.html的內容。下面是thebestblog.com可能的HTML構成:

thebestblog.com
│   index.html
│   first-post.html
│   how-to-use-python.html
│   how-to
-do-machine-learning.html │ styles.css

在上面的網站中,訪問http://www.thebestblog.com/first-post.html將會展示first-post.html檔案中的內容。first-post.html可能像這樣:

<html>
<head>
  <title>The best blog!</title>
  <meta name="description" content="The best blog!"/>
  <link rel="stylesheet" href
="styles.css" />
</head> <body> <h1>First post!</h1> <p>This is the first post in what will soon become (if it already isn't) the best blog.</p> <p>Future posts will teach you about data science.</p> <div class="footer"> <p>Thanks for visiting!</p> </div> </body> </html>

你可能很快會發現手寫HTML會有一些問題:

  • 手寫HTML相當痛苦。

  • 如果要寫多篇文章,你將不得不復制HTML的風格,和諸如標題,頁尾等重複的元素。

  • 如果想要整合評論或是其他一些外掛,你不得不寫JavaScript。

通常來說,當寫部落格的時候,你希望能夠關注內容而不是將時間花費在調整HTML上。幸好,使用靜態網站生成器這個工具,你就可以擺脫手寫HTML了。

靜態網站生成器

靜態網站生成器允許你使用一個簡單的格式寫部落格文章,比如markdown, 然後定義一些設定即可。生成器將會自動將你的文章轉換成HTML。通過靜態網站生成器,我們可以將first-post.html簡化為first-post.md:

# First post!

This is the first post in what will soon become (if it already isn't) the best blog.

Future posts will teach you about data science.

這要比手寫HTML要容易得多!一些通常的元素,比如標題或是頁尾,可以被放到模板中,所以它們也很容易修改!

有一些不同的靜態網站生成器,非常出名的一個便是用ruby寫的jekyll (譯者注:我的jekyll blog,有興趣的可以看一下)。由於想搭建一個數據科學部落格,所以我們需要一個能夠處理Jupyter notebook的靜態生成器。

Pelican是用Python寫的一個靜態網站生成器,它能夠將Jupyter notebook檔案轉換成HTML部落格文章。Pelican也十分容易部署到GitHub Pages, 其他人可以在那裡閱讀我們的文章。

安裝Pelican

如果你還沒有安裝python, 那麼在開始之前你需要進行一個準備工作的安裝。推薦使用python3.5

Python一旦安裝完成,我們可以進行以下操作:

  • 建立一個資料夾 – 我們將把部落格內容和風格檔案放到這個資料夾中。在本篇教程裡,我們取名為jupyter-blog, 你可以取為任何你喜歡的名字。

  • cd進入到jupyter-blog

  • 建立一個叫做.gitignore的檔案,並新增入這個檔案的內容。最終我們將會把檔案提交到git, .gitignore將會排除指定型別的檔案。

  • 建立並激活一個虛擬環境(譯者注:此步非必須,如發生問題可以跳過。)

  • jupyter-blog中建立一個叫做requirements.txt的檔案並寫入以下內容:

    Markdown==2.6.6
    pelican==3.6.3
    jupyter>=1.0
    ipython>=4.0
    nbconvert>=4.0
    beautifulsoup4
    ghp-import==0.4.1
    matplotlib==1.5.1
  • jupyter-blog下執行pip install -r requirements.txt安裝requirements.txt中的所有包。

建立屬於你自己的資料科學部落格

完成預備工作後,進入jupyter-blog目錄並執行pelican-quickstart將會開始一個互動式的部落格安裝過程。你將會看到有一系列的問題來使得部落格安裝妥當。

對於大多數問題,直接點選Enter接受預設值即可,需要自定義的地方有the title of the website(網站標題), the author of the website(作者),n for the URL prefix(URL字首選擇n), and the timezone(時間區)。下面是一個示例(譯者:以下內容以後都可在pelicanconf.py中再次修改):

# xuliucheng @ xlcdemac in ~/pelican-blog [14:39:44] 
$ pelican-quickstart
Welcome to pelican-quickstart v3.6.3.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files
needed by Pelican.


> Where do you want to create your new web site? [.] 
> What will be the title of this web site? LiuchengXu's Blog
> Who will be the author of this web site? LiuchengXu
> What will be the default language of this web site? [en] 
> Do you want to specify a URL prefix? e.g., http://example.com   (Y/n) n
> Do you want to enable article pagination? (Y/n) 
> How many articles per page do you want? [10] 
> What is your time zone? [Europe/Paris] 
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) 
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) 
> Do you want to upload your website using FTP? (y/N) 
> Do you want to upload your website using SSH? (y/N) 
> Do you want to upload your website using Dropbox? (y/N) 
> Do you want to upload your website using S3? (y/N) 
> Do you want to upload your website using Rackspace Cloud Files? (y/N) 
> Do you want to upload your website using GitHub Pages? (y/N) y
> Is this your personal page (username.github.io)? (y/N) y
Done. Your new project is available at /Users/xuliucheng/pelican-blog

# xuliucheng @ xlcdemac in ~/pelican-blog [14:43:04] 
$ ls
Makefile  content  develop_server.sh  fabfile.py  output  pelicanconf.py  publishconf.py  requirements.txt

執行完pelican-quickstart後,你會發現在jupyter-blog目錄下多了兩個資料夾:contentoutput, 還有幾個檔案。比如pelicanconf.pypublishconf.py,下面是應當出現的幾個檔案:

jupyter-blog
├── Makefile
├── content
├── develop_server.sh
├── fabfile.py
├── output
├── pelicanconf.py
├── publishconf.py
└── requirements.txt

2 directories, 6 files

安裝Jupyter外掛

Pelican預設情況下並不支援使用jupyter寫部落格 – 我們需要安裝外掛來進行支援。我們將把外掛以git submodule的方式進行安裝以便於管理。如果你還沒有安裝git, 可以在這裡找到一些提示.

git安裝好後:

  • 執行git init將當前資料夾初始化為一個git倉庫。

  • 建立plugins資料夾。

  • 執行git submodule add git://github.com/danielfrg/pelican-ipynb.git plugins/ipynb來新增外掛。

# xuliucheng @ xlcdemac in ~/pelican-blog [14:45:19] 
$ git init
Initialized empty Git repository in /Users/xuliucheng/pelican-blog/.git/

# xuliucheng @ xlcdemac in ~/pelican-blog on git:master x [14:52:21] 
$ mkdir plugins

# xuliucheng @ xlcdemac in ~/pelican-blog on git:master x [14:52:37] 
$ cd plugins 

# xuliucheng @ xlcdemac in ~/pelican-blog/plugins on git:master x [14:52:48] 
$ git submodule add git://github.com/danielfrg/pelican-ipynb.git plugins/ipynb
Cloning into '/Users/xuliucheng/pelican-blog/plugins/plugins/ipynb'...
remote: Counting objects: 387, done.
remote: Total 387 (delta 0), reused 0 (delta 0), pack-reused 387
Receiving objects: 100% (387/387), 299.26 KiB | 93.00 KiB/s, done.
Resolving deltas: 100% (190/190), done.

現在你應該有一個.gitmodules檔案和一個plugins資料夾:

jupyter-blog
├── Makefile
├── content
├── develop_server.sh
├── fabfile.py
├── output
├── pelicanconf.py
├── plugins
├── publishconf.py
└── requirements.txt

3 directories, 6 files

為了啟動外掛,我們需要修改pelicanconf.py並將以下內容新增到尾部:

MARKUP = ('md', 'ipynb')

PLUGIN_PATHS = [ './plugins' ]  # 如果像原文直接PLUGIN_PATH = `./plugins`而不使用列表會報warning
PLUGINS = ['ipynb.markup']

這幾行程式碼是告訴pelican在生成HTML時啟用外掛。

撰寫你的第一篇博文

外掛安裝完畢後,我們可以來建立第一篇文章:

  • 新建一個jupyter notebook並寫入一些內容。這裡是一個示例。

  • 將notebook檔案複製到content資料夾。

  • 建立一個跟notebook同名的一個檔案,不過副檔名為`.ipynb-meta’。 這裡是一個示例。

  • 將下面的內容新增到ipynb-meta檔案中,請注意修改部分條目以適應你自己的部落格。

    Title: First Post
    Slug: first-post
    Date: 2016-06-08 20:00
    Category: posts
    Tags: python firsts
    Author: Vik Paruchuri
    Summary: My first post, read it to find out.
    

    這裡是對上面的一些解釋:

  • Title: 部落格文章的題目

  • Slug: 伺服器上這篇文章的訪問路徑。如果slug是first-post, 你的伺服器是jupyter-blog.com, 那麼你可以通過http://jupyter-blog.com/first-post來進行訪問。

  • Date: 文章的釋出時間

  • Category: 文章所屬目錄,可以為空。

  • Tags: 以逗號分割的標籤列表,可以為空。

  • Author: 文章的作者,多個時使用逗號進行分割

  • Summary: 文章的一個簡單概述。

生成HTML

為了生成博文的HTML,我們需要執行pelican將notebook轉換成HTML,然後執行本地伺服器就能夠看到效果了:

  • 切換到jupyter-blog資料夾

  • 執行pelican content生成HTML

  • 切換到output資料夾

  • 執行python -m pelican.server

  • 開啟瀏覽器訪問localhost:8000進行預覽

你應該能夠看到所生成的部落格效果。

建立一個GitHub Pages

GitHub Pages是GitHub的一個特色,它能夠快速部署一個靜態網站並通過一個獨一無二的URL訪問。為完成安裝,你需要:

  • 如果還沒有GitHub賬號你需要先註冊一個賬號

  • 建立一個GitHub倉庫,名稱為username.github.io, username是你的GitHub名稱。這裡可以檢視更多細節。

  • 切換到jupyter-blog目錄

  • 執行git remote add origin [email protected]:username/username.github.io.git來為你的本地GitHub倉庫新增一個遠端倉庫。注意將username替換為你的GitHub使用者名稱。

GitHub Page將會顯示推送到倉庫username.github.io的所有HTML檔案,並可通過username.github.io進行訪問。

首先,我們需要修改pelican以便於它能夠指向正確的地址:

  • 修改pelicanconf.py中的SITEURL, 將它設定為https://username.github.iousername是你的GitHub使用者名稱。

  • 執行pelican content -s publishconf.py。當你想要在本地進行預覽時,執行pelican content. 在部署之前,執行pelican content -s publishconf.py,這會使用正確的部署設定檔案。

提交你的檔案

如果你想要GitHub pages這個倉庫儲存實際的notebook和一些其他檔案,你可以使用git分支。

  • 執行git checkout dev切換到一個叫做dev的分支。我們不能使用master分支來儲存notebook, 因為這個分支為GitHub pages所用。

  • 像往常一樣提交併推送到GitHub(使用git add, git commit, git push

部署到GitHub Pages

我們需要將部落格內容推送到GitHub pages的master分支來使之正常工作。現在,HTML內容已經在output資料夾中,不過我們需要它是倉庫的根目錄,而不是一個子目錄。

  • 執行ghp-import output -b masteroutput中的所有內容匯入到master分支。

  • 執行git push origin master將內容推送到GitHub

  • 嘗試訪問username.github.io – 你應該看到你的部落格了!

任何時候當你的部落格內容有所改變時,重新執行上面的 pelican content -s publishconf.py, ghp-importgit push命令,你的GitHub page就會得到更新。

接下來的工作

當部落格內容逐漸增多並開始有訪客時,你可能會在下面內容上進一步深入:

  • 主題
    pelican支援主題,你可在這裡看到很多主題,並選擇一個喜歡的使用。

  • 定製URL
    使用username.github.io的確是很好,不過有時候你可能會想要一個更加個性化的域名。這裡是GitHub pages自定義域名訪問的介紹。

  • 外掛
    這裡檢視外掛列表。外掛能夠幫助新增統計訪問,評論,等等很多功能。

  • 部落格推廣

    盡力在一些網站上推廣你的部落格來獲取觀眾,比如CSDN, 簡書,知乎等等。

—————————————————

譯者:

上面的部署部分只講了部署到username.github.io, 這裡講一下部署到username.github.io/project的注意事項(因為有坑)。

有網友來信詢問部署到username.github.io/project的具體操作,其實很簡單,以我的pelican blog為例:

  1. 在github上新建一個叫做pelican-blog的倉庫。

  2. 其他本地搭建步驟照舊,不同之處在於推送到不同分支
    因為如果是username.github.io,github展示的是master分支的內容。如果是其他名稱的倉庫,比如這裡的pelican-blog, github展示的是它gh-pages分支的內容。因此只是在推送output目錄時有所不同。

  3. pelicanconf.py中設定SITEURL, 格式為 https://liuchengxu.github.io/pelican-blog.

    SITEURL = 'https://liuchengxu.github.io/pelican-blog'
    
  4. 在pelican-blog目錄下,將output目錄下的內容推送到gh-pages分支:

    ghp-import output -b gh-pages
    git push origin gh-pages

現在可以在liuchengxu.github.io/pelican-blog進行訪問了,比如我的pelican-blog: https://liuchengxu.github.io/pelican-blog .

至於日常寫作在master分支即可。我的部落格採用bootstrap3主題,並修繕了一些不足之處,歡迎 >>> fork and star.

這裡寫圖片描述

另外,關於其他注意事項:

  • 在Jupyter Notebook中引用圖片
    總歸免不了要引入一些圖片,如果不注意設定肯定會發生路徑找不到的問題:這需要在 pelicanconf.py 中配置 STATIC_PATHS 屬性,Pelican 預設設定content下的images 為圖片資源,其他的資源需要進行配置。

比如我的content

content
├── images
│   └── foo.png
├── notebooks
     └── test.ipynb

pelicanconf.py新增配置:

STATIC_PATHS = ['images', 'notebooks']
NOTEBOOK_DIR = 'notebooks'

在test.ipynb中引用foo.png:

![foo]({filename}/images/foo.png)

是的,就是要新增”{filename}”, 不用替換成什麼其他內容,而 / ,也就根目錄,指的是content目錄。

不過需要注意!!!上面的寫法只是用在釋出時,當你在寫作時這樣去連結圖片肯定是找不到圖片的(指的是notebook中無法找到圖片,localhost:8000 還是能夠訪問到圖片的),因此在本地預覽時寫的是:

![foo](../images/foo.png)

釋出時再改成filename的寫法。

生成頁面時,Pelican 會將foo.png 複製到output/images/foo.png,同時將連結適配到生成的頁面。

相關推薦

使用pelican搭建一個Jupyter Notebook資料科學部落

寫部落格是一個證明你的技能,進一步加深學習和積累受眾的一個非常好的方式。已經有非常多的資料科學和程式設計部落格幫助它們的作者找到工作,或是建立了非常重要的聯絡。撰寫部落格是任何一個有想法的programmer或資料科學家在日常基礎之上非常重要的一件事情。

Jupyter-Notebook版的部落園美化

html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } article, aside, detai

jupyter notebook嵌入到部落

<iframe src="http://nbviewer.jupyter.org/github/LiaoPan/MyCodeSpace/blob/master/Demo_juypter.ipynb

技術人如何利用 github+Jekyll ,搭建一個獨立免費的技術部落

上次有人留言說,技術部落格是程式設計師的標配,但據我所知絕大部分技術同學到現在仍然沒有自己的技術部落格。原因有很多,有的是懶的寫,有的是怕寫不好,還有的是一直想憋個大招,幻想做到完美再發出來,結果一直胎死腹中。但其實更多程式設計師是不知道如何去搭建一個部落格,其實如今搭建一個個人技術部落格非常簡單,其中最簡單

python,pycharm,以及pip,requests,BeautifulSoup4的安裝(順便帶一個jupyter notebook吧)

自己看了很多別人的部落格,摸索了很久,簡單總結一下吧1.安裝python傳送門:https://www.python.org/downloads/windows/有很多版本,點選就下載了安裝注意!!安裝注意!!安裝注意!!記得一定要把下面的打勾,否則自己新增環境變數會很麻煩(

利用streamSet搭建一個簡單的資料管道

本教程利用StreamSet搭建一個簡單的資料管道,具體為:從本地目錄中讀取檔案,並在分支中處理讀取的檔案資料,最後將處理的資料寫入到本地目錄。將通過資料預覽來配置資料管道,並新增資料報警功能。 由於是初次嘗試,難免存在錯誤,不足之處還請大神不吝賜教!!! 目錄 0  

使用python靜態網頁生成工具pelican快速在github上部署網站部落

簡介 Pelican用Python編寫的靜態站點生成器。亮點: 使用reStructuredText或Markdown格式直接用編輯器編寫內容 簡單的CLI工具來(重新)生成站點 易於與分散式版本控制系統和Web對接 完全靜態輸出,可在任何地方託管 使用python靜態網頁生成工具

為什麼你應該建立一個屬於自己的獨立部落

➢ medium 如果不是有另外一個賬號關注了我的賬號,並且實時點贊出現問題。 恐怕到現在我都不知道,medium的賬戶不存在了。 有意思的是,在你自己登入的介面狀態下,一切正常,編輯和閱讀都是正常。 但是經測試,分享出去的連結開啟為無效的頁面。 在搜尋欄中搜

騰訊雲:教你快速搭建學生的第一個個人部落

騰訊針對學生開放優惠還是不錯的,最近閒來無事,便搞了一個個人部落格 首先你要去騰訊雲買一個伺服器,還是很便宜的,65大洋,學生送64的優惠券,相當於一元一個月的伺服器,還是不錯的,下面就開始吧。 按照上圖的說明一點一點點下去就好,對於學生,一核一G標準型就足夠了,足夠

如何成功打造一個能夠賺錢的個人部落網站?

今天的天氣格外開朗,心情也自然好了很多,所以一到公司做下來,充滿了激情和鬥志。工作要繼續做,日記要堅持寫。由於最近一段時間,筆者發現國內一下子出來了大批的部落格網站,採用跟筆者個人網站相同的主題,有的只是換了一個主題顏色。而且網站也是純原創的,並且都在堅持每日更新。所

Mac下搭建目前最in的hexo部落

小巫打算把部落格遷移到github中,為了讓自己成為一名有逼格的程式設計師,我也是蠻拼的,所以搭建了一個hexo部落格,可以盡情裝逼,下面把搭建過程整理出來供大家參考。 step 1 申請域名 小巫這裡是在新網申請的域名http://www.xinn

從零搭建生產環境的ghost2.0部落

當前安裝過程是在ghost cli 1.9.2上的,由於ghost更新特別快,我安裝我個人部落格cmlanche.com的時候還是1.9.1,當時沒碰到啥問題,到1.9.2就有一點點不一樣了,所以要注意當時你的安裝版本。 針對安裝過程我會針對ghost的更新不斷更新文件

基於視覺的 SLAM/Visual Odometry (VO) 開源資料部落和論文列表

以下為機器翻譯,具體參考原文:https://github.com/tzutalin/awesome-visual-slam----基於視覺的SLAM / Visual Odometry開源專案,庫,資料集,工具和研究列表指數開源庫資料集工具專案學習其他圖書館基本視覺和tra

【nodeJS】從nodejs原生的部落網站搭建到 koa框架實現個人部落網站搭建

nodejs實現搭建部落格網站前言:原java後端渣渣一枚,因專案需要轉學了nodejs進行開發,正式進行專案開發之前,師傅安排了一些專案訓練,先熟悉js語法,然後熟悉nodejs,再慢慢重構向框架的使用。    寫這一篇文章的目的在於記錄自己學習的歷程,同時也是給其他的no

資料分析平臺搭建教程:基於Apache Zeppelin Notebook和R的互動式資料科學

介紹 這篇文章的目的是幫助您開始使用 Apache Zeppelin Notebook,它可以滿足您用R做資料科學的需求。Zeppelin 是一個提供互動資料分析且基於Web的筆記本。方便你做出可資料驅動的、可互動且可協作的精美文件,並且支援多種語言,包括 Scala(

資料科學學習手札64)在jupyter notebook中利用kepler.gl進行空間資料視覺化

一、簡介   kepler.gl是由Uber開發的進行空間資料視覺化的開源工具,是Uber內部進行空間資料視覺化的預設工具,通過其面向Python開放的介面包keplergl,我們可以在jupyter notebook中通過書寫Python程式碼的方式傳入多種格式的資料,在其嵌入notebook的互動視窗中

資料科學學習手札81)conda+jupyter玩轉資料科學環境搭建

> 本文示例yaml檔案已上傳至我的`Github`倉庫[https://github.com/CNFeffery/DataScienceStudyNotes](https://github.com/CNFeffery/DataScienceStudyNotes) # 1 簡介   我們在使用`Pytho

在服務器搭建Jupyter notebook

contents 建模 oot lib app file des body odin 安裝 Jupyter Notebook (這裏雖然是對centos和Python2的,但是在Ubuntu16.04,Python3同樣可以照著弄) Jupyter Noteb

jupyter Notebook環境搭建

發行版 conf 理解 建議 term notebook 不依賴 環境搭建 sdn 1、什麽是jupyter notebook   jupyter notebook是一種 Web 應用,能讓用戶將說明文本、數學方程、代碼和可視化內容全部組合到一個易於共享的文檔中。它可以直接

搭建Python3的jupyter notebook服務器

打開 訪問 AD 交互 創建 ESS ipy bsp enter 摘要:搭建Python3 jupyter notebook。 激活Python3後,進入Python交互環境 1. 登陸遠程服務器 2. 生成配置文件 1. $jupyter noteboo