摘要:讀完本文,你將學會如何使用靜態網站生成器,搭建一個屬于自己的博客,用來展示數據科學作品。靜態網站基本上,一個靜態網站就是一個全是文件的文件夾。建立靜態網站的一種方法是手寫,然后上傳所有的文件到服務器。
這是「打造數據科學作品集」系列文章的第二篇。如果你喜歡該系列,而且想知道下一篇文章什么時候發布,你可以訂閱我們。讀完本文,你將學會如何使用 Pelican 靜態網站生成器,搭建一個屬于自己的博客,用來展示數據科學作品。
全文大約 9500 字,讀完可能需要 15 分鐘左右。
你可以在這里閱讀本系列第一篇文章:「打造數據科學作品集:用數據講故事」
寫博客是證明你的實力、深入學習和建立讀者群的好方法。有許多數據科學和編程類博客幫助他們的作者找到工作,或者認識了重要人物。定期寫博客是有抱負的程序員和數據科學家最應該做的事情之一。
不幸的是,寫博客的一大障礙就是先搭建一個博客網站。在這篇文章中,我們將學習如何用 Python 創建一個博客網站,怎么用 Jupyter Notebook 寫文章和如何通過 GitHub Pages 部署博客。讀完這篇文章,你就可以使用你熟悉的方式,創建自己的數據科學博客了。
靜態網站基本上,一個靜態網站就是一個全是 HTML 文件的文件夾。我們可以搭建一個允許別人鏈接到這個文件夾并獲取文件的服務器。這樣做的好處是不需要數據庫或者其他動態部分,可以很簡單的部署在像 GitHub 之類的網站上。把你的博客做成靜態網站是一個好主意,因為維護起來十分簡單。建立靜態網站的一種方法是手寫 HTML,然后上傳所有的 HTML 文件到服務器。這種情況下,你至少要寫一個 index.html 文件。如果你的網站的 URL 是 thebestblog.com,當訪問者瀏覽 http://www.thebestblog.com 時,他們就會看到 index.html 的內容了。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 可能是下邊這個樣子:
The best blog! 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 的一些問題:
手工編輯 HTML 會很枯燥。
如果你想寫多篇文章,你需要復制很多內容,比如樣式、Title、Footer 等。
如果你想整合評論系統或者其他插件,你不得不寫 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 文件要簡單的多!通用的元素,比如 Title 和 Footer,可以放在模板里邊,這樣很容易更改。
靜態網站生成器多種多樣。最流行的是用 Ruby 開發的 Jekyll。因為我們要搭建一個數據科學博客,所以需要網站生成器可以處理 Jupyter Notebooks。
Pelican 是一個用 Python 開發的網站生成器,可以接受 Jupyter Notebook 文件并轉換成 HTML 博客文章。Pelican 也可以很容易的把文章部署到 GitHub Pages 讓別人閱讀。
安裝 Pelican開始之前,這里有一個倉庫(repo),它就是我們最終成果的示例。
如果你還沒有安裝 Python,在開始之前你還需要做一些前期工作。這里有一些安裝 Python 的說明。我們建議使用 Python3.5。當你安裝完成 Python:
創建一個文件夾——我們將把博客網站的內容和樣式(Styles)放在這個文件夾里。該教程把這個文件夾叫做 jupyter-blog,你可以隨便起名字。
cd 進入 jupyter-blog 文件夾。
創建一個叫 .gitignore 的文件,然后把這個文件里的內容加進去。我們最后將要把倉庫提交到 git,而這將會排除一些其他東西。
創建并激活一個虛擬環境。
在 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 使用默認設置就好了。你需要輸入的就是你網站的名字、網站的作者,另外就是當問到 URL prefix(URL 前綴) 和 timezone(時區) 的時候選 n。下邊是個例子:
(jupyter-blog)? jupyter-blog ? 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? Vik"s Blog > Who will be the author of this web site? Vik Paruchuri > 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] America/Los_Angeles > 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)
運行完 pelican-quickstart 以后,jupyter-blog 文件夾里多了兩個文件夾 content 和 output,還有一些文件,比如 pelicanconf.py 和 publishconf.py。下邊是文件夾目錄的示例:
jupyter-blog │ output │ content │ .gitignore │ develop_server.sh │ fabfile.py │ Makefile │ requirements.txt │ pelicanconf.py │ publishconf.py安裝 Jupyter 插件
Pelican 默認不支持使用 Jupyter 寫文章,所以我們需要安裝一個插件來完成這項功能。我們把插件作為一個 git 子模塊(git submodule)來安裝,這樣便于管理。如果你還沒有安裝 git,你可以在這里找到安裝說明。當你安裝完成 git 之后:
運行 git init 來把當前文件夾初始化為一個 git 倉庫。
創建一個叫 plugins 的文件夾。
運行 git submodule add git://github.com/danielfrg/pelican-ipynb.git plugins/ipynb 來添加插件。
現在應該會有一個 .gitmodules 文件和一個 plugins 文件夾:
jupyter-blog │ output │ content │ plugins │ .gitignore │ .gitmodules │ develop_server.sh │ fabfile.py │ Makefile │ requirements.txt │ pelicanconf.py │ publishconf.py
為了激活插件,我們需要修改 pelicanconf.py 文件,在最下邊添加幾行代碼:
MARKUP = ("md", "ipynb") PLUGIN_PATH = "./plugins" 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://www.jupyter-blog.com/first-post 這個地址找到你的文章。
Date——文章發布的日期。
Category——文章的類別——可以是任何東西。
Tags——文章的標簽。可以隨便掛標簽。
Author——文章作者的名字。
Summary——文章的摘要。
每發布一篇文章,就需要復制一個 notebook 文件,并創建一個 ipynb-meta 文件
創建好 notebook 和 meta 文件后,就可以生成博客 HTML 文件了。下邊是 jupyter-blog 文件夾現在的樣子:
jupyter-blog │ output │ content │ first-post.ipynb │ first-post.ipynb-meta │ plugins │ .gitignore │ .gitmodules │ develop_server.sh │ fabfile.py │ Makefile │ requirements.txt │ pelicanconf.py │ publishconf.py生成 HTML
為了從文章生成 HTML,我們需要先運行 Pelican 來把 notebooks 轉換為 HTML,然后運行本地服務器來查看:
切換到 jupyter-blog 文件夾。
運行 pelican content 來生成 HTML。
切換到 output 目錄。
運行python -m pelican.server。
在瀏覽器里訪問 localhost:8000 來預覽你的博客。
在瀏覽器里就可以看到博客里所有文章的列表,以及具體的博客內容了。
創建 GitHub PagesGitHub Pages 是 GitHub 的一項功能,允許你快速部署靜態網站,讓所有人都可以通過特定 URL 訪問。為了完成它的配置,我們需要:
注冊一個 GitHub 帳號,如果你還沒有的話。
創建一個叫 username.github.io 的倉庫,這里 username 是你的 GitHub 用戶名。這里有更詳細的說明告訴你怎么做。
切換到 jupyter-blog 文件夾。
運行 git remote add origin git@github.com:username/username.github.io.git 把這個倉庫作為遠程倉庫添加到你的本地倉庫,把所有的 username 參數替換為你的 GitHub 用戶名。
GitHub Pages 會把 username.github.io 倉庫的 master 分支下的所有 HTML 文件展示到 username.github.io 這個地址(倉庫和 URL 是一樣的)。
首先我們需要修改 Pelican 使得 URL 指向正確的位置:
在 publishconf.py 文件里編輯 SITEURL,把它設置為 http://username.github.io ,username 還是你的GitHub用戶名。
運行 pelican content -s publishconf.py。當你想在本地預覽你的博客的時候,運行 pelican content。在部署之前運行 pelican content -s publishconf.py。這將使用正確的配置文件進行部署。
提交文件如果你想把 notebooks 和其他文件作為一個 GitHub Page 放在同一個倉庫里,你可以使用分支。
運行 git checkout dev 切換到一個叫 dev 的分支。我們不能用 master 分支來存放 notebooks,因為那個分支是用于 GitHub Pages 展示的。
創建一個提交,然后和正常一樣推送到 Github(使用 git add, git commit,和 git push)。
部署到 GitHub Pages為了讓 Github Pages 正常工作,我們需要把文章添加到 master 分支中。現在,HTML 內容在 output 文件夾中,但是我們需要把它放到倉庫的根目錄,而不是子目錄。我們可以使用 ghp-import 工具來完成這項工作:
運行 ghp-import output -b master,把 output 目錄下的所有東西導入 master 分支。
使用 git push origin master 把你的內容推送到 GitHub。
嘗試訪問 username.github.io ——你就可以看到你的頁面了!
修改博客后,只要重新運行 pelican content -s publishconf.py, ghp-import 和 git push,你的 GitHub Page 就會更新了。
下一步終于搭建好了!你現在可以創作博客,然后推送到 GitHub Pages。所有人都可以通過 username.github.io 來訪問你的博客(記得把 username 替換為你的 GitHub 用戶名)。這給你提供了一個展示數據科學作品集的渠道。
隨著文章數和讀者越來越多,你可能就需要在以下方面更深入的研究一下:
主題:Pelican 支持主題。在這里你可以看到很多主題,隨便選一個你喜歡的用吧。
自定義URL:使用 username.github.io 已經不錯了,但是有時候你可能需要自定義域名。這里是自定義 GitHub Pages 域名的指南。
插件:這里有一個插件列表。插件可以幫助你設置網站數據分析,實現評論等功能。
推廣:試著把你的文章推廣到 DataTau, Twitter, Quora或者其他一些網站,可以幫助你獲得更多的讀者。
作者:Vik Paruchuri@Dataquest.io
譯者:cystone
校對:EarlGrey
出品:PythonTG 翻譯組/編程派
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38183.html
摘要:作者譯者校對出品翻譯組編程派這是如何打造數據科學作品集系列教程的第一篇。我們將介紹怎樣打造作品集中的第一個項目,怎樣使用數據講述一個有效的故事。班級大小紐約市每所學校班級規模數據。 作者:Vik Paruchuri譯者:Nick Tang校對:EarlGrey出品:PythonTG 翻譯組/編程派 這是「如何打造數據科學作品集」系列教程的第一篇。如果覺得不錯,可以訂閱我們第一時間獲取最...
摘要:我們是一個大型開源社區,旗下群共余人,數量超過個,網站日超過,擁有博客專家和簡書程序員優秀作者認證。我們組織公益性的翻譯活動學習活動和比賽組隊活動,并和等國內著名開源組織保持良好的合作關系。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 我們是一個...
摘要:請回復這個帖子并注明組織個人信息來申請加入。版筆記等到中文字幕翻譯完畢后再整理。數量超過個,在所有組織中排名前。網站日超過,排名的峰值為。主頁歸檔社區自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1...
摘要:請回復這個帖子并注明組織個人信息來申請加入。權限分配靈活,能者居之。數量超過個,在所有組織中排名前。網站日超過,排名的峰值為。導航歸檔社區自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
閱讀 3585·2023-04-26 01:43
閱讀 2971·2021-10-14 09:42
閱讀 5404·2021-09-30 09:59
閱讀 2172·2021-09-04 16:40
閱讀 1208·2019-08-30 15:52
閱讀 822·2019-08-29 17:09
閱讀 1993·2019-08-26 13:37
閱讀 3432·2019-08-26 10:20