<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在網(wǎng)頁中執(zhí)行一段 pandas 代碼?

          共 2101字,需瀏覽 5分鐘

           ·

          2022-05-19 17:04

          多粉絲對如何在線執(zhí)行 pandas 代碼感興趣,那么今天就簡單來說一下我探索這一功能的過程。

          首先在設(shè)計(jì)這一功能時(shí),需要先明確大致需求:

          • ???用戶可以在當(dāng)前頁面執(zhí)行
          • 不同用戶之間獨(dú)立運(yùn)行
          • 不需要加載額外代碼或操作

          其中最重要的一點(diǎn)就是用戶可以在當(dāng)前網(wǎng)站、當(dāng)前單元格執(zhí)行代碼,其次盡可能的減少其他操作。

          其實(shí)為了實(shí)現(xiàn)這個(gè)功能,我探索了大半個(gè)月,不斷修改方案,刪掉了幾個(gè)寫了很久但是不能完美實(shí)現(xiàn)的代碼,幾度放棄,最后還是磕磕碰碰的做出來,下面是我的一些經(jīng)驗(yàn),僅供參考。

          方案1

          首先最簡單的思路就是用自己的服務(wù)器,前端寫一個(gè)輸入框,然后將用戶提交的代碼到后臺(tái),執(zhí)行后再返回前端,就像這樣??

          但是思索了一番還是放棄了,除了要防止惡意用戶執(zhí)行sudo rm - rf /*之類的代碼,為了滿足第二個(gè)需求就要給每個(gè)用戶分配一定的空間,這就很吃服務(wù)器的配置,例如前天最高100+用戶同時(shí)運(yùn)行,我的 4c8g 服務(wù)器肯定是帶不動(dòng)的。

          并且如果采取這個(gè)的方案,理論上可以實(shí)現(xiàn),但除了升級(jí)服務(wù)器要錢,我也沒有開發(fā)類似產(chǎn)品的經(jīng)驗(yàn),時(shí)間成本不好預(yù)估,遂放棄。

          方案2

          之后又是一番面向 stackoverflow 編程,我了解到很多可以在線執(zhí)行代碼的網(wǎng)站,就像這樣

          確實(shí)可以在線執(zhí)行一段代碼,但是除去我是否能做出來,如何控制權(quán)限等問題,這樣的網(wǎng)站主要是以執(zhí)行代碼為主,無法完成 pandas 教程的任務(wù)。

          并且代碼不能預(yù)設(shè)置,只能進(jìn)入頁面后手動(dòng)輸入,本地?cái)?shù)據(jù)也不好加載,而且執(zhí)行一次就要跳轉(zhuǎn)到一個(gè)新的頁面,十分繁瑣(寫一個(gè)爬蟲接口也是一個(gè)辦法,但是就太依賴對方網(wǎng)站),于是很快放棄了這條思路。

          Jupyterhub

          繼續(xù)一番搜索后,我發(fā)現(xiàn)了一個(gè)神器 —— Jupyterhub

          如上圖架構(gòu)展示的一樣,使用Jupyterhub 可以給每個(gè)用戶分配一個(gè)獨(dú)立的Jupyter Notebook,并且無需考慮權(quán)限等問題,我也可以提前將代碼和數(shù)據(jù)進(jìn)行預(yù)設(shè)。

          但問題在于采取此方案無法滿足教程需求,因?yàn)槿績?nèi)容都需要放在 Jupyter Notebook中,整體上就是將 pandas300題做成了在線版,而我想要的是一個(gè)網(wǎng)站

          并且使用Jupyterhub不可避免的要進(jìn)行一些 dockerk8s 操作,這也不是我熟悉的領(lǐng)域,雖熱在這條思路上走了一段時(shí)間,但還是放棄了。

          JupyterBook

          之后又是一番檢索,但無非都是上面幾種方案,在我感覺要放棄做這個(gè)網(wǎng)站時(shí),無意中發(fā)現(xiàn)一個(gè)項(xiàng)目JupyterBook

          簡單來說,他可以將你的 Jupyter Notebook 轉(zhuǎn)換為 html 頁面(基于 sphinx),并且一個(gè)很重要的特點(diǎn)就是可以在線、交互式執(zhí)行代碼。

          具體怎么實(shí)現(xiàn)的呢?首先需要將你的項(xiàng)目上傳到一個(gè)公共資源平臺(tái)binder,這個(gè)網(wǎng)站會(huì)為你的項(xiàng)目創(chuàng)建一個(gè)鏡像,這樣可以方便給不同用戶使用

          簡單來說,可以理解為將你的 Jupyter Notebook 掛在這個(gè)網(wǎng)站,別人就能去在線執(zhí)行,但是很明顯,我們都需要跳轉(zhuǎn)到這個(gè)頁面去使用,而我希望在當(dāng)前頁面執(zhí)行代碼。

          這時(shí)就需要在使用另一個(gè)項(xiàng)目(Thebe

          它使用JupyterLab API,通過加載一段JS代碼,再指定一個(gè)執(zhí)行后端(上面提到的binder),就可以在當(dāng)前頁面執(zhí)行代碼。

          聽起來很復(fù)雜,但是實(shí)現(xiàn)起來很簡單,上面我們說到,JupyterBook 是基于 Sphinx制作頁面的,所以只需要提前在配置 Sphinx時(shí)加載 ?sphinx_thebe插件即可,

          至此,開頭我需求中的1、2就完美實(shí)現(xiàn)了,還剩最后一個(gè)問題就是如何讓用戶更少的執(zhí)行代碼?

          如果你體驗(yàn)過我的網(wǎng)站,你會(huì)發(fā)現(xiàn)執(zhí)行一個(gè) pandas 操作連 import pandas as pd和讀取數(shù)據(jù)的操作都不用!

          其實(shí)這些代碼在啟動(dòng)jupyter notebook時(shí)就預(yù)先加載了,只需要在對應(yīng)單元格上加上 thebe-init的 tag 即可。

          當(dāng)然,使用 JupyterBook 還是有很多坑,消耗我最多的時(shí)間就是在修改樣式上,默認(rèn)的樣式如下,可能英文狀態(tài)下表現(xiàn)還行,但是到中文并不是很適配

          為了大家不僅用的爽,我對網(wǎng)站顏值的要求也很高,于是爆改了幾千行的 cssjs 代碼,甚至組件的位置都調(diào)整到小數(shù)點(diǎn)后兩位才讓我滿意,磕磕碰碰一個(gè)多月終于將整個(gè)網(wǎng)站做出來

          最后,本文僅是對在線執(zhí)行代碼做了一個(gè)快速、不完整的總結(jié)。由于篇幅限制,還有很多搭建、部署網(wǎng)站細(xì)節(jié)的內(nèi)容沒有涉及到,如果你覺得不錯(cuò),歡迎點(diǎn)贊、轉(zhuǎn)發(fā).

          最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。

          有需要的可以下載學(xué)習(xí),只需要在下面的公眾號(hào)「數(shù)據(jù)前線(非本號(hào)),后臺(tái)回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線

          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

          推薦閱讀

          瀏覽 86
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜操天天日 | 国内精品久久久久久久久变脸 | 成人电影一区二区三区 | 天天色天天爽 | 人妻巨大乳HD无码 |