環境安裝

哈囉,世界!
如果有人問你,什麼是程式語言,你會怎麼回答?
也許正在閱讀本書的讀者們曾經寫過別的程式語言,但我不確定你是否想過這種超級小白的新手問題,而且還得用白話文跟完全沒寫過程式的人解釋寫程式到底是在寫什麼?
電腦程式本質上是一堆 0 跟 1 的組合,透過這些 0 跟 1 的數字或訊號可以指揮電腦做一些我們想要它完成的工作,例如數學的四則運算,或是計算圓周率到底有幾位數。不過一般人應該看不太懂這些 0 跟 1 所代表的意思,所以便有人設計出一些普通人比較容易理解像是 if...else... 這種比較接近人類語言的電腦指令。這些指令最終還是會被轉換成電腦看的懂的 0 與 1,而 if...else... 這種比較容易懂的指令就稱之程式語言的語法。目前全世界的程式語言有非常多種,各有各自的用途,不同的程式語言就只是使用不同的語法在叫電腦做事而已,而 本書要介紹的程式語言 Python 也是其中一種,還是目前全世界數一數二受歡迎的那種...不對,不是數一數二,就是最受歡迎的那種。
是說,大家有沒有想過為什麼程式語言有這麼多種?為什麼大家不要統一一下,都寫同一種就好了?每種程式語言都有它的用途或想要解決的問題,就像為什麼有了一般的轎車,還要另外設計跑車、貨車、休旅車或四輪驅動的越野車,就算同樣都是休旅車,不同廠商設計的休旅車也都有功能上或效能上的差異。程式語言也是類似的概念。
「寫程式」的過程,就是使用某些工具(通常是文字編輯軟體),把這些指令存成檔案。這些檔案就像電影的劇本,舞台上的演員們就是照著劇本的指示演戲,電腦也是根據你寫的這些指令來完成你想要做的工作。
因為簡單、易學且功能強大以及整個大環境的帶動,不論是初學者或是專業工程師都可以使用它來完成各種工作。Python 是目前全世界最熱門的程式語言,雖然不少人可能是近幾年才聽過這個程式語言,會以為這個程式語言很新,事實上 Python 這個程式語言自 1991 年上市到現在已經超過 30 年了。Python 這個名字是來自於一個英國表演團體《Monty Python》,當年 Python 的發明者特別喜歡這個團體演出的電視影集《Monty Python's Flying Circus》,所以就把程式語言取名叫 Python。所以雖然 Python 字面上是蟒蛇的意思,但這個程式語言跟蛇或其他爬蟲類沒什麼關係。
既然本書是要教大家怎麼撰寫 Python,第一步就是先把 Python 給安裝起來!
安裝 Python
安裝 Python 的困難度不高,基本上就是到 Python 的官方網站下載安裝程式並照著指示做就行了,目前主流的作業系統,例如 Windows、macOS 以及 Linux 都有相對應的版本。是說,如果各位使用的是 macOS 跟 Linux 作業系統,可能會發現原本電腦裡就已經直接內建 Python 了,這樣還需要另外安裝嗎?作業系統內建安裝的 Python 通常會比現行版本稍微舊一點,如果單純就以體驗或寫一些簡單的程式的話是夠用的。作業系統之所以會內建安裝 Python 是有原因的,因為有些系統程式本身就是用 Python 開發的。Python 的版本從早期的 2.x 版到現在的 3.x 版,除了正宗的 CPython 之外,還有其他分支的實作品版本(像是 Jython、IronPython、PyPy 等),如果不想把自己的電腦環境弄的亂七八糟,或是因為專案需要常常安裝不同版本的 Python,通常我會建議另外使用版本管理工具來建構隔離的開發環境,這裡我將使用 pyenv 做為範例。
因為 Python 這個程式本身主要是用 C 語言所設計出來的,所以如果沒有特別聲明的話,平常大家在講的 Python 通常指的就是 CPython。
這裡需要再特別 強調一次,pyenv 本身並不是 Python,所以安裝 pyenv 不等於安裝 Python。你可以把 pyenv 想像成一個工具箱,在這個工具箱裡會可以放很多種工具,但這個工具箱裡如果沒有任何工具它就只是個空的盒子而已。pyenv 不只是個工具箱,還是有分隔板的工具箱,不同版本的 Python 會被安裝在不同的隔板裡,安裝套件的時候也會安裝在各自的隔板裡不會互相干擾,透過 pyenv 就能做到簡單的切換 Python 的環境及版本。
再次提醒,如果你的作業系統(例如 macOS)原本就有預先安裝 Python 的話,即使透過 pyenv 安裝了其他版本的 Python,原本系統內建的 Python 也建議不要移除,它存在作業系統裡一定有原因的,你不會知道系統裡有哪些程式正在使用它。
安裝 pyenv
安裝 pyenv 的方式滿簡單的,只要到 GitHub 的說明頁面,照著指示複製貼上應該一下子就能安裝完成。如果是 Windows 作業系統則是另外安裝 pyenv-win:
- pyenv https://github.com/pyenv/pyenv
- pyenv-win https://github.com/pyenv-win/pyenv-win
pyenv 使用簡介
安裝 pyenv 之後,我們來看幾個常用的操作。首先,可以透過 -v 或 --version 選項得知目前 pyenv 的版本:
$ pyenv -v
pyenv 2.4.16
各位的版本不一定會跟我一樣,但只要版本號沒有差太多,功能上應該不會差太多。再提醒一次,這個並不是 Python 的版本喔,這只是 pyenv 這個工具箱本身的版本。如果想要知道目前 pyenv 這個工具箱裡有安裝了哪些工具,可以這樣做:
$ pyenv versions
* system (set by /Users/kaochenlong/.pyenv/version)
大家執行的結果可能會跟我的不一樣,上面的結果顯示目前我的 pyenv 工具箱裡只有系統內建(就是那個 system 字樣)的 Python 而已。如果想要知道現在 pyenv 有支援哪些種類的 Python,可以這樣做:
$ pyenv install --list
Available versions:
2.1.3
2.2.3
...略...
3.12.4
3.12.5
3.12.6
3.12.7
...略...
stackless-3.7.5
這個指令會顯示一個很長的列表,上面有各式各樣的 Python,而且各種版本都有。前面沒有別的名字只有數字的,例如 2.1.3 或是 3.12.7,這指的就是正宗版的 Python,也就是 CPython。在本書撰寫的當下,現行的 CPython 版本最新的是 3.12.7。
之前要安裝 Python,可能是得先到官網下載安裝檔,現在我們有 pyenv 這個工具箱了,我們可以直接請它幫我們搞定安裝 Python 的事,只要一行指令就能搞定:
$ pyenv install 3.12.7
這裡的 3.12.7 就是在上個指令所顯示的版本列表。順利的話,等個幾分鐘應該就裝起來了。安裝完成之後再看一次版本:
$ pyenv versions
* system (set by /Users/kaochenlong/.pyenv/version)
3.12.7
這樣就多了一個 3.12.7 版本。前面的 * 符號表示現在正在使用哪個版本,如果要切換到剛剛安裝的 3.12.7 的話:
$ pyenv shell 3.12.7
再看一次版本:
$ pyenv versions
system
* 3.12.7 (set by /Users/kaochenlong/.pyenv/version)
這樣 * 符號就移到 3.12.7 了。雖然目前看起來沒問題,不過如果你把終端機關掉再重新開啟之後,pyenv 會忘記你剛剛設定的 Python 版本,可能又跳回原本系統內建的版本了。為了避免每次都得這樣手動切換,我通常會這樣做:
$ pyenv global 3.12.7
這樣等於把系統預設的 Python 版本設定為 3.12.7。這樣之後在終端機輸入 python 或是待會會介紹到的套件安裝工具 pip 的時候,就會找到這個透過 pyenv 安裝的版本,而不是原本系統內建安裝的那個版本了。
開發工具
要開始寫 Python 程式,其實只要有一個文字編輯器就行了。
目前業界有不少功能很厲害的「整合開發工具(Integrated Development Environment, IDE)」,通常 IDE 有很多便利的功能,像是偵錯、程式碼自動完成、版本控制等等。在業界比較知名也比較多人使用的應該就是 PyCharm 了。不少 IDE 都是由商業公司進行開發,所以通常是收費軟體,但 PyCharm 有提供免費的 Community 版本,如果有學生身份到網站上申請還能免費使用全套 IDE,真的是太佛心了。
本書會把重點放在 Python 這個程式語言而不是在的開發工具上,只要學會 Python 之後,不管是 IDE 或是文字編輯軟體都可以用來撰寫 Python 程式。以新手上路來說,我會推薦大家使用 Visual Studio Code(通常簡稱 VS Code)這款文字編輯器。VS Code 不只免費,本身的功能也很完整,再搭配幾款 Python 專屬的擴充套件,用來寫 Python 的體驗還滿好的。安裝 VS Code 的方式很簡單,也是只要到它的官方網站下載合適的版本並安裝就行了。
- Visual Studio Code https://code.visualstudio.com/
- PyCharm https://www.jetbrains.com/pycharm/
線上開發工具?
在現在雲端服務這麼發達的現代,如果不想在自己電腦上安裝開發工具的話有辦法寫 Python 嗎?當然可以,像 Google Colab 之類的線上工具,或是在自己電腦安裝個 Jupyter Notebook 都是個不錯的選擇。如果只是想要寫些簡單的 Python 程式練練手感,或是想要跟別人分享程式碼的話,這些線上工具的確是很好的選擇。
但如果將來真的想拿 Python 當作主要的開發語言,這些線上開發工具通常會有一些限制,例如不一定能安裝自己想要的套件或是存取檔案等功能。所以如果是想要真的學好 Python 而且想用它做點東西出來的話,還是建議在自己的電腦上安裝開發工具來使用。
VS Code 擴充套件
VS Code 有非常多的擴充套件,不過如果就以寫 Python 程式來說,大概安裝 Python 跟 Pylance 這兩款擴充套件就夠用了(事實上現在只要安裝 Python 擴充套件就會自動跟著安裝 Pylance 了),只要在 VS Code 的市集上搜尋一下擴充套件的關鍵字就能找到,都是免費而且有超過千萬人次下載的套件。這些擴充套件主要是讓各位在撰寫 Python 程式碼的時候可以有比較漂亮的顏色,同時也有程式碼提示,甚至可以做到程式語法的分析,提早讓我們發現不小心寫錯的地方。
除了上面這兩擴充個套件外,為了有時候我會因為不想自己手動調整程式碼的排版或程式碼風格(Coding Style),我還會另外安裝 Black Formatter,它可以在我存檔的時候自動幫我處理格式的問題。
- Python: https://5xcamp.us/dP3msA
- Pylance: https://5xcamp.us/uhfXzZ
- Black Formatter: https://5xcamp.us/6wdWoa
安裝完這些套件,就可以開始動手寫程式了!
你的第一行程式 Hello Python
Python 以及相關的開發工具安裝完成之後,接下來就是要開始動手寫程式了。大部份的程式語言課程的第一個範例都是要大家在畫面上印出 Hello World 字樣,所以我們也不免俗的來打聲招呼。如果在 macOS 或 Linux,請打開「終端機視窗」,在 Windows 環境則是開啟「命令提示字元」或 PowerShell,然後直接輸入以下內容:
$ python -c "print('Hello Python')"
如果這是你第一次在這樣的視窗介面下敲打指令輸入的話,再次提醒一下前面的 $ 符號請不要跟著輸入,這個 $ 符號只是我用來表示這一行是個指令而已,如果跟著輸入 $ 符號反而會出現 錯誤訊息。輸入完成並按下 Enter 鍵之後,如果沒有打錯字的話,應該就會在畫面上看到 Hello Python 字樣。恭喜你,你已經可以跟別人吹噓你寫過電腦程式了!
所以,剛剛這行到底做了什麼事?簡單的說,就是我們請 python 這個程式,更專業的說法叫「直譯器(Interpreter)」幫我解讀並執行 print('Hello Python') 這行語法,print() 是一個 Python 內建的函數,這個函數可以在畫面上印出 Hello Python 這幾個字。
雖然這樣直接一行就能執行程式挺簡單的,但大部份的專案都不會像這樣只有一行而已,所以通常我們會把要執行的程式碼另外存成檔案,然後再請 python 來執行它。接著請用你習慣的方式新增一個檔案,檔名要叫什麼都沒關係,但附檔名通常會用 .py 結尾,所以這裡我就先建立一個名為 hello.py 的檔案並且存放在你找的到的地方(例如放在桌面上的 demo 目錄裡)。接著就用 VS Code 來編輯這個檔案,檔案內容如下:
print("Hello World")
print("哈囉世界")
print("Hello Python")
沒意外的話,你應該會在 VS Code 裡看到某些程式碼會有不同的顏色,這是 VS Code 功能之一。這種程式碼高亮(Syntax Highlight)可以讓我們在寫的時候更清楚有沒有不小心打錯字。這次我寫了三行,如果你想多寫幾行也可以,寫好並存檔之後,接著就要執行它了。但首先,你必須先用 cd 這個終端機指令切換到剛剛你存放 hello.py 這個檔案的所在目錄(例如桌面上的 demo 目錄),以我的電腦來說:
$ cd ~/Desktop/demo
這個指令表示會把目前的所在位置切換到我的個人帳號的桌面的 demo 目錄,各位則是看看那個檔案在什麼地方,就 cd 切換到那個目錄下。接著就來執行它:
$ python hello.py
程式碼沒寫錯而且指令也沒有輸入錯誤的話,應該就會在畫面上出現上面你想印出來的文字了。如果出現錯誤訊息也不用擔心,仔細看看錯誤訊息的提示,看看是沒有安裝 python 程式,還是沒有先 cd 到對的地方所以找不到 hello.py 檔案。
註解(Comment)
當你把寫好的程式交給 python 程式執行的時候,它會逐行解讀並執行你所撰寫的程式碼,不過有個特別的語法例外:
# 這是一個計算火箭發射高度的程式
def launch_height(v0, t):
g = 9.8 # 重力加速度
return v0 * t - 0.5 * g * t**2
大家暫時先不用管上面這段感覺很高科技的程式碼是什麼用途,但你看到的 # 符號,在 Python 稱之「註解(Comment)」。正如其名,註解主要的用途是用來說明某段程式碼是在做什麼事,好讓你的同事或是將來的自己可以看的懂這段程式碼是在寫什麼。
因為註解只是說明,不是程式碼本身,所以在執行的時候會被 Python 忽略,所以有時候也會看到工程師們在開發的過程中會用註解暫時把某幾行程式碼「關掉」,像這樣:
print("hello")
# print("這行不會被執行")
print("world")
因為第 2 行加上了 # 符號,所以不會被執行。也許你會好奇,如果不想它執行刪掉它不就好了?是可以啦,但有時候我們只是想暫時先把某段程式碼先關掉,這時候註解就挺好用的。
是說,是不是每一行程式碼都要寫註解嗎?這倒也不必,照理說你在撰寫程式碼的時候最好可以讓程式碼一看就知道是什麼用途,如果真的認為程式碼有點複雜或難懂再寫註解即可。只是,回頭想想,為什麼你要寫出不容易被看懂的程式碼呢?
附檔名 .py 是什麼意思?
.py 的意思其實滿好猜的,就是 Python 的縮寫,但很多工程師可能也不知道的是,附檔名不一定要是 .py 也行。例如你可以把剛剛那個 hello.py 檔案另存成 hello.php 或 hello.js,同樣還是可以執行的喔:
$ python hello.js
咦?為什麼 Python 可以執行 JavaScript 或其他程式語言的程式?不是這樣的,上面這個指令是把 hello.js 這個檔案的「內容」讀進來,然後請 python 來執行它,所以檔案叫什麼名字、什麼附檔名根本一點都不重要,你要把它改成 hello.jpg 也可以,你開心就好。重點是這個檔案的本質是文字型態的檔案,別被檔案的附檔名給騙了,附檔名只是讓你的作業系統知道當你用滑鼠點兩下之後應該用什麼程式來開啟它而已。
講是這樣講,我們通常不會這樣拿石頭砸自己的腳,把檔案存成 .py 附檔名除了可以享受開發工具提供給的程式碼高亮顏色以及程式碼提示等功能,而且後續在引入模組的時候也比較不會出問題。
REPL
除了使用 python -c 執行單行程式以及另外存成 .py 檔案再執行之外,直接輸入 python 指令會進到一個特別的環境裡,你會在每一行的前面看到 >>> 符號。在這裡可以直接輸入程式碼,還能馬上看到執行的結果:
$ python
Python 3.12.7 (main, Oct 17 2024, 20:07:59) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
這個環境我們稱它為 REPL,這是「Read-Eval-Print Loop」的縮寫。在這個環境下 Python 會「讀取(Read)」我們輸入的指令或程式碼,然後「評估(Eval)」看看是否可執行。如果可以執行就會把執行的結果「印(Print)」出來,萬一不能執行就會出現錯誤訊息。最後,不管能不能執行,都會進入等待下一個指令的「迴圈(Loop)」。REPL 並不是 Python 發明的,很多程式語言都有提供 REPL 的設計,在本書如果比較簡單的程式碼範例,你可能會看到我直接會在 REPL 裡做示範。REPL 可以讓我們很快的寫一些簡單的程式或是試試看某個函數的執行效果,這對新手學習者來說很 有幫助。我們可以在 REPL 環境下試著輸入一些簡單的程式碼:
>>> a = 123
>>> print(a)
123
>>> 1 + 2
3
在這裡除了主動的執行 print() 函數把東西印出來之外,直接輸入 1 + 2 並按下 Enter 之後也會印出 3。為什麼不用 print() 也能印?因為 REPL 會幫你把執行的結果給「印(Print)」出來。如果不是在 REPL 的環境下,想把東西印出來還是得手動自己寫 print() 函數的。再提醒一下,前面的 >>> 標記是表示目前正處在 REPL 的環境下,而不是一般的終端機或命令提示字元,所以不用跟著敲打這幾個符號。如果要離開 REPL 環境,輸入 exit() 後按下 Enter 鍵或是按 Ctrl + D 組合鍵就可以離開。
另外,如果你有個 Python 的程式檔叫做 hello.py,內容如下:
def buy_book(title):
print(f"買了一本書:{title}")
先不用太在意這些程式碼是在做什麼,基本上就是定義了一個簡單的函數而已。剛剛有提到我們可以請 Python 幫我們執行寫好的 .py 檔案,如果你想要讓程式碼的內容在 REPL 環境下也能載入並使用的話,可以這樣做:
$ python -i hello.py
在執行的時候多加一個 -i 的設定就可以執行這個檔案並且直接進入 REPL 環境,而且在 REPL 環境下也可以使用剛剛定義好的 buy_book() 函數:
>>> buy_book("為你自己學 Python")
買了一本書:為你自己學 Python
Python 之禪
好啦,最麻煩的環境安裝跟開發工具差不多這樣就搞定了,在正式進入 Python 的程式語法介紹之前,我想請大家再次進到 REPL 環境,然後輸入 import this,按下 Enter 之後你會看到一篇有趣(?)的文章:
$ python
Python 3.12.7 (main, Oct 17 2024, 20:07:59) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
這是內建在 Python 裡的《Python 之禪》,作者是 Python 的核心成員之一 Tim Peters,主要內容是在講撰寫 Python 程式碼的一些指導原則。我引用維基百科上翻譯好的中文版本供大家參考:
優美優於醜陋,
明瞭優於隱晦;
簡單優於複雜,
複雜優於繁雜,
扁平優於嵌套,
稀疏優於稠密,
可讀性很重要!
特例亦不可違背原則,
即使實用比純粹更優。
錯誤絕不能悄悄忽略,
除非它明確需要如此。
面對不確定性,拒絕妄加猜測。
任何問題應有一種,且最好只有一種,顯而易見的解決方法。
儘管這方法一開始並非如此直觀,除非你是荷蘭人。
做優於不做,然而不假思索還不如不做。
很難解釋的,必然是壞方法。
很好解釋的,可能是好方法。
命名空間是個絕妙的主意,我們應好好利用它。
這意境可能有三、四層樓那麼高,目前畢竟還只是本書的第二章,如果你才剛剛新手上路的話,我猜一時之間可能還沒辦法領會。沒關係,等大家把本書看完或寫一陣子 Python 之後再回來看看這段文章,應該會有不同的感受。
既然都看到 import this 了,也順便跟大家介紹個不重要的彩蛋,在 Python 裡面有內建一個 antigravity 反重力模組,如果你像上面 import this 一樣的輸入 import antigravity 的話,放心,你不會因為失去重力而浮起來,而會看到瀏覽器自動打開並且連到某個網頁,裡面有一則漫畫。這是 Python 的開發者在 2008 年的愚人節放進來的彩蛋然後就留到現在,漫畫的內容是在講述 Python 是個簡單、容易學的程式語言。
Python 之禪 https://5xcamp.us/zen-of-python
安裝套件
雖然 Python 程式語言本身的功能已經算是很完整,本身也有自帶很多好 用的函式庫,不過有些時候我們還是會用到非官方的善心人士所撰寫的套件。在古老時代在 Python 要安裝套件其實有一點點麻煩,當時並沒有一個統一下載套件的地方,有時候得先到作者的網站去下載壓縮檔,解壓縮之後可能得把它放在某個目錄或是再執行指令進行編譯及安裝的工作,這對於初學者來說可能會有點困難。
時代在進步,技術也是,現在不用這麼辛苦了,Python 社群現在有一個叫做 PyPI(Python Package Index)的套件庫,裡面有很多實用跟不實用的 Python 套件,有興趣的話可以到 PyPI 的網站去翻看看,幾乎你想的到的套件都有人做。
PyPI https://pypi.org
不只有套件集散地可以檢索套件,連安裝套件的過程也跟著變得簡單很多。現在安裝 Python 的時候應該都會自帶一個叫做 pip 的工具程式,這是 Python 的套件管理工具,我們到終端機視窗輸入 pip list 指令看看目前在我們的電腦裡現在安裝了哪些 Python 的套件:
$ pip list
Package Version
------- -------
pip 24.2
如果你看到跟我一樣的畫面,表示你可能跟我一樣是剛安裝好的 Python 才會這麼乾淨只有一個 pip 套件,沒錯,pip 這個套件管理工具本身也是一個套件。接下來如果要安裝其他套件,只要在終端機輸入 pip install 後面再加上套件名稱就可以了。舉個例子,我們來安裝一個很受歡迎的套件 requests ,很多人會使用這個套件來抓取網路資料:
$ pip install requests
Collecting requests
Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting charset-normalizer<4,>=2 (from requests)
...略...
Successfully installed certifi-2024.2.2 charset-normalizer-3.3.2 idna-3.7 requests-2.32.3 urllib3-2.2.1
如果你沒打錯字,而且這也是你第一次安裝 requests 套件的話,你應該會看到跟我差不多的結果,這樣就算是安裝成功了,就不用像以前要先去下載檔案再執行安裝的指令了。但如果你曾經安裝過這個套件,那麼你可能會看到類似以下的訊息:
$ pip install requests
Requirement already satisfied: requests in /Users/.../python3.12/site-packages (2.32.3)
...略...
Requirement already satisfied: certifi>=2017.4.17 in /Users/.../site-packages (from requests) (2024.2.2)
這裡的「Requirement already satisfied」表示這個套件已經安裝過了,不需要再安裝一次。如果你想要卸載這個套件,把 install 指令改成 uninstall 就行了:
$ pip uninstall requests
Found existing installation: requests 2.32.3
Uninstalling requests-2.32.3:
...略...
Proceed (Y/n)? y
Successfully uninstalled requests-2.32.3
附帶一提,因為 pip 本身也是一個套件,但它的角色比較特別,要更新 pip 的版本的話,一樣是使用 pip install pip,但再加上 --upgrade 選項:
$ pip install --upgrade pip
關於安裝套件其實還有一些坑,待會我們會介紹「虛擬環境」再跟大家補充說明,但大家看到這裡,開發工具跟環境的介紹到這裡就算是告個段落了。如果你已經等不及要開始寫程式了,可以先跳過以下關於虛擬環境的介紹,直接進到下一章的 Python 語法介紹囉!