本機開發的實用工具

能在自己的電腦上開發 Python Exercism 程式碼的實用工具。


Note

這是我們社群中很受歡迎的一系列工具。 這份清單無意規定你該用什麼,也不求完整。 我們認為這些工具都能把工作做好,但當然還有其他同樣優秀的工具。 如果你有推薦的編輯器、IDE、工具或外掛,歡迎你在 GitHub 上把它加進這份文件。



在開始探索之前,請先確認你已安裝近期版本的 Python。 Exercism 網路平台目前支援Python 3.10 - 3.13.5(練習與測試)以及Python 3.13.5(工具)。 我們的線上測試執行器目前使用pytest 8.4.0和pytest-subtests 0.14.2。 我們的線上分析器使用pylint 4.0.4。 在本地使用不同版本的Python、pytest或pylint,得到的結果可能與網站不同。 如需更多資訊,請參閱在本地安裝 Python。


虛擬環境

Python 虛擬環境提供輕量的執行環境與套件隔離。 它們能把你安裝的 Python 套件集中放在特定的環境目錄裡,藉此幫你整理專案。 不同的環境可以各自保存不同版本的 Python 執行環境,以及專案或函式庫的相依套件。 這能避免因為升級某個專案的函式庫、卻「弄壞」另一個專案的相依套件,而造成的 bug 與不相容問題。

現今有許多虛擬環境與類虛擬環境工具在使用,也有越來越多人改用行內指令碼中繼資料、開發容器或 docker 來取代虛擬環境。 嘗試各種不同的策略、找出適合你開發風格與專案需求的作法,是很重要的。 別以為這裡的策略一體適用,也別以為它們是你唯一的選擇。 如果想更全面地了解這裡未涵蓋的工具,可以看看 Bas Nijholt 的這篇部落格文章,並保持好奇心。

這裡會介紹三種主要的虛擬環境工具:Python 標準函式庫的 venv、第三方工具 conda env(使用 conda 套件管理器,通常搭配 Anaconda Python 發行版),以及第三方工具、pip + venv 的替代品 uv。 這三種工具的使用和/或安裝都相當簡單。

此外,PyEnv、Poetry 和 virtualenvwrapper 也能協助你在同一台機器上管理多個 Python 版本與多個 Python 環境。


使用 venv 建立虛擬環境

若要使用venv建立虛擬環境,請先cd到你想要存放環境的目錄。 這個目錄應該與專案程式碼分開,而且你不會把它納入版本控制。 接著,執行venv指令,並帶上你想用來存放這個特定環境的資料夾名稱。 常見的慣例是把該資料夾命名為<project-name-here>_venv:

Windows

PS C:\Users\foobar> py -m venv {name_of_virtualenv}

若要啟用虛擬環境,請執行以下指令:

PS> .\{name_of_virtual_env}\Scripts\activate.bat
(venv) PS> _

Linux/MacOS

$ python3 -m venv {name_of_virtualenv}
created virtual environment ... in 8568ms

若要啟用虛擬環境,請執行以下指令:

$ source {name_of_virtual_env}/bin/activate
(venv) $ _

一旦啟用了venv,你就能在環境「裡面」執行pip指令來安裝套件。 安裝的套件會與該venv的 Python 版本關聯,並存放在{name_of_virtual_env}/Lib裡。

_停用_虛擬環境可以透過呼叫deactivate指令碼來完成,它與activate位於同一個目錄。


使用 conda 建立虛擬環境

最新版的conda可以透過 miniconda 安裝。 這份conda速查表非常實用,conda文件也一樣。

conda最初是為了熱門的「科學 Python」Anaconda distribution 而建立的 Python 套件管理器,後來被通用化並擴充。 Conda 環境與venv類似,關鍵差異在於 conda 除了 Python 之外,還能為許多其他程式語言建立虛擬環境並安裝套件。

Conda 支援的語言包括R、JavaScript、Ruby、Fortran、C/C++、Scala、Java 等。 想比較 conda 與 venv 的指令,請參閱 conda 的指令參考。


MacOS/Linux

若要建立conda環境,請輸入以下內容,並把{name of environment}替換成你選擇的名稱、把python={version}替換成你想要的 Python 版本。 後面可以接著列出你希望安裝到該環境裡的任何其他套件:

$ conda create --name {name of environment} python={version} "pytest>6.0" pylint
...

## Package Plan ##

  environment location: /usr/local/anaconda3/envs/test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h2ec42d9_0         364 KB  conda-forge
    dill-0.3.4                 |     pyhd8ed1ab_0          62 KB  conda-forge
    lazy-object-proxy-1.7.1    |  py310he24745e_0          32 KB  conda-forge
    ....
    additional packages here
    ....
    ------------------------------------------------------------
                                           Total:        21.8 MB

Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Windows

在 Windows 上建立conda環境所使用的指令,大致與 Linux/MacOS 相同。 不過,建議你使用 Anaconda 的cmd或powershell提示字元,而不是把conda加進你的路徑:

(base) PS C:\Users\foobar> conda create --name {name_of_environment} python={version} "pytest>6" pylint
...

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\ProgramData\Anaconda3\envs\test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h5588dad_0         364 KB  conda-forge
    attrs-21.4.0               |     pyhd8ed1ab_0          49 KB  conda-forge
    bzip2-1.0.8                |       h8ffe710_4         149 KB  conda-forge
    ...
    additional packages here
    ...
    ------------------------------------------------------------
                                           Total:        37.5 MB

Proceed ([y]/n)? y
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

UV

使用 uv 開發專案:uv

uv是 Astral 推出、以 Rust 撰寫的 Python 套件與專案管理工具。 它的設計目標是取代pip、venv、poetry以及其他 Python 封裝/相依性管理工具。 與Conda或Mamba不同,uv 是專門為 Python 量身打造。 不過,uv 確實支援建置以其他語言(例如 Fortran)撰寫的 Python 擴充模組。 Astral 也是熱門 linter Ruff 與 Python 型別提示靜態型別檢查器 TY 的開發者,兩者都以 Rust 撰寫。

這裡就不詳細說明了,安裝與設定的最佳來源是 UV 文件。

虛擬環境包裝工具

文件與背景資訊:virtualenvwrapper。

virtualenvwrapper套件建構在venv之上,讓你在一處管理所有的虛擬環境。 你可以用類似 Linux 的指令,例如lsvirtualenv(列出環境)和mkvirtualenv(建立環境),來建立、複製、刪除與切換環境。 它也讓你能透過擴充套件加入其他管理工具。 你甚至可以用這個教學為這個工具建立自己的擴充套件。


PyEnv

pyenv是熱門工具rbenv/ruby-build為了 Python 修改而成的 Python 分支。 它基本上是一組指令碼與 shim,讓你能在全域與個別使用者層級設定 Python 版本。 它試著遵循 Unix 的傳統:一個單一用途、低調不擾人的工具,把一件事做好。

pyenv與pyenv文件可以在 GitHub 上找到。



編輯器與 IDE



Visual Studio Code

Visual Studio Code(VS Code) 是 Microsoft 開發的免費程式碼編輯器。 它同時對虛擬環境/conda 環境 以及 docker(透過 docker 外掛)提供絕佳支援,還能用許多不同的外掛來擴充,涵蓋測試、linting、格式化 和網頁開發。

VS Code 的 Python

擴充功能 ID:ms-python.python

VS Code 上的 Python 擴充功能標頭

Microsoft 的 Python 擴充功能 是 Microsoft 官方推出、適用於 VS Code 的 Python 擴充功能,非常推薦安裝。 它功能廣泛,包括環境管理、測試管理、linting 和除錯。 從最新版本 開始,安裝 MS Python 擴充功能時也會一併下載 pylance(用來 linting 與驗證 Python 程式碼的熱門套件)以及 jupyter(用來操作 Jupyter Notebooks)。

  • 設定教學在這裡,而設定參考 也非常實用。
  • 關於設定 Python 版本/使用虛擬環境的資訊,可以在這裡 找到。
  • 關於在 VS Code 中設定與使用 unittest 和 pytest 的資訊,可以在這裡 找到。

PyCharm

PyCharm 是 JetBrains 打造的 IDE(整合開發環境)。 它是專為 Python 打造的,在專業人士之間很受歡迎。 和 VS Code 一樣,它能用各種付費與免費外掛、佈景主題和格式化工具來擴充。 付費版還支援 Django 開發、Docker 開發 和資料庫整合。

PyCharm 與 Pytest
  • 在 PyCharm 中設定 pytest 的步驟可以在這裡 找到。
  • PyCharm 預設使用unittest,所以你必須把pytest安裝到與 PyCharm 搭配使用的環境中(請見上面的翻譯員與環境文件),然後把 PyCharm 指向它。
  • 直接從圖形介面執行測試 真的很簡單,但別忘了好好看一下底層的 pytest 參數,把它設定成你喜歡的樣子。
  • 在 PyCharm 中執行測試與除錯的一般文件可以在這裡 找到。

Spyder IDE

Spyder 是專為科學社群打造、跨平台的免費開源 Python IDE。 它通常隨 Anaconda 的 Python 發行版一起提供,但也可以單獨安裝 並搭配任何 Python 版本使用。 我們建議單獨安裝,以確保最大的彈性,並避免套件衝突。

Spyder 完整支援venv和conda環境。 它內建整合的 IPython 互動式終端機、互動式除錯器,以及豐富的編輯器內繪圖與資料探索支援。 額外的程式碼補全與 linting 由 kite 提供。 與 Jupyter Notebooks 和測試工具 的整合,則透過社群開發的外掛來提供。 你也可以使用 Spyder API 撰寫自己的外掛。


Emacs

Emacs 是以 Lisp 撰寫、免費且開源、高度可自訂的文字編輯器。 Real Python 上有一份很棒的安裝與設定指南。

  • Emacs Wiki 也有一份用 Emacs 寫 Python 的優良指南。
  • Full Stack Python 也蒐集了一些開始使用 Emacs 的好資訊與連結。

Vim

Vim 是 Unix 標準vi文字編輯器的免費「改良」版。 它可以在各式各樣的作業系統與 Linux/Unix 版本上取得。 Real Python 上有一份很棒的安裝與設定指南,實用的速查表則可以在 vimsheet、glump 和 rtorr 找到。

即使你決定不用vim編輯 Python 程式碼,還是建議你熟悉一組基本指令。 vim或vi經常是 Linux 與 Unix 發行版中「基本」或「預設」的文字編輯器,在這些系統上也是git提交訊息(以及其他用途)的預設編輯器。 你很有可能發現自己身處某個 *nix 系統上,只能靠vi來編輯設定檔,所以知道如何離開 vim(至少)是很好的自我防衛。


Spacemacs

Spacemacs(github 儲存庫)是由社群驅動的免費 Emacs 發行版,結合了 Emacs 與 Vim 的功能。

  • 官方文件可以在這裡 找到
  • opensource 上的這篇指南 簡要介紹了安裝與設定選項。
  • spacemacs 的 python layer 新增了測試、linting、環境管理與程式碼格式化的功能。

Sublime Text

Sublime Text 是 Sublime HQ Pty Ltd 推出、用於寫程式的付費文字編輯器。 它與 VS Code 和 Atom 類似,有許多套件與外掛 可以用來客製化。 你也可以用 Python 為這個編輯器開發自己的外掛。