Sitemap

[新手Python 應用搭建指南] 4. 專案雲端佈屬 +新專案食譜選擇器

本系列文章我將手把手的帶你們完成應用程式專案。從選題,找資料,探索資料,最後進而搭建出應用並且部署在網頁上讓你可以秀給你的媽媽,老闆或是阿娜答。

11 min readApr 21, 2022

--

關聯文章目錄

4篇轉職工具箱 Four weeks to reach even better

4篇新手Python 應用搭建指南

Press enter or click to view image in full size
Photo by S O C I A L . C U T on Unsplash

好的教學應該像食譜,給你清晰的指引,用到的工具與明確的度量衡。希望我能讓任何人都可以像學做一道菜一樣開始你的程式學習之旅。

上次的教學,我們從已經學會怎麼像個資料科學家一樣工作,首先設定題目查找資料,定義關鍵的欄位,進行資料探索與預處理。使用pandas開啟與處理資料,並且使用streamlit來架構專案,讓專案可以用網頁的方式開啟與展示。

上面講到的這些就是資料科學的日常阿。現在我們只差臨門幾小步就可以讓結果呈現在網路上了。就讓我們一起進行吧~

  1. 創建github帳號
  2. 將專案資料夾上傳到github
  3. 創建streamlit帳號
  4. 指定streamlit與github連動的關係

github是程式碼的倉庫,可以起到分散式版本管理的功能。

另一方面,streamlit最棒的地方是當你設定跟github連動時,它會幫你監聽github的更新。當你把程式碼上傳到你的程式碼倉庫,streamlit會自動更新!! 專案在進行佈屬的時候,最擔心遺漏掉那些區塊忘記進行,而程式設計師的群體發明種種自動化就是為了避免犯錯(同時也是因為懶XD),streamlit 讓我們體會到自動化佈屬的好處,這部份我們後面也會示範

來深入討論一下github 的優點以及為什麼我們非用不可。設想一個情境,今天你寫好一段程式碼,結果測試的時候發現問題,而且改了太多東西一個頭兩個大,你心中冒出一個聲音,早知道別改了,先讓我回到昨天的版本吧。沒錯~ 版本管理最大的優勢就出來了,當你小步小步的更改你的程式碼,每一次告一小個段落,你就將可以跑的程式碼鎖定一個小版本,就像玩遊戲的時候你設定一個重生點一樣,等等事態不對的時候你隨時可以回到你這個小版本來。

也許有人會說,那我就ctrl-c ctrl-v 就好了。git版本控管的好處是它的這些備份都有跡可循,你隨時可以回到過去的版本查看並隨時還原任何時刻的版本,在此強大功能下,你可以只佔用一倍的檔案空間,如果使用複製貼上大法的人可能已經被檔案容量不足所苦,更可怕的是,你可能每存一次就在後面加一個<檔名_new.py>你可能最後就會一堆 <project_new_modified_final_new_002_final.py>你都忘了這個到底new 還是final。

透過git的版本管理,你可以只保留一份檔案,一個檔名,而且還可以綜觀其每一行程式碼被修改的歷史。

有時候看到一條寫得很醜很不合理的code就上去blame一下(git blame可以看到該檔案指定行數的修改紀錄) 發現那個糟糕的程式碼就是自己推上去的=P,搭時光機回去掐死過去的自己吧,好吧這一定是自己有在進步的證明(或自我安慰)。

總而言之,git版本管理工具,真的是現代程式開發者的福音,並且在多人協作的時候可以起到非常關鍵的輔助效果(這是後話,有機會再多解釋解釋)

下面介紹帳號創建流程

github ,現在帳號建立竟然是互動式介面,好像在打電動阿,按照步驟一步一步就可以完成創建

Press enter or click to view image in full size
節錄自github

streamlit ,拿上面創建好的github帳號,來進行連動綁定就行,當年我創streamlit帳號的時候需要人工審核,大約需要一天的時間不確定現在帳號創建是怎麼樣的機制(畢竟被snowflake併購等等)規則可能已經不太一樣,有成功的朋友麻煩再跟我update一下。當初一個streamlit帳號只能開3個app,現在可以免費開無限個(我也是因為當初只能佈3個app,因為專案創意太多只好學著怎麼用heroku,並且讓streamlit app可以快速佈屬到heroku上面,有機會也可以再專文一篇分享)

現在我們兩個帳號都開通好了之後就可以開始進行github專案建立與控管了。

… 實作畫面…

  1. 登入github後點選綠色的按鈕開新專案
Press enter or click to view image in full size

2. 新增專案名字,以imdb_st為例(這個專案名字不需要全網域獨一無二,只要自己沒有創建過同名專案就可以,舉例來說,網路上可能已經很多叫imdb_st的專案,但只要我沒有創建過同名的專案,我仍然可以創建)

創建之後我們要跟streamlit進行專案連動,也將以這個名字為基準

Press enter or click to view image in full size

2. 沒什麼問題就往下滑,按綠按鈕創建

Press enter or click to view image in full size
Press enter or click to view image in full size

之後會進到這個畫面,這個畫面很新手友善,可以參考一下,裡面需要安裝git(還沒安裝的點這個連結),由於我們專案資料夾還是空的,可以先採用第一個方案

第一次做我們可以選擇複製上面提示的那段程式碼到terminal貼上(windows的使用者最好使用git bash 以免會有很多linux指令無法執行)

對了,記得先創建專案資料夾

mkdir -p workspace/imdb_st

cd workspace/imdb_st

之後再貼上下方這些copy來的code

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

過程中可以考慮認證登入,這樣之後要推code比較方便,這是vscode一個很方便的小功能

Press enter or click to view image in full size

看到上面的畫面就是成功了

這時再進到專案資料夾,就可以看到已經順利更新了,當我們按下重新整理,就可以看到畫面不同了

Press enter or click to view image in full size

這時我們先回到上禮拜的進度,往下滑到最下面應該有個寫好的code (連結)

接著就照著上週的進度,創建requirements.txt(目前只用到streamlit,需要放streamlit), 將下載好的csv移入,以及最後的將app.py貼上

Press enter or click to view image in full size

我們這時候打status就會看到三個需要增加的檔案

Press enter or click to view image in full size

接下來我們需要

  1. git add .
  2. git commit -m “commit message”
  3. git push

增加檔案到等待commit 的區域,之後commit變更並附上commit message

在公司的專案我們必須要針對每個commit解釋為什麼(WHY)需要變更,以及如何(How)你做了什麼來變更.之後可以出git的專文詳細解釋,現在就讓我們快速進到下一步吧

最後則是push 這些變更到git伺服器

commit message 可以打你要的,在這裡我暫時留“讓file 跟上一週同步”,簡單的解釋我這個commit在做什麼

Press enter or click to view image in full size

這時候我們再回去看github的時候就會發現,很棒,都已經update好了(記得F5重新整理)

Press enter or click to view image in full size

至此code的部分告一個段落,接下來我們來看我們的streamlit要做什麼吧

首先打開streamlit,登入後點選藍色大大的new app

Press enter or click to view image in full size
Press enter or click to view image in full size

接下來到repository的地方點選你要跟streamlit同步的github專案名稱,我剛剛創的是imdb_st,因此我就點下此專案,最下方的app.py是因為我的專案主要的檔案名字是取作app.py,所以如果你們想要用不同名字,要記得改一下名字。 確認一下沒問題就可以按下Deploy!了

Press enter or click to view image in full size

接著你就會看到很可愛的做蛋糕畫面,你的app正在烘培中呦

Press enter or click to view image in full size

好了之後你的app就會跳出來了,成功!

Press enter or click to view image in full size

專案的網址也會貼合著你的github專案,是不是很可愛呢

https://share.streamlit.io/yz830620/imdb_st/main/app.py

這樣佈屬的部分已經告一個段落了,真正的做到一鍵懶人部署

Press enter or click to view image in full size
Photo by Mika Baumeister on Unsplash

這時候我們發現一個問題,時間如果顛倒的時候,會噴錯給使用者看

Press enter or click to view image in full size

那我就來帶你們解決這個問題,順便示範怎麼動態變更,動態部署

我發現我的app.py中的41行有一些typo導致它出了問題

Press enter or click to view image in full size

我們來將其改正,改完記得ctrl + s存檔

Press enter or click to view image in full size
Press enter or click to view image in full size

我們可以在命令列輸入 git diff 來診斷有改了哪些地方

看起來就剛好是我們改的這行,沒錯

接下來就是 add, commit, push 一條龍

Press enter or click to view image in full size
commit message 我寫 修復這個年份交換的錯誤

再回來我們的github專案就可以看到有正確的上傳了(1分鐘前更新)

Press enter or click to view image in full size

接下來你可能會覺得要開始頭痛了,機器已經部署了,要怎麼解除要怎麼link unlink,然而streamlit的聰明讓我們完全避免做那些事情,他會自動來監聽我們這個imdb_st專案有沒有變化,如果今天你有push新的版本上去,當他發現現在最新的版本跟他手上的不一樣,它就會自動的幫你下載並且重啟服務。

重新去一下服務地址,太棒了,正常工作

Press enter or click to view image in full size

今天的篇幅有點多,需要整合很多專案的知識,我們今天就先講解到這邊,希望大家都能抽空練習,至於食譜的專案,我之後會抽空在專文寫一篇,大家帶著這次練習的機會,一起打鐵趁熱做出不同的有趣應用吧。有任何收穫或是有趣的專案都歡迎跟我分享歐

Press enter or click to view image in full size
Photo by Jo Szczepanska on Unsplash

以往覺得很困難的網路服務部署隨著科技發達越來越簡單,我最近甚至買了自己的網域(evenpan.com)也買了虛擬機部署一堆服務在上面,之後會再寫更多專文教學如何自己hardcore的搞出那些,真的需要花很多時間研究呢。 不過目前這個streamlit 的服務一個按鈕自己就可以啟動成https服務,自己的伺服器要做成這些功能就會花費更多功夫。但是擁有這一切就像有自己的孩子一樣讓人開心,每天都可以幫它加上更多功能,讓它更加強大,並且幫你處理更多問題,這一切真的很讓人興奮。

順帶一提,因為疫情的關係,我暫時手邊沒有自己的windows電腦,所以今天的vscode 環節包括git 都是我用虛擬機完成的,其實是run在linux上面的服務。想學怎麼做的記得持續追蹤我的頻道啦~~

Press enter or click to view image in full size

新手python 四篇正式下課,

恭喜,你現在也是個有服務的男人/女人了,下次可以拍著胸脯跟別人大聲說話,來比服務啊!!!

--

--

Even Pan
Even Pan

Written by Even Pan

Technical blogger who like to held hands-on ml workshops. Fast-paced learner and highly interested in the latest technologies.

No responses yet