我們們的 Python 教程程式碼已經可以免安裝線上執行了。但如果你希望在本地克隆執行環境,請參考本文的步驟說明。
疑惑
這些日子,我用課餘時間,忙著把自己知識星球的分享文章轉移到語雀平臺,以便於訂閱使用者閱讀和獲得即時推送。目前該分享空間已經初具規模。
回過頭來一看,專欄和微信公眾號後臺,積攢了不少使用者的提問。
例如這位使用者問:
為什麼我在binder上新建的檔案再次開啟後就丟失了?
問題來自於我的《如何用iPad執行Python程式碼?》一文。
我們們用 mybinder ,是為了給讀者們提供一個一致性的程式碼執行環境。
你可以免安裝,執行樣例程式碼。可以修改程式碼重新執行,甚至可以上傳資料檔案,做自己的分析。
我需要補充說明一個重要事項—— mybinder 為我們們提供的 Python 執行環境資源,是共享的,並非永久獨佔空間。
每個同學,開啟相同的一個連結後,mybinder 都開啟一個獨立的環境,大家互不干擾。
但是,Python 環境的執行,是需要後臺的資源支援的。
你每開啟一個 mybinder 的連結,後臺都要給你提供對應的 CPU、記憶體、硬碟等一系列資源。
如果這些資源被大量使用者長期佔用,平臺無法承受。新的使用者也就無法再加入使用了。
mybinder 平臺和使用者的約定,是如果你超過十分鐘“不活躍”(inactivity),系統就會關閉你的會話(session),以回收資源,服務更多有需要的使用者。
你執行結束關閉瀏覽器,超過10分鐘,再用該連結重新訪問,所做的改動自然就都不見了。
也正因如此,我才在教程的末尾,為你提供了原始碼的 github repo 地址。
你可以選擇在自己的機器上,克隆教程 Python 執行環境。
哪些情況下,你會需要在本地克隆 Python 執行環境呢?
如果你的資料比較大,或者安全性要求較高,上傳到雲端不方便;
如果你怕因為網路穩定性的原因,導致程式碼執行中途網路出現問題,前功盡棄;
如果你執行的深度學習模型,需要 GPU 或者大容量記憶體的支援……
遇到上述情況,不要緊。
下面我給你介紹如何使用 pipenv ,方便地克隆教程指定的 Python 執行環境,在本地執行 Jupyter Notebook。
流程
我們們以《如何用 Python 和 API 收集與分析網路資料?》這篇文章為例。
文章結尾部分,我給你提供了對應的 github repo 的程式碼地址(t.cn/R3usEti)。
你也可以直接通過這個連結(t.cn/R3usDi9),直接下載包含原始碼與執行環境的壓縮包。
解壓之後,你會看到目錄中包含以下配置相關檔案:
- environment.yml
- postBuild
- Pipfile
其中 environment.yml
和 postBuild
是為 mybinder 使用的。本地克隆執行環境的時候,你可以忽略它們。
請注意其中的 Pipenv 檔案。
我們開啟 Pipenv 檔案,看看內容:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
ipykernel = "*"
plotnine = "*"
requests = "*"
[dev-packages]
[requires]
python_version = "3.6"
複製程式碼
其中 requires 區域,說明了本教程使用的環境,是 Python 3.6 版本。
packages 區域,告訴 pipenv ,需要給我們準備的軟體包都有哪些。
下面我們看看如何用 pipenv 克隆執行環境。
你需要檢查是否已經安裝了 Anaconda 3。
如果你還沒有安裝,請參考我之前為你製作的這篇教程 《如何安裝Python執行環境Anaconda?(視訊教程)》把它安裝好,並且學習如何在終端進入解壓後的壓縮包。
我把後續的詳細操作步驟,錄了一段視訊,你可以直接點開這個連結(t.cn/R1cWIWr),播放該視訊。
如果你之前有安裝經驗,也可以根據下面的文字說明操作。
之後,執行以下語句:
pip install pipenv
複製程式碼
這會為我們安裝 pipenv 工具,以便處理 Pipfile。
第二步,執行:
pipenv install --skip-lock
複製程式碼
這個命令,可以讓 Python 根據我們目前的 Pipenv 配置,自動構建環境,並且從網上把所有需要用到的依賴軟體包,都弄下來,安裝好。
第三步,執行:
pipenv run python -m ipykernel install --user --name=wangshuyi
複製程式碼
這條命令,幫你給 Jupyter Notebook ,安裝一個核心組塊,把你剛才安裝的這些軟體包資訊,都放在這個組塊裡。
為了便於在系列教程中重複使用程式碼,我給這個組塊命名為 wangshuyi。
對於一般的教程原始碼,上述步驟就可以了。但是因為《如何用 Python 和 API 收集與分析網路資料?》這篇文章,涉及到繪圖,而且裡面出現中文顯示。
我們需要進行一些處理,以便讓程式順利執行,保證中文字元正常顯示。
方法是執行下面這條語句:
pipenv run python handle_matplotlib_chinese.py
複製程式碼
最後一步,開啟 Jupyter Notebook :
jupyter notebook
複製程式碼
這時候,你就可以看到熟悉的 Jupyter Notebook 介面了。
注意這個示例程式碼中,需要你輸入自己的 AppCode,所以你需要把其中的“Your AppCode here”字樣,替換為你自己的 AppCode值。否則下面的執行會報錯。
替換之後,點選選單欄中的“Cell”,選擇“Run All”,看能否正常執行全部程式碼,並且顯示分析結果圖形。
如果一切正常,意味著你的 Python 執行環境克隆工作順利完成。
祝賀你!
背景
有讀者留言詢問,為什麼用了兩套不同的虛擬軟體包管理工具。
因為很遺憾,本文寫作時, mybinder 還不支援 Pipfile 配置檔案。
其實,我們這裡用到的 Pipfile ,不是 pipenv 這個軟體專用的配置檔案格式。
它是未來 Python 軟體包管理工具 pip 的官方指定配置檔案格式。
在未來,如果你用 pip 安裝軟體,就要跟 Pipfile 打交道。
不過,Python 開源社群的很多舉動,進展都很緩慢。
例如 Python 3,已經出來這麼久了, Python 2 還沒有退休呢。
pip 這種底層的包管理方式,哪是一兩天就能發生根本改變的?
pipenv 出現,是因為人們不想等了。
現在,就是現在,我們要用最符合人性的 Python 軟體包管理工具。
使用 pipenv,好處有很多。
僅舉一例,用 pipenv ,你可以用一條命令,檢視當前專案軟體包之間的依賴關係。
感覺怎麼樣?
如果你對 pipenv 感興趣,想了解它的特性、演進過程,請點選這個連結(t.cn/R1cYQSU),檢視 PyCon 2018 大會上 Kenneth Reitz 的講解。
Kenneth Reitz 是誰?
如果你讀過我的《如何用 Python 和 API 收集與分析網路資料?》一文,你已經用過他的作品了。
對,“給人用的” (for humans) HTTP 工具,requests,就是他寫的。
討論
你更喜歡在 mybinder 直接線上執行 Python 教程程式碼,還是喜歡在本地克隆一個完整的執行環境呢?為什麼?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。
喜歡請點贊。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。
如果你對資料科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門資料科學?》,裡面還有更多的有趣問題及解法。