0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

漲知識!iPad還可以運(yùn)行Python代碼

西西 ? 作者:工程師3 ? 2018-05-17 18:03 ? 次閱讀

其實(shí),不只是iPad手機(jī)也可以。

痛點(diǎn)

我組織過幾次線下編程工作坊,帶著同學(xué)們用Python處理數(shù)據(jù)科學(xué)問題。

其中最讓人頭疼的,就是運(yùn)行環(huán)境的安裝。

實(shí)事求是地講,參加工作坊之前,我已經(jīng)做了認(rèn)真準(zhǔn)備。

例如集成環(huán)境,選用了對用戶很友好的Anaconda。

代碼在我的Macbook電腦上跑,沒有問題。還拿到學(xué)生的Windows 7上跑,也沒有問題。這才上傳到了Github。

在發(fā)布的教程文章里,我也已經(jīng)把安裝軟件包的說明寫得非常詳細(xì)。

漲知識!iPad還可以運(yùn)行Python代碼

還針對 Anaconda 這一 Python 運(yùn)行環(huán)境的安裝和運(yùn)行,專門錄制了視頻。

漲知識!iPad還可以運(yùn)行Python代碼

但是,工作坊現(xiàn)場遇見的問題,依然五花八門。

有的是操作系統(tǒng)。例如你可能用Windows 10。實(shí)話實(shí)說,我確實(shí)沒用過。拿著Surface端詳,連安裝后的Anaconda文件夾都找不到在哪兒。

有的是編碼。不同操作系統(tǒng),有的默認(rèn)中文編碼是UTF-8,有的是GBK。同樣一段中文文本,我這里顯示一切正常,你那里就是亂碼。

有的是套件路徑。來參加工作坊前,你可能看過我一些教程,并安裝了 Python 2.7 版本 Anaconda。來到現(xiàn)場,一看需要 Python 3.6 版本,你就又安裝了一份新的。結(jié)果執(zhí)行起來,你根本分不清運(yùn)行的 Python, pip 命令來自哪一個(gè)套件,更搞不清楚軟件包究竟安裝到哪里去了。再加上虛擬環(huán)境配置,你就要抓狂了。

還有的,甚至是網(wǎng)絡(luò)擁塞問題。因?yàn)橛袝r(shí)需要現(xiàn)場安裝調(diào)用體積龐大的軟件包,幾十臺電腦“預(yù)備——齊”一起爭搶有限的Wifi帶寬,后果可想而知。

痛定思痛,我決定改變一下現(xiàn)狀。

目前的教程只提供基礎(chǔ)源代碼。對于許多新手同學(xué)來說,是不夠的。

許多同學(xué),就倒在了安裝依賴軟件包的路上,繼而干脆放棄了。

變通的辦法有許多。例如干脆錄制代碼執(zhí)行視頻給你看。

但是正如我在《MOOC教學(xué),什么最重要?》一文中說過的,學(xué)習(xí)過程里,反饋?zhàn)钪匾?/p>

你需要能運(yùn)行代碼,并且第一時(shí)間獲得結(jié)果反饋。

在此基礎(chǔ)上,你還得能修改代碼,對比前后執(zhí)行結(jié)果的差別。

我得給你提供一個(gè)直接可以運(yùn)行的環(huán)境。

零安裝,自然也就沒了上述煩惱。

這個(gè)事兒可能嗎?

我研究了一下,沒問題。

只要你的設(shè)備上有個(gè)現(xiàn)代化瀏覽器(包括但不限于Google Chrome, Firefox, Safari和Microsoft Edge等)就行。

IE 8.0?

那個(gè)不行,趕緊升級吧!

讀到這里,你應(yīng)該想明白了。因?yàn)橹惶魹g覽器,不挑操作系統(tǒng),所以別說你用Windows 10,你就是用iPad,都能運(yùn)行代碼。

嘗試

請你打開瀏覽器,輸入這個(gè)鏈接(http://t.cn/R35fElv)。

看看會發(fā)生什么?

我這里用iPad給你演示。

一開始會有個(gè)啟動界面出來。請你稍等10幾秒鐘。

漲知識!iPad還可以運(yùn)行Python代碼

然后,你就能看到熟悉的Python代碼運(yùn)行界面了。

漲知識!iPad還可以運(yùn)行Python代碼

這個(gè)界面來自 Jupyter Lab。

你可以將它理解為 Jupyter Notebook 的增強(qiáng)版,它具備以下特征:

代碼單元直接鼠標(biāo)拖動;

一個(gè)瀏覽器標(biāo)簽,可打開多個(gè)Notebook,而且分別使用不同的Kernel;

提供實(shí)時(shí)渲染的Markdown編輯器;

完整的文件瀏覽器;

CSV數(shù)據(jù)文件快速瀏覽

……

圖中左側(cè)分欄,是工作目錄下的全部文件。

右側(cè)打開的,是咱們要使用的ipynb文件。

為了證明這不是逗你玩兒,請你點(diǎn)擊右側(cè)代碼上方工具欄的運(yùn)行按鈕。

點(diǎn)擊一下,就會運(yùn)行出當(dāng)前所在代碼單元的結(jié)果。

不斷點(diǎn)擊下來,你可以看見,結(jié)果都被正常渲染。

漲知識!iPad還可以運(yùn)行Python代碼

連圖像也能正常顯示。

漲知識!iPad還可以運(yùn)行Python代碼

甚至連下面這種需要一定運(yùn)算量的可視化結(jié)果,都沒問題。

漲知識!iPad還可以運(yùn)行Python代碼

為了證明這不是變魔術(shù),你可以在新的單元格,寫一行輸出語句。

就讓Python輸出你的名字吧。

假如你叫 Chuck,就這樣寫:

print(“Hello, Chuck!”)

把它替換成你自己的姓名,看看輸出結(jié)果是否正確?

漲知識!iPad還可以運(yùn)行Python代碼

其實(shí),又何止是iPad而已?

你如果足夠勇(sang) 于(xin) 嘗(bing) 試(kuang),手機(jī)其實(shí)也是可以的。

就像這樣。

漲知識!iPad還可以運(yùn)行Python代碼

流程

下面我給你講講,這種效果是怎么做出來的。

我們需要用到一款工具,叫做 mybinder 。它可以幫助我們,把 github 上的某個(gè)代碼倉庫(repo),快速轉(zhuǎn)換成為一個(gè)可運(yùn)行的環(huán)境。

注意 mybinder 為我們提供了云設(shè)施,也就是計(jì)算資源和存儲資源。因此即便許許多多的用戶同時(shí)在線使用同一份代碼轉(zhuǎn)換出來的環(huán)境,也不會互相沖突。

我們先來看看,怎么準(zhǔn)備一個(gè)可供 mybinder 順利轉(zhuǎn)換的代碼倉庫。

我為你提供的樣例在這里(http://t.cn/R35MEqk):

漲知識!iPad還可以運(yùn)行Python代碼

順便說一句,這個(gè)樣例來自于我的數(shù)據(jù)科學(xué)系列教程之《如何用Python處理自然語言?(Spacy與Word Embedding)》。感興趣的同學(xué)可以點(diǎn)擊鏈接,查看原文。

在該 GitHub 頁面展示的文件列表中,你需要注意以下3個(gè)文件:

demo.ipynb

environment.yml

postBuild

其中demo.ipynb就是你在上一節(jié)看到的包含源代碼的Jupyter Notebook文件。你需要首先在本地安裝相關(guān)軟件包,并且運(yùn)行測試通過。

如果在你本地運(yùn)行都有錯(cuò)誤,放到云上去,想必也難以正常運(yùn)行。

environment.yml文件非常重要,它來告訴 mybinder ,需要如何為你的代碼運(yùn)行準(zhǔn)備環(huán)境。

我們打開看看該文件的內(nèi)容:

dependencies: - python=3 - pip: - spacy - ipykernel - scipy - numpy - scikit-learn - matplotlib - pandas - thinc

這個(gè)文件首先告訴 mybinder ,你的 Python 版本。我們采用的是 3.6 版。所以只需要指定 python=3 即可。mybinder 會自動為你下載安裝最新的。

然后這個(gè)文件說明需要使用 pip 工具安裝哪些軟件包。我們需要把所有依賴的安裝包都羅列出來。

這就是之前,我總在教程里給你說明的那些準(zhǔn)備步驟。

但是這還沒有完,因?yàn)?mybinder 只是為你安裝好了一些軟件依賴。

這里還有兩個(gè)步驟需要處理:

為了分析語義,我們需要調(diào)用預(yù)訓(xùn)練的Word2vec模型,這需要 mybinder 為我們提前下載好。

Jupyter Notebook 打開后,應(yīng)當(dāng)使用的 kernel 名稱為 wangshuyi ,這個(gè) kernel 目前還沒有在 Jupyter 里面注冊。我們需要 mybinder 代勞。

為了完成上述兩個(gè)步驟,你就需要準(zhǔn)備最后一個(gè)postBuild文件。

它的內(nèi)容如下:

python -m spacy download en python -m spacy download en_core_web_lg python -m ipykernel install --user --name=wangshuyi

跟它的名字一樣。它是在 mybinder 依據(jù) environment.yml 安裝了依賴組建后,依次執(zhí)行的命令。如果你的代碼需要其他的命令提供環(huán)境支持,也可以放在這里。

至此,你的準(zhǔn)備工作就算結(jié)束了。

魔法表演正式開始。

請打開 mybinder 的網(wǎng)址(https://mybinder.org/)。

漲知識!iPad還可以運(yùn)行Python代碼

在 “GitHub repo or URL” 一欄,填寫我們的 github 代碼倉庫鏈接,即:

https://github.com/wshuyi/demo-spacy-text-processing

我們希望一進(jìn)入界面,就自動打開 demo.ipynb ,因此需要在“Path to a notebook file (optional)”一欄填寫demo.ipynb 。

這時(shí),你會發(fā)現(xiàn)“Copy the URL below and share your Binder with others:”一欄中,出現(xiàn)了你的代碼運(yùn)行環(huán)境網(wǎng)址。

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?filepath=demo.ipynb

點(diǎn)擊右側(cè)的“復(fù)制”按鈕保存到你的記事本里面。將來找到你轉(zhuǎn)換好的運(yùn)行環(huán)境,就全靠它了。

妥善保存地址后,點(diǎn)擊“Launch”按鈕。

漲知識!iPad還可以運(yùn)行Python代碼

根據(jù)你的依賴安裝包數(shù)量等因素,你需要等待的時(shí)間長短不一。但是只有第一次構(gòu)建的時(shí)候,需要花一些時(shí)間。

以后每一次調(diào)用執(zhí)行,就都會非??炝?。

構(gòu)建完畢后, mybinder 會自動為我們開啟對應(yīng)的運(yùn)行環(huán)境。

漲知識!iPad還可以運(yùn)行Python代碼

很有成就感吧!

測試一下,能夠正常運(yùn)行代碼,就證明我們成功了。

但是你會發(fā)現(xiàn),不對啊!

老師你剛才用 iPad 展示的,不是高級版的 Jupyter Lab 嗎?怎么又變成了 Jupyter Notebook 了?

我也想要高級版!

別著急。

看看你目前的鏈接地址:

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?filepath=demo.ipynb

你只需要做個(gè)小小的調(diào)整,將其中的:

?filepath=

替換為:

?urlpath=lab/tree/

替換后的鏈接為:

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?urlpath=lab/tree/demo.ipynb

把它輸入到瀏覽器,看看出來的結(jié)果:

漲知識!iPad還可以運(yùn)行Python代碼

這下沒問題了吧?

原理

你是不是覺得,mybinder 很黑科技

其實(shí),也不算。

它只是把已有的幾項(xiàng)技術(shù),鏈接了起來。

這大概也算是“積木式創(chuàng)新”的一個(gè)實(shí)例吧。

我們看看 mybinder 的說明:

漲知識!iPad還可以運(yùn)行Python代碼

可以看到,其中最為關(guān)鍵的技術(shù),是用了 docker 。

Docker 是個(gè)什么東西呢?

簡單來說,Docker 就是為了不同平臺上,都能夠順利執(zhí)行同一份代碼的保障工具。

你有些猶疑,這說的不是 Java 嗎?

沒錯(cuò),Java 的宣傳口號,就是一次編碼,各處運(yùn)行。

它利用虛擬機(jī),來保障這種能力。

漲知識!iPad還可以運(yùn)行Python代碼

但是,如果你經(jīng)常使用 Java 開發(fā)出來的工具,就應(yīng)該了解痛點(diǎn)有哪些了。

至少,你應(yīng)該對 Java 程序的運(yùn)行速度,有一些體會。

漲知識!iPad還可以運(yùn)行Python代碼

上圖中,左側(cè)是虛擬機(jī),右側(cè)是Docker。

Docker 不但效率上要強(qiáng)過 Java 虛擬機(jī),而且它支持的編程語言也不僅僅是一種。

至于其他好處,咱們就不展開了。否則聽起來像廣告。

其實(shí),把 github 代碼倉庫轉(zhuǎn)換為 docker 鏡像(image)的工作,也不是 mybinder 自己來做的。

它調(diào)用的,是另外的一個(gè)工具,叫做 repo2docker(https://github.com/jupyter/repo2docker) 。

漲知識!iPad還可以運(yùn)行Python代碼

而你的瀏覽器能夠執(zhí)行 Python 代碼,是因?yàn)?Jupyter Notebook (或者Lab)本來就是建立在“瀏覽器/服務(wù)器”(Browser / Server, B/S)結(jié)構(gòu)上。

如果你已經(jīng)在本地計(jì)算機(jī)安裝過 Anaconda ,那不妨看看本地執(zhí)行這個(gè)語句:

jupyter lab

會出現(xiàn)什么?

漲知識!iPad還可以運(yùn)行Python代碼

對,它開啟了一個(gè)服務(wù)器,然后打開你的瀏覽器,跟這個(gè)服務(wù)器通訊。

Jupyter 的這種設(shè)計(jì),本身就讓它的擴(kuò)展極為方便。

無論 Jupyter 服務(wù)器是運(yùn)行在你的本地筆記本上,還是擺在另一個(gè)大洲的機(jī)房,對你執(zhí)行 Python 代碼來說,都是沒有本質(zhì)區(qū)別的。

另外,如果你以為 mybinder 只能讓你在瀏覽器上跑 Python 代碼,那就太小瞧它了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • iPad
    +關(guān)注

    關(guān)注

    1

    文章

    1375

    瀏覽量

    81218
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84690
收藏 人收藏

    評論

    相關(guān)推薦

    Python 代碼加速運(yùn)行的的小技巧

    Python 是一種腳本語言,相比 C/C++ 這樣的編譯語言,在效率和性能方面存在一些不足。但是,有很多時(shí)候,Python 的效率并沒有想象中的那么夸張。本文對一些 Python 代碼
    的頭像 發(fā)表于 09-01 11:28 ?1715次閱讀

    使Python代碼在BeagleBoard上運(yùn)行

    電子發(fā)燒友網(wǎng)站提供《使Python代碼在BeagleBoard上運(yùn)行.zip》資料免費(fèi)下載
    發(fā)表于 06-16 15:03 ?0次下載
    使<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>在BeagleBoard上<b class='flag-5'>運(yùn)行</b>

    優(yōu)化Python代碼有哪些工具

    代碼。 1. Jupyter Notebook:這個(gè)交互式筆記本工具允許您在瀏覽器中編寫和運(yùn)行Python代碼,并以文檔形式保存。Jupyter Notebook使得
    的頭像 發(fā)表于 07-24 09:28 ?1367次閱讀

    python怎樣運(yùn)行代碼

    討論Python代碼運(yùn)行方式,包括解釋器、交互式環(huán)境和命令行。 Python代碼可以通過兩種主
    的頭像 發(fā)表于 11-22 10:31 ?1308次閱讀

    python如何換行而不運(yùn)行代碼

    的情況下可以使用換行字符來達(dá)到這個(gè)目的。 在Python中,換行字符一般是使用符號來表示。下面是一些常用的換行字符示例: 在字符串中使用換行字符: 在字符串中,可以使用換行字符來換行而不運(yùn)行
    的頭像 發(fā)表于 11-22 10:52 ?2613次閱讀

    python寫完程序之后怎么運(yùn)行

    Python是一門簡潔、易學(xué)的編程語言,被廣泛應(yīng)用于數(shù)據(jù)分析、人工智能等領(lǐng)域。在學(xué)習(xí)Python編程的過程中,了解程序的運(yùn)行機(jī)制是至關(guān)重要的。本文將詳盡解析Python程序的
    的頭像 發(fā)表于 11-22 11:10 ?1010次閱讀

    python如何查看運(yùn)行過程

    Python是一門高級編程語言,可以用于開發(fā)各種類型的應(yīng)用程序、網(wǎng)站和數(shù)據(jù)分析。當(dāng)我們編寫并運(yùn)行Python程序時(shí),有時(shí)候需要了解程序執(zhí)行的詳細(xì)過程,以便調(diào)試
    的頭像 發(fā)表于 11-22 11:13 ?2037次閱讀

    知識了!元器件包裝標(biāo)簽中的“e”代碼,原來是這個(gè)含義……

    知識了!元器件包裝標(biāo)簽中的“e”代碼,原來是這個(gè)含義……
    的頭像 發(fā)表于 12-06 15:43 ?1238次閱讀

    python運(yùn)行一次自動再次運(yùn)行

    使用循環(huán)語句是最簡單的一種實(shí)現(xiàn)自動運(yùn)行功能的方法。在Python中,可以使用while循環(huán)或for循環(huán)來實(shí)現(xiàn)。下面是一個(gè)使用while循環(huán)實(shí)現(xiàn)自動運(yùn)行的例子: while True
    的頭像 發(fā)表于 11-23 15:52 ?1991次閱讀

    python代碼寫完后點(diǎn)哪個(gè)運(yùn)行

    當(dāng)你完成了編寫Python代碼后,你可以選擇多種方式來運(yùn)行它。下面是幾種常見的運(yùn)行代碼的方式:
    的頭像 發(fā)表于 11-24 09:28 ?5549次閱讀

    如何運(yùn)行Python程序

    運(yùn)行Python程序非常簡單。Python是一種解釋型語言,這意味著可以直接通過解釋器來執(zhí)行代碼。下面我將詳細(xì)介紹如何
    的頭像 發(fā)表于 11-24 09:31 ?1249次閱讀

    python如何換行而不運(yùn)行代碼

    和可讀性。 在Python中,可以使用兩個(gè)主要的方法進(jìn)行換行:使用反斜杠()和使用圓括號(())。 第一種方式是使用反斜杠()來表示換行。在Python中,反斜杠是一個(gè)轉(zhuǎn)義字符,它可以
    的頭像 發(fā)表于 11-24 09:50 ?3169次閱讀

    python運(yùn)行程序出現(xiàn)紅色空白

    類型語言,它對代碼的語法非常嚴(yán)格。如果你的代碼存在語法錯(cuò)誤,Python解釋器將無法正確解析代碼運(yùn)行。常見的語法錯(cuò)誤包括拼寫錯(cuò)誤、缺少括號
    的頭像 發(fā)表于 11-28 15:30 ?2002次閱讀

    python軟件怎么運(yùn)行代碼

    Python是一種高級編程語言,它被廣泛用于開發(fā)各種類型的應(yīng)用程序,從簡單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運(yùn)行Python代碼,您需要一個(gè)P
    的頭像 發(fā)表于 11-28 16:02 ?903次閱讀

    python運(yùn)行指定幾行

    Python是一種高級編程語言,可以用于開發(fā)各種類型的應(yīng)用程序,包括網(wǎng)站、桌面應(yīng)用程序、數(shù)據(jù)分析和人工智能等。在Python運(yùn)行指定的幾行代碼
    的頭像 發(fā)表于 11-29 15:04 ?972次閱讀