python| 2021款 m1pro mbp python開發配置

m1&m1pro 如何吊打老款 Intel mbp 就不多提了(發佈會不點名, 以友商代稱, 但是官網直接放具體型號, 這操作真6)

簡單列一下2個重要的使用感受(2021 16寸 標配):

  • 不燙手, 沒有風扇怒吼
  • 幾乎沒遇到卡頓, 使用 utools 等工具切換應用可用「絲般順滑」來形容

16寸標配與14寸標配3個重要區別:

  • 芯片SoC: m1pro 10核 vs m1pro 8核, 性能略降低(官方 m1pro 數據都是基於 m1pro 10核, b站up主測試 8核 性能約低 15%)
  • 充電: 140w vs 90w
  • 總量: 多 1kg

由於 m1pro 採取 ARM 架構(ISA, 指令集架構, 詳見上一篇blog: 極客時間-計組學習筆記一), 需要安裝 ARM版/M1版 軟件才能運行

查看 python官網 可知, ARM版python最低版本爲 3.8:

  • Python 3.8.10 - May 3, 2021
    • Download macOS 64-bit Intel installer
    • Download macOS 64-bit universal2 installer > Intel/M1 兼容版本

由於項目使用了 python3.6 版本, 根據 開發環境/測試環境應儘量和線上環境保持一致, 所以分別嘗試了 python3.8/python3.6 進行開發環境配置驗證

python3.8: 本地

本地進行 python 開發, 操作so easy:

  • brew/pyenv 安裝好 python 版本
  • pycharm: Python interpreter > virtual env > 選擇 python3.6(線上環境使用版本)/Python3.8(arm 芯片最低支持版本)
  • pycharm 中安裝 pip package, 或者直接 console 中執行
# 進入項目根目錄
cd /app
# 安裝項目依賴包
venv/bin/pip install -r requirements.txt

# 遇到 mysql 報錯
brew install mysql-connector-python

由於 requirements.txt 是 python3.6 下的, 部分包需要升級才能適配 python3.8

  • 執行 venv/bin/pip install -r requirements.txt > t.log, 查看 log 可知 Pillow, pandas, numpy, grpcio 幾個包安裝失敗
  • 直接執行 pip install Pillow pandas numpy grpcio, 可獲取 python3.8 下所需的版本
  • 修改 requirements.txt 中對應軟件的版本, 再次執行 ``venv/bin/pip install -r requirements.txt`

Pillow官網 可知: 升級 Pillow 到 8.4.0 版本後, 能支持 python3.6-python3.10

其他幾個(pandas, numpy, grpcio)沒有在官網找到對應的 python版本 兼容信息, 依靠測試來驗證

最後在 python3.6 的老開發機, 基於更新後的 requirements.txt 文件安裝依賴, 只有 pandas 庫不支持

python3.6: docker

python3.6 沒有支持 ARM版, 所以 m1pro mbp 本地跑 python3.6 這條路走不通, 需要使用 docker.

docker hub 上搜索, 有支持 arm64/v8 的鏡像版本

採用構建開發環境鏡像的老套路: 先在容器中run, 然後寫 Dockerfile, 最後基於構建的新鏡像驗證

  • 根據基礎鏡像啓動容器並掛載項目
docker run -ti --rm -v (pwd):/app python:3.6-buster bash
  • 在容器中配置&驗證開發環境, 記下的配置過程(查看 history 然後 copy)
# 配置加速源, 上海使用交大源超快, 基本可以跑滿帶寬
sed -i "s|http://deb.debian.org/debian|https://mirror.sjtu.edu.cn/debian|g" /etc/apt/sources.list
apt update

# 繼續交大源
pip config set global.index-url https://mirrors.sjtug.sjtu.edu.cn/pypi/web/simple
pip install --upgrade pip
pip install cython numpy
pip install -r requirements.txt
# 根據報錯與pillow官網信息, 添加相應依賴
apt install -y zlib libjpeg

# 啓動項目驗證
cd /app
python manage.py runserver 8000
# 根據報錯添加相應依賴
apt install net-tools # ifconfig
  • OK後, 照抄一遍寫入 Dockerfile 驗證:
FROM python:3.6-slim-buster

RUN sed -i "s|http://deb.debian.org/debian|https://mirror.sjtu.edu.cn/debian|g" /etc/apt/sources.list && \
apt update && \
apt install -y zlib libjpeg net-tools && \
pip config set global.index-url https://mirrors.sjtug.sjtu.edu.cn/pypi/web/simple && \
pip install --upgrade pip && \
pip install cython numpy && \
pip install -r requirements.txt
  • 生成鏡像: docker build . -t dayday:m1py36
  • 使用新鏡像驗證項目: docker run -ti -d -p 8000:8000 -v (pwd):/app dayday:m1py36 python /app/manage.py runserver 8000

當然, 也可以將啓動命令使用 ENTRYPOINT 指令添加到 Dcokerfile 中, 也可以使用 docker-compose.yml 來簡化, 這些 so easy, 就不展開了

寫在最後

ARM 在桌面的平臺的優勢越來越明顯了, 尤其是筆記本越來越成爲開發主力. m1 作爲先行者, 開了一個很好的頭, 希望 RISC-V 也能帶來更多驚喜

關於 docker 官網 python 鏡像的版本, 稍微多說兩句: 以 python:3.6-slim-buster 爲例

  • 3.6 是 python 的版本, 當然還有更具體的版本, 比如 3.6.15, 3.6 都是指向最新版 3.6.x
  • buster 是使用的 debian9 作爲基礎鏡像, 可以通過 https://wiki.debian.org/DebianReleases 查詢: 13.trixie 12.bookworm 11.bullseye 10.buster 9.stretch 8.jessie
  • slim 是精簡版的 debian 鏡像, 鏡像體積大大降低, 適合生產使用, 開發推薦非 slim 版, slim 版缺少部分依賴
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章