摘要:讀完本文,你將學(xué)會(huì)如何使用靜態(tài)網(wǎng)站生成器,搭建一個(gè)屬于自己的博客,用來(lái)展示數(shù)據(jù)科學(xué)作品。靜態(tài)網(wǎng)站基本上,一個(gè)靜態(tài)網(wǎng)站就是一個(gè)全是文件的文件夾。建立靜態(tài)網(wǎng)站的一種方法是手寫,然后上傳所有的文件到服務(wù)器。
這是「打造數(shù)據(jù)科學(xué)作品集」系列文章的第二篇。如果你喜歡該系列,而且想知道下一篇文章什么時(shí)候發(fā)布,你可以訂閱我們。讀完本文,你將學(xué)會(huì)如何使用 Pelican 靜態(tài)網(wǎng)站生成器,搭建一個(gè)屬于自己的博客,用來(lái)展示數(shù)據(jù)科學(xué)作品。
全文大約 9500 字,讀完可能需要 15 分鐘左右。
你可以在這里閱讀本系列第一篇文章:「打造數(shù)據(jù)科學(xué)作品集:用數(shù)據(jù)講故事」
寫博客是證明你的實(shí)力、深入學(xué)習(xí)和建立讀者群的好方法。有許多數(shù)據(jù)科學(xué)和編程類博客幫助他們的作者找到工作,或者認(rèn)識(shí)了重要人物。定期寫博客是有抱負(fù)的程序員和數(shù)據(jù)科學(xué)家最應(yīng)該做的事情之一。
不幸的是,寫博客的一大障礙就是先搭建一個(gè)博客網(wǎng)站。在這篇文章中,我們將學(xué)習(xí)如何用 Python 創(chuàng)建一個(gè)博客網(wǎng)站,怎么用 Jupyter Notebook 寫文章和如何通過(guò) GitHub Pages 部署博客。讀完這篇文章,你就可以使用你熟悉的方式,創(chuàng)建自己的數(shù)據(jù)科學(xué)博客了。
靜態(tài)網(wǎng)站基本上,一個(gè)靜態(tài)網(wǎng)站就是一個(gè)全是 HTML 文件的文件夾。我們可以搭建一個(gè)允許別人鏈接到這個(gè)文件夾并獲取文件的服務(wù)器。這樣做的好處是不需要數(shù)據(jù)庫(kù)或者其他動(dòng)態(tài)部分,可以很簡(jiǎn)單的部署在像 GitHub 之類的網(wǎng)站上。把你的博客做成靜態(tài)網(wǎng)站是一個(gè)好主意,因?yàn)榫S護(hù)起來(lái)十分簡(jiǎn)單。建立靜態(tài)網(wǎng)站的一種方法是手寫 HTML,然后上傳所有的 HTML 文件到服務(wù)器。這種情況下,你至少要寫一個(gè) index.html 文件。如果你的網(wǎng)站的 URL 是 thebestblog.com,當(dāng)訪問(wèn)者瀏覽 http://www.thebestblog.com 時(shí),他們就會(huì)看到 index.html 的內(nèi)容了。HTML 的文件夾可能是下邊的這個(gè)樣子:
thebestblog.com │ index.html │ first-post.html │ how-to-use-python.html │ how-to-do-machine-learning.html │ styles.css
在上邊的這個(gè)網(wǎng)站里,訪問(wèn) http://www.thebestblog.com/first-post.html 你就可以看到 first-post.html 的內(nèi)容。first-post.html 可能是下邊這個(gè)樣子:
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.
你可能會(huì)立馬發(fā)現(xiàn)手工編輯 HTML 的一些問(wèn)題:
手工編輯 HTML 會(huì)很枯燥。
如果你想寫多篇文章,你需要復(fù)制很多內(nèi)容,比如樣式、Title、Footer 等。
如果你想整合評(píng)論系統(tǒng)或者其他插件,你不得不寫 Javascript。
一般來(lái)說(shuō),你寫博客的時(shí)候,想關(guān)注于博客內(nèi)容,而不是在 HTML 上浪費(fèi)時(shí)間。謝天謝地,你可以用一個(gè)叫做靜態(tài)網(wǎng)站生成器的工具來(lái)取代手動(dòng)編輯 HTML。
靜態(tài)網(wǎng)站生成器靜態(tài)網(wǎng)站生成器可以讓你用一些簡(jiǎn)單的格式寫文章,通常是 Markdown,然后再定義一些設(shè)置。生成器可以自動(dòng)把你的文章轉(zhuǎn)換為 HTMl。使用靜態(tài)網(wǎng)站生成器,你可以把 first-post.html 極大地簡(jiǎn)化為 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 文件要簡(jiǎn)單的多!通用的元素,比如 Title 和 Footer,可以放在模板里邊,這樣很容易更改。
靜態(tài)網(wǎng)站生成器多種多樣。最流行的是用 Ruby 開發(fā)的 Jekyll。因?yàn)槲覀円罱ㄒ粋€(gè)數(shù)據(jù)科學(xué)博客,所以需要網(wǎng)站生成器可以處理 Jupyter Notebooks。
Pelican 是一個(gè)用 Python 開發(fā)的網(wǎng)站生成器,可以接受 Jupyter Notebook 文件并轉(zhuǎn)換成 HTML 博客文章。Pelican 也可以很容易的把文章部署到 GitHub Pages 讓別人閱讀。
安裝 Pelican開始之前,這里有一個(gè)倉(cāng)庫(kù)(repo),它就是我們最終成果的示例。
如果你還沒有安裝 Python,在開始之前你還需要做一些前期工作。這里有一些安裝 Python 的說(shuō)明。我們建議使用 Python3.5。當(dāng)你安裝完成 Python:
創(chuàng)建一個(gè)文件夾——我們將把博客網(wǎng)站的內(nèi)容和樣式(Styles)放在這個(gè)文件夾里。該教程把這個(gè)文件夾叫做 jupyter-blog,你可以隨便起名字。
cd 進(jìn)入 jupyter-blog 文件夾。
創(chuàng)建一個(gè)叫 .gitignore 的文件,然后把這個(gè)文件里的內(nèi)容加進(jìn)去。我們最后將要把倉(cāng)庫(kù)提交到 git,而這將會(huì)排除一些其他東西。
創(chuàng)建并激活一個(gè)虛擬環(huán)境。
在 jupyter-blog 文件夾里創(chuàng)建一個(gè)叫 requirements.txt 的文件,內(nèi)容如下:
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 文件夾里運(yùn)行 pip install -r requirements.txt 來(lái)安裝 requirements.txt 里邊所有的包。
創(chuàng)建數(shù)據(jù)科學(xué)博客完成了前邊的設(shè)置之后,你就做完創(chuàng)建博客的準(zhǔn)備了!在 jupyter-blog 文件夾里運(yùn)行 pelican-quickstart 命令,來(lái)為你的博客啟動(dòng)一個(gè)交互式安裝序列。你將看到一些幫助你設(shè)置博客屬性的問(wèn)題。大多數(shù)問(wèn)題你只需要點(diǎn)擊 Enter 使用默認(rèn)設(shè)置就好了。你需要輸入的就是你網(wǎng)站的名字、網(wǎng)站的作者,另外就是當(dāng)問(wèn)到 URL prefix(URL 前綴) 和 timezone(時(shí)區(qū)) 的時(shí)候選 n。下邊是個(gè)例子:
(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)
運(yùn)行完 pelican-quickstart 以后,jupyter-blog 文件夾里多了兩個(gè)文件夾 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 默認(rèn)不支持使用 Jupyter 寫文章,所以我們需要安裝一個(gè)插件來(lái)完成這項(xiàng)功能。我們把插件作為一個(gè) git 子模塊(git submodule)來(lái)安裝,這樣便于管理。如果你還沒有安裝 git,你可以在這里找到安裝說(shuō)明。當(dāng)你安裝完成 git 之后:
運(yùn)行 git init 來(lái)把當(dāng)前文件夾初始化為一個(gè) git 倉(cāng)庫(kù)。
創(chuàng)建一個(gè)叫 plugins 的文件夾。
運(yùn)行 git submodule add git://github.com/danielfrg/pelican-ipynb.git plugins/ipynb 來(lái)添加插件。
現(xiàn)在應(yīng)該會(huì)有一個(gè) .gitmodules 文件和一個(gè) 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 當(dāng)生成 HTML 的時(shí)候激活插件。
寫第一篇文章插件安裝完之后,就可以寫你的第一篇文章了:
創(chuàng)建一個(gè) Jupyter notebook,簡(jiǎn)單寫一些內(nèi)容。這里有一個(gè)例子。
把 notebook 文件復(fù)制到 content 文件夾。
創(chuàng)建一個(gè)和 notebook 同名的文件,但是擴(kuò)展名是 .ipynb-meta。這里有一個(gè)例子。
把下邊的內(nèi)容添加到 ipynb-meta 文件中,但是根據(jù)你自己的文章修改相應(yīng)字段:
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——文章的標(biāo)題。
Slug——你的文章在服務(wù)器上的路徑。如果 slug 是 first-post,而且你的服務(wù)器地址是 jupyter-blog.com, 你可以在 http://www.jupyter-blog.com/first-post 這個(gè)地址找到你的文章。
Date——文章發(fā)布的日期。
Category——文章的類別——可以是任何東西。
Tags——文章的標(biāo)簽??梢噪S便掛標(biāo)簽。
Author——文章作者的名字。
Summary——文章的摘要。
每發(fā)布一篇文章,就需要復(fù)制一個(gè) notebook 文件,并創(chuàng)建一個(gè) ipynb-meta 文件
創(chuàng)建好 notebook 和 meta 文件后,就可以生成博客 HTML 文件了。下邊是 jupyter-blog 文件夾現(xiàn)在的樣子:
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,我們需要先運(yùn)行 Pelican 來(lái)把 notebooks 轉(zhuǎn)換為 HTML,然后運(yùn)行本地服務(wù)器來(lái)查看:
切換到 jupyter-blog 文件夾。
運(yùn)行 pelican content 來(lái)生成 HTML。
切換到 output 目錄。
運(yùn)行python -m pelican.server。
在瀏覽器里訪問(wèn) localhost:8000 來(lái)預(yù)覽你的博客。
在瀏覽器里就可以看到博客里所有文章的列表,以及具體的博客內(nèi)容了。
創(chuàng)建 GitHub PagesGitHub Pages 是 GitHub 的一項(xiàng)功能,允許你快速部署靜態(tài)網(wǎng)站,讓所有人都可以通過(guò)特定 URL 訪問(wèn)。為了完成它的配置,我們需要:
注冊(cè)一個(gè) GitHub 帳號(hào),如果你還沒有的話。
創(chuàng)建一個(gè)叫 username.github.io 的倉(cāng)庫(kù),這里 username 是你的 GitHub 用戶名。這里有更詳細(xì)的說(shuō)明告訴你怎么做。
切換到 jupyter-blog 文件夾。
運(yùn)行 git remote add origin git@github.com:username/username.github.io.git 把這個(gè)倉(cāng)庫(kù)作為遠(yuǎn)程倉(cāng)庫(kù)添加到你的本地倉(cāng)庫(kù),把所有的 username 參數(shù)替換為你的 GitHub 用戶名。
GitHub Pages 會(huì)把 username.github.io 倉(cāng)庫(kù)的 master 分支下的所有 HTML 文件展示到 username.github.io 這個(gè)地址(倉(cāng)庫(kù)和 URL 是一樣的)。
首先我們需要修改 Pelican 使得 URL 指向正確的位置:
在 publishconf.py 文件里編輯 SITEURL,把它設(shè)置為 http://username.github.io ,username 還是你的GitHub用戶名。
運(yùn)行 pelican content -s publishconf.py。當(dāng)你想在本地預(yù)覽你的博客的時(shí)候,運(yùn)行 pelican content。在部署之前運(yùn)行 pelican content -s publishconf.py。這將使用正確的配置文件進(jìn)行部署。
提交文件如果你想把 notebooks 和其他文件作為一個(gè) GitHub Page 放在同一個(gè)倉(cāng)庫(kù)里,你可以使用分支。
運(yùn)行 git checkout dev 切換到一個(gè)叫 dev 的分支。我們不能用 master 分支來(lái)存放 notebooks,因?yàn)槟莻€(gè)分支是用于 GitHub Pages 展示的。
創(chuàng)建一個(gè)提交,然后和正常一樣推送到 Github(使用 git add, git commit,和 git push)。
部署到 GitHub Pages為了讓 Github Pages 正常工作,我們需要把文章添加到 master 分支中?,F(xiàn)在,HTML 內(nèi)容在 output 文件夾中,但是我們需要把它放到倉(cāng)庫(kù)的根目錄,而不是子目錄。我們可以使用 ghp-import 工具來(lái)完成這項(xiàng)工作:
運(yùn)行 ghp-import output -b master,把 output 目錄下的所有東西導(dǎo)入 master 分支。
使用 git push origin master 把你的內(nèi)容推送到 GitHub。
嘗試訪問(wèn) username.github.io ——你就可以看到你的頁(yè)面了!
修改博客后,只要重新運(yùn)行 pelican content -s publishconf.py, ghp-import 和 git push,你的 GitHub Page 就會(huì)更新了。
下一步終于搭建好了!你現(xiàn)在可以創(chuàng)作博客,然后推送到 GitHub Pages。所有人都可以通過(guò) username.github.io 來(lái)訪問(wèn)你的博客(記得把 username 替換為你的 GitHub 用戶名)。這給你提供了一個(gè)展示數(shù)據(jù)科學(xué)作品集的渠道。
隨著文章數(shù)和讀者越來(lái)越多,你可能就需要在以下方面更深入的研究一下:
主題:Pelican 支持主題。在這里你可以看到很多主題,隨便選一個(gè)你喜歡的用吧。
自定義URL:使用 username.github.io 已經(jīng)不錯(cuò)了,但是有時(shí)候你可能需要自定義域名。這里是自定義 GitHub Pages 域名的指南。
插件:這里有一個(gè)插件列表。插件可以幫助你設(shè)置網(wǎng)站數(shù)據(jù)分析,實(shí)現(xiàn)評(píng)論等功能。
推廣:試著把你的文章推廣到 DataTau, Twitter, Quora或者其他一些網(wǎng)站,可以幫助你獲得更多的讀者。
作者:Vik Paruchuri@Dataquest.io
譯者:cystone
校對(duì):EarlGrey
出品:PythonTG 翻譯組/編程派
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/38183.html
摘要:作者譯者校對(duì)出品翻譯組編程派這是如何打造數(shù)據(jù)科學(xué)作品集系列教程的第一篇。我們將介紹怎樣打造作品集中的第一個(gè)項(xiàng)目,怎樣使用數(shù)據(jù)講述一個(gè)有效的故事。班級(jí)大小紐約市每所學(xué)校班級(jí)規(guī)模數(shù)據(jù)。 作者:Vik Paruchuri譯者:Nick Tang校對(duì):EarlGrey出品:PythonTG 翻譯組/編程派 這是「如何打造數(shù)據(jù)科學(xué)作品集」系列教程的第一篇。如果覺得不錯(cuò),可以訂閱我們第一時(shí)間獲取最...
摘要:我們是一個(gè)大型開源社區(qū),旗下群共余人,數(shù)量超過(guò)個(gè),網(wǎng)站日超過(guò),擁有博客專家和簡(jiǎn)書程序員優(yōu)秀作者認(rèn)證。我們組織公益性的翻譯活動(dòng)學(xué)習(xí)活動(dòng)和比賽組隊(duì)活動(dòng),并和等國(guó)內(nèi)著名開源組織保持良好的合作關(guān)系。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 我們是一個(gè)...
摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來(lái)申請(qǐng)加入。版筆記等到中文字幕翻譯完畢后再整理。數(shù)量超過(guò)個(gè),在所有組織中排名前。網(wǎng)站日超過(guò),排名的峰值為。主頁(yè)歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡(jiǎn)書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1...
摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來(lái)申請(qǐng)加入。權(quán)限分配靈活,能者居之。數(shù)量超過(guò)個(gè),在所有組織中排名前。網(wǎng)站日超過(guò),排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡(jiǎn)書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
閱讀 3672·2023-04-26 01:43
閱讀 3043·2021-10-14 09:42
閱讀 5722·2021-09-30 09:59
閱讀 2228·2021-09-04 16:40
閱讀 1274·2019-08-30 15:52
閱讀 893·2019-08-29 17:09
閱讀 2099·2019-08-26 13:37
閱讀 3591·2019-08-26 10:20