National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 04

Linux 與 Python 開發環境

終端機、套件安裝、虛擬環境與執行 Python 程式
Interaction導覽 25 minute(s)

Learning Objectives

  • 在樹莓派的終端機裡建立資料夾、查看檔案、用 python3 執行程式並用 Ctrl+C 中斷
  • 用 apt 更新系統與安裝 python3-xxx 套件
  • 說明為什麼直接 pip install 會出現 externally-managed-environment,並改用虛擬環境
  • 建立看得到系統套件的虛擬環境(--system-site-packages),在裡面安裝套件、執行程式

在樹莓派上寫程式的工作環境

上一課從筆電 SSH 進了樹莓派。之後每一課的程式都在這個終端機裡建立、執行、除錯, 所以這一課先把工作環境準備好:會管理檔案、會安裝軟體、知道 Python 套件該怎麼裝。

Raspberry Pi OS 以 Debian 為基礎,和 Ubuntu 同屬 Debian 家族,終端機指令幾乎完全相同。 本平台的「Linux(Ubuntu)」軌有完整的指令教學,這一課只挑寫程式最常用的部分。

這一課要回答:

  1. 怎麼在終端機裡建立資料夾、寫程式、執行程式?
  2. 系統的軟體用 apt 安裝,Python 的套件用 pip 安裝,兩者有什麼不同?
  3. 為什麼在樹莓派上直接 pip install 會被拒絕?虛擬環境是什麼?

操作:終端機、檔案與執行程式

以下的帳號 student、主機名稱 mypi 是範例。提示字元 student@mypi:~ $ 的 ~ 代表目前在家目錄(/home/student)。

  1. 1

    看看自己在哪裡

    pwd 印出目前的目錄,ls 列出裡面的檔案與資料夾。剛裝好的系統,家目錄裡幾乎是空的。

  2. 2

    建立專題資料夾

    mkdir -p 建立資料夾(-p 會順便建立中間的資料夾,已經存在也不會出錯),cd 進去。每個專題放在自己的資料夾,之後比較好管理。

  3. 3

    用 nano 寫程式

    nano hello.py 打開終端機裡的文字編輯器。輸入程式後按 Ctrl+O、Enter 存檔,Ctrl+X 離開。cat 可以印出檔案內容確認。

    也可以在筆電上用支援 SSH 遠端的編輯器(例如 VS Code 的 Remote - SSH 擴充功能)直接編輯樹莓派上的檔案。

  4. 4

    執行程式

    用 python3 檔名.py 執行。Raspberry Pi OS 內建 Python 3,指令名稱是 python3(撰寫時的版本是 Python 3.13)。

  5. 5

    用 Ctrl+C 中斷永遠不結束的程式

    控制硬體的程式常常是 while True 迴圈或停在 pause(),不會自己結束。按 Ctrl+C 送出中斷,Python 會丟出 KeyboardInterrupt 並停止,回到提示字元。

這段導覽完成了

兩種套件:apt 與 pip

樹莓派上安裝軟體有兩個管道,要分清楚:

apt pip
管理什麼 整個系統的軟體,包括很多 Python 套件(名稱是 python3-xxx) Python 套件(來自 PyPI)
誰維護 Raspberry Pi OS/Debian 套件作者
需要 sudo 是,安裝到系統 在虛擬環境裡不需要
例子 sudo apt install python3-gpiozero pip install paho-mqtt

更新系統:先 sudo apt update 下載最新的套件清單,再 sudo apt full-upgrade 升級。官方文件建議用 full-upgrade, 因為 Raspberry Pi OS 的套件相依關係變動得比 Debian 頻繁。gpiozero 在 Raspberry Pi OS 已經內建,不用另外安裝。

為什麼不能直接 pip install:從 Raspberry Pi OS Bookworm 起,在系統的 Python 直接 pip install 會出現 externally-managed-environment 錯誤。 原因是系統本身的工具也用 Python,用 pip 改掉系統裡的套件版本,可能讓 apt 管理的程式壞掉。官方的做法有兩個:

  1. 套件有 python3-xxx 版本時,用 sudo apt install python3-xxx 安裝到系統。
  2. 否則建立虛擬環境(virtual environment),在裡面用 pip 安裝。

虛擬環境是一個資料夾,裡面有自己的 Python 與套件,和系統的套件分開;不同專題可以用不同版本的套件,裝壞了刪掉資料夾重來就好。

python3 -m venv --system-site-packages ~/env    建立虛擬環境 env(看得到 gpiozero 等系統套件)
source ~/env/bin/activate                       啟用:提示字元前面出現 (env)
pip install 套件名稱                            安裝到這個虛擬環境
deactivate                                      離開虛擬環境

樹莓派上建議加 --system-site-packages:gpiozero 等硬體相關套件是用 apt 裝在系統裡的,加了這個選項,虛擬環境才看得到它們。

操作:更新系統、建立虛擬環境、安裝套件

輸出經過簡化,版本號依安裝當時而定。下一個區塊的模擬器可以自己把這些步驟做一遍。

  1. 1

    更新系統

    剛裝好系統、或很久沒用時先更新。full-upgrade 會列出要升級的套件並詢問是否繼續,輸入 Y。

  2. 2

    直接 pip install 會被拒絕

    錯誤訊息本身就說明了兩個解法:用 apt 安裝 python3-xyz,或建立虛擬環境。

  3. 3

    建立並啟用虛擬環境

    在家目錄建立名為 env 的虛擬環境,啟用後提示字元前面會出現 (env),這時的 python、pip 都是虛擬環境裡的。

  4. 4

    在虛擬環境裡安裝套件

    paho-mqtt 是第 16 課會用到的 MQTT 套件。裝在虛擬環境裡,不影響系統。

  5. 5

    離開與下次再用

    deactivate 離開虛擬環境。之後每次登入要執行用到這些套件的程式,先 source ~/env/bin/activate 再執行。

這段導覽完成了

互動練習:樹莓派的終端機

這是模擬的樹莓派終端機(已經 SSH 登入)。照任務一步一步做,看每個指令的輸出。 projects 資料夾裡的 hello.py 會用到 gpiozero(系統套件)與 paho-mqtt(要自己裝),可以先 cat hello.py 看內容。 想看看沒加 --system-site-packages 會怎樣,可以另外建一個虛擬環境試試。

在樹莓派上執行第一支硬體程式

環境準備好之後,寫硬體程式的流程就是:

  1. 在專題資料夾裡用編輯器寫 .py 檔
  2. 需要額外套件時,啟用虛擬環境(或用 apt 安裝 python3-xxx)
  3. python3 檔名.py 執行;永遠不結束的程式用 Ctrl+C 停止

下面的範例不用接任何零件:gpiozero 的 CPUTemperature 從作業系統讀取 CPU 溫度。真的樹莓派上也可以用 vcgencmd measure_temp 指令看溫度。 模擬器裡的溫度是示意值,會慢慢升高。

逐步看:每秒讀一次 CPU 溫度

注意 f-string 的 {t:.1f}:把溫度格式化成小數一位。每次 sleep(1) 讓時間前進 1 秒,溫度也跟著變;第 4 次超過 50°C,狀態變成「偏高」。

小測驗:終端機與套件

1.

在 Raspberry Pi OS 的系統 Python 直接執行 pip install requests,會出現什麼?

2.

要更新樹莓派上所有系統軟體,官方建議的指令順序是?

3.

執行一個 while True 迴圈的程式,要怎麼讓它停下來回到提示字元?

第 1 次作答

小測驗:虛擬環境與程式

1.

用 python3 -m venv ~/plain(沒有 --system-site-packages)建立並啟用虛擬環境後,執行 from gpiozero import LED 會怎樣?

2.

下面的程式會印出什麼?

t = 49.96
LIMIT = 50.0
status = "偏高" if t > LIMIT else "正常"
print(f"{t:.1f} °C,{status}")
第 1 次作答

重點整理

  • 終端機常用:pwd、ls、mkdir -p、cd、cat、nano(Ctrl+O 存檔、Ctrl+X 離開);python3 檔名.py 執行,Ctrl+C 中斷。
  • 系統軟體用 apt:sudo apt update 再 sudo apt full-upgrade;Python 套件有 python3-xxx 時可以用 apt 安裝。
  • 系統的 Python 直接 pip install 會出現 externally-managed-environment;改用虛擬環境。
  • python3 -m venv --system-site-packages ~/env 建立、source ~/env/bin/activate 啟用、deactivate 離開;加了 --system-site-packages 才看得到 gpiozero 等系統套件。

下一課接上 LED,用 gpiozero 控制第一個零件。

這一課完成了!
Next lesson:點亮 LED:gpiozero 入門
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。