2022年9月2日 星期五

好站 : 線上 Python 執行平台 replit.com

最近在維元老師的資料科學課程中得知 Repl.it 這個線上開發環境, 它提供了超過 50 種程式語言的線上編譯執行功能, 註冊可以獲得免費 500MB 空間來儲存程式檔 (公開的), 而付費用戶則可擁有私人儲存空間. 目前使用者超過 20 萬, 但這公司全職員工卻只有 10 個人, 參考 :

# Wiki: Repl.it (維基)
https://replit.com/  (官網首頁)




按 Start coding 或右上方 Sign Up 鈕先註冊才能使用 (預設 free 帳戶) : 




然後去信箱收信, 按底下超連結確認即可  : 




確認後會自動登入系統 : 




按 "+Create" 可新增一個 Repl (開發任務) :




這裡 Template 欄選擇 Python, 而 Title 欄填入專案標題, 再按 "+ Create" 鈕, 就會進入此專案的頁面 :





專案網頁分成左中右三區 :
  • 左 (檔案系統管理) :
    可新增檔案與目錄, 也上傳本機檔案與目錄, 或將檔案壓縮為 zip 檔下載. 
  • 中 (程式碼編輯區) :
    可輸入程式碼後按上方的 Run 鈕執行, 結果會顯示在右邊 Console 內).
  • 右 (Console 與 Shell 視窗) :
    Console 視窗可輸入程式碼以互動式執行 (類似 Python IDLE 介面).
    Shell 視窗可輸入 Linux 系統指令, 例如用 pip install 安裝 Python 套件, 或用 python xxx.py 執行 .py 程式檔. 
官網教學影片如下 : 





目前 Replit 提供的 Python 版本是 3.8.2 版, 它允許使用標準函式庫的 sys 模組 (很棒), 可以在 Console 中輸入下列程式碼檢視 Python 版本 :

import sys
sys.version




也可以使用下列程式碼檢視版本, 這次改為打在編輯區存成 main.py  :

from platform import python_version
print(python_version())




按上方的 "Run" 執行, 結果會顯示於右方的 Console 視窗 : 



在 Shell 視窗輸入 pip list 顯示預安裝套件 : 




完整結果如下 :

~/test$ pip list    
Package                           Version
--------------------------------- ---------
aiohttp                           3.8.1
aiosignal                         1.2.0
async-timeout                     4.0.2
attrs                             21.4.0
backports-entry-points-selectable 1.1.1
bokeh                             2.4.3
cachecontrol                      0.12.10
cachy                             0.3.0
certifi                           2022.6.15
cffi                              1.15.0
charset-normalizer                2.0.12
cleo                              0.8.1
click                             8.1.3
clikit                            0.6.2
crashtest                         0.3.1
cryptography                      35.0.0
cycler                            0.11.0
debugpy                           1.2.1
distlib                           0.3.3
docopt                            0.6.2
filelock                          3.3.2
flask                             2.1.2
fonttools                         4.36.0
frozenlist                        1.3.0
future                            0.18.2
html5lib                          1.1
idna                              3.3
importlib-metadata                4.11.4
itsdangerous                      2.1.2
jedi                              0.18.1
jeepney                           0.7.1
jinja2                            3.1.2
keyring                           21.8.0
kiwisolver                        1.4.4
lockfile                          0.12.2
markupsafe                        2.1.1
matplotlib                        3.5.3
msgpack                           1.0.2
multidict                         6.0.2
numpy                             1.22.2
packaging                         21.3
pandas                            1.4.3
parso                             0.8.3
pastel                            0.2.1
pexpect                           4.8.0
pillow                            9.2.0
pip                               21.2.dev0
pipreqs-amasad                    0.4.10
pkginfo                           1.7.1
platformdirs                      2.4.0
pluggy                            1.0.0
poetry                            1.1.11
poetry-core                       1.0.7
ptyprocess                        0.7.0
pycparser                         2.21
pyflakes                          2.1.1
pylev                             1.4.0
pyparsing                         3.0.9
python-dateutil                   2.8.2
python-lsp-jsonrpc                1.0.0
python-lsp-server                 1.4.1
pytz                              2022.2.1
pyyaml                            6.0
replit                            3.2.4
requests                          2.28.0
requests-toolbelt                 0.9.1
rope                              0.18.0
scipy                             1.9.0
seaborn                           0.11.2
secretstorage                     3.3.1
setuptools                        60.3.1
shellingham                       1.4.0
six                               1.16.0
toml                              0.10.2
tomlkit                           0.7.2
tornado                           6.2
typing-extensions                 3.10.0.2
ujson                             5.3.0
urllib3                           1.26.9
virtualenv                        20.10.0
webencodings                      0.5.1
werkzeug                          2.1.2
wheel                             0.37.1
yapf                              0.31.0
yarg                              0.1.9
yarl                              1.7.2
zipp                              3.8.0

可見常用的套件都幫我們裝好了, 例如 :
  • 網頁爬蟲 : requests, urllib3, html5lib
  • 資料科學 : Pandas, Matplotlib, Seaborn, Bokeh
  • 科學計算 : Numpy, Scipy
  • 網頁框架 : Flask, Tornado
  • 影像處理 : Pillow
我常用但沒有預裝的有 : BeautifulSoup, Django, Sympy 等, 可在 Shell 視窗中手動安裝的, 例如 : 

~/Python-Tests$ pip install beautifulsoup4    
Looking in indexes: https://package-proxy.replit.com/pypi/simple/
Collecting beautifulsoup4
  Using cached https://package-proxy.replit.com/pypi/packages/9c/d8/909c4089dbe4ade9f9705f143c9f13f065049a9d5e7d34c828aefdd0a97c/beautifulsoup4-4.11.1-py3-none-any.whl (128 kB)
Collecting soupsieve>1.2
  Using cached https://package-proxy.replit.com/pypi/packages/16/e3/4ad79882b92617e3a4a0df1960d6bce08edfb637737ac5c3f3ba29022e25/soupsieve-2.3.2.post1-py3-none-any.whl (37 kB)
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.11.1 soupsieve-2.3.2.post1

~/Python-Tests$ pip install django  
Looking in indexes: https://package-proxy.replit.com/pypi/simple/
Collecting django
  Downloading https://package-proxy.replit.com/pypi/packages/9b/41/e1e7d6ecc3bc76681dfdc6b373566822bc2aab96fa3eceaaed70accc28b6/Django-4.1-py3-none-any.whl (8.1 MB)
Collecting asgiref<4,>=3.5.2
  Using cached https://package-proxy.replit.com/pypi/packages/af/6d/ea3a5c3027c3f14b0321cd4f7e594c776ebe64e4b927432ca6917512a4f7/asgiref-3.5.2-py3-none-any.whl (22 kB)
Collecting sqlparse>=0.2.2
  Using cached https://package-proxy.replit.com/pypi/packages/05/40/d836d55fb3f467243ee839ab7b814822fda522cd395fa41e282684e71ee5/sqlparse-0.4.2-py3-none-any.whl (42 kB)
Collecting backports.zoneinfo
  Using cached https://package-proxy.replit.com/pypi/packages/1a/ab/3e941e3fcf1b7d3ab3d0233194d99d6a0ed6b24f8f956fc81e47edc8c079/backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl (74 kB)
Installing collected packages: sqlparse, backports.zoneinfo, asgiref, django
Successfully installed asgiref-3.5.2 backports.zoneinfo-0.2.1 django-4.1 sqlparse-0.4.2

也可以安裝量化投資套件 twstock : 

~/test$ pip install twstock  
Looking in indexes: https://package-proxy.replit.com/pypi/simple/
Collecting twstock
  Using cached https://package-proxy.replit.com/pypi/packages/38/a0/61e6b65093a7564cb8e34aea54de28113bfe24409fb05e173360fbf5a35d/twstock-1.3.1-py3-none-any.whl (1.9 MB)
Requirement already satisfied: requests in ./venv/lib/python3.8/site-packages (from twstock) (2.28.0)
Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.8/site-packages (from requests->twstock) (2022.6.15)
Requirement already satisfied: charset-normalizer~=2.0.0 in ./venv/lib/python3.8/site-packages (from requests->twstock) (2.0.12)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./venv/lib/python3.8/site-packages (from requests->twstock) (1.26.9)
Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.8/site-packages (from requests->twstock) (3.3)
WARNING: pip is using a content-addressable pool to install files from. This experimental feature is enabled through --use-feature=content-addressable-pool and it is not ready for production.
Installing collected packages: twstock
Successfully installed twstock-1.3.1

哇, 真的不錯用ㄟ. 

如果是用 Matplotlib 或 Seaborn 繪圖, 它還會在右邊框新增一個 Output 視窗來顯示繪圖結果, 例如在編輯區輸入如下繪製圓餅圖的程式碼 : 

import numpy as np
import matplotlib.pyplot as plt
data=[600, 200, 100, 50, 50] #資產配置 (百萬元)
labels=['Stock', 'Bond', 'Cash', 'Gold', 'Real estate'] #資產標籤
colors=['#1f77b4', 'yellow', 'green', 'red', 'cyan'] #資產顏色
plt.pie(data, labels=labels, 
           autopct=lambda p:f'{p:.0f}% ({p*sum(data)/100 :.0f})', #匿名]函數
           colors=colors) #繪製圓餅圖
plt.title('Asset Allocation') #設定圖形標題
plt.show()



結果如下 : 




Replit.com 預設是免費帳戶, 使用者擁有 0.2~0.5 單位的虛擬 CPU 算力, 500MB 儲存空間, 與無限個 Repl : 




500MB 用來儲存 Python 程式檔算是夠用了, 也可以在 Replit 上架設 HTML + CSS + Javascript 靜態網站, 只要建立一個與帳戶名稱相同的 Repl, 則可得到一個簡短的 replit.com 網址, 格式如下 : 

https://USERNAME.repl.co 

也可以在非帳戶名稱的 Repl 下架設靜態網站, 其網址格式為 :

https://REPL-NAME--USERNAME.repl.co  
http://REPL-NAME.USERNAME.repl.co  

參考 :


沒有留言:

張貼留言