跳至內容

Python

出自 Arch Linux 中文维基

來自「什麼是 Python?」

Python 是一種解釋型、交互式、面向對象的編程語言。 它包含了模塊、異常、動態類型、高層級動態數據類型以及類等特性。 在面向對象編程以外它還支持多種編程範式,例如過程式和函數式編程等。 Python 結合了超強的功能和極清晰的語法。 它帶有許多系統調用和庫以及多種窗口系統的接口,並且能用 C 或 C++ 來進行擴展。 它還可用作需要可編程接口的應用程式的擴展語言。 最後,Python 非常易於移植:它可以在包括 Linux 和 macOS 在內的許多 Unix 變種以及 Windows 上運行。

安裝[編輯 | 編輯原始碼]

安裝 python

其它版本[編輯 | 編輯原始碼]

Python 的舊版本和預發佈版本可以通過 AUR 獲得,這對於無法在當前版本上運行的舊應用程式、打算在其他版本上運行的程序,或者僅僅出於好奇,可能會很有用:

警吿: Python 3.9 之前的版本都已經停止維護。參見 Python 版本狀態

為實現多版本共存,每個這樣的軟件包都會安裝一個以版本號命名的獨立二進制文件,例如 Python 3.9 的二進制文件名為 python3.9pyenv 可用於輕鬆安裝和切換多個 Python 版本。

在 AUR 上搜索 python<版本號(不帶小數點)> 可以找到用於舊版本的額外模塊/庫,例如搜索 python39 可以找到 3.9 版本的模塊。

可以從 https://www.python.org/downloads/ 下載任意版本的原始碼。

替代實現[編輯 | 編輯原始碼]

python 包會安裝 CPython, 是 Python 的參考實現,而同時還有多種其它的實現。這些實現通常基於舊版本的 Python 而並不完全與 CPython 兼容。

Arch Linux 官方倉庫與 AUR 包含的實現:

  • PyPy — 使用 Python 編寫的 Python 實現,較 CPython 而言具有速度和內存用量上的優勢。
https://www.pypy.org || pypypypy3
  • Jython — 使用 Java 編寫的 Python 實現,可以用於將 Python 腳本嵌入到 Java 程序中,或是在 Python 程序中使用 Java 庫。
https://www.jython.org/ || jython
  • micropython — 用於微控制器的 Python 實現,包含了 Python 標準庫的一小塊子集,並針對在微控制器或是受限環境中運行進行了優化。
https://micropython.org/ || micropythonAUR
  • IronPython — 與 .NET 緊密集成的 Python 實現,可以調用 .NET 庫,同時允許 .NET 程序使用 Python 庫。
https://ironpython.net || ironpython-gitAUR

Python 還有其它多種實現。一些(例如 Cinder)在大型科技公司內部得到使用。還有一些在歷史上具有重要意義,但因最流行的實現已有改進而不再維護。

替代 shell[編輯 | 編輯原始碼]

python 軟件包包含一個交互式 Python shell/REPL,可以通過 python 命令啟動,還可以使用以下 shell:

  • bpython — 為 Python 解釋器提供美觀界面。
https://bpython-interpreter.org/ || bpython
  • IPython — 功能強大的交互式 Python Shell。
https://ipython.org/ || ipython
  • Jupyter — 由 IPython 提供支持的基於 Web 的計算應用程式。
https://jupyter.org/ || jupyterlabjupyter-notebook
https://github.com/prompt-toolkit/ptpython || ptpythonAUR

軟件包管理[編輯 | 編輯原始碼]

在 Arch Linux 上,有多種方法可以安裝 Python 軟件包。

Arch 官方倉庫[編輯 | 編輯原始碼]

大量流行的軟件包可以在官方倉庫AUR 中找到。這是安裝系統範圍內軟件包的首選方式,也是 Arch Linux 官方支持的唯一方法。

第三方軟件包[編輯 | 編輯原始碼]

開發者在使用 Python 時,可能需要使用 Arch 倉庫中沒有的軟件包或特定版本。推薦的做法是為每個項目使用單獨的虛擬環境隔離環境,避免與 /usr 中的系統軟件包發生衝突。在虛擬環境中安裝軟件包可以使用以下工具:

  • pip(1) — Python 官方的軟件包安裝工具。
https://pip.pypa.io/ || python-pip
  • pipx — 專門的軟件包安裝工具,僅用於安裝具有 CLI 入口點的軟件包(而非庫包)。
https://pypa.github.io/pipx/ || python-pipx
  • Poetry — 簡化 Python 依賴管理和打包的工具。Poetry 是一個集開發、構建、發佈和依賴管理於一體的工具。
https://python-poetry.org/ || python-poetry
  • Conda — Conda 提供適用於任何語言的軟件包、依賴和環境管理。Conda 最初為 Python 而創建,廣泛用於科學計算、數據科學和機器學習。Conda 是 miniforge 社區 Python 發行版以及 AnacondaMiniconda Python 發行版的軟件包管理器。
https://docs.conda.io || python-condaAUR
  • uv — 使用 Rust 編寫的極快的 Python 軟件包安裝器和解析器。設計為常見 pip 和 pip-tools 工作流程的直接替代品。
https://docs.astral.sh/uv/ || uv

pippipxpoetryuvPython 軟件包索引(PyPI)和其他索引中安裝軟件包。Conda 和 Miniconda 使用 Anaconda 倉庫

作為虛擬環境的替代方案,可以使用 pip install --user 將軟件包安裝到用户方案,而不是 /usr。這種方法按用户而非項目分隔軟件包,但虛擬環境通常是更好的選擇。

軟件包管理的官方最佳實踐見 Python 打包用户指南(Python Packaging User Guide)

注意: 還有一些工具將 pippacman 集成,通過為指定的 PyPI 軟件包自動生成 PKGBUILD 文件來實現,詳見創建軟件包#PKGBUILD 生成器
提示:pipenv 提供用於管理 Pipfilepipvirtualenv 的統一的 CLI,可以通過 python-pipenv 獲取。

歷史説明[編輯 | 編輯原始碼]

之前,easy_installpython-setuptools 的一部分)用於安裝以 Egg 格式分發的軟件包。easy_install 和 Egg 已被 pip 和 Wheel 替代。詳見 pip vs easy_install軟件包格式(Package Formats)

早期版本的 pip 可以在系統範圍內安裝第三方軟件包,但這導致了 PEP668 中提到的諸多問題。現在,系統範圍的環境被標記為外部管理環境(externally managed environment)pip 不再允許系統範圍的安裝。

GUI 綁定[編輯 | 編輯原始碼]

以下是可用的控件工具包(GUI 工具包)綁定:

  • TkinterTk GUI 工具包的標準 Python 接口。
https://docs.python.org/3/library/tkinter.html || python
  • Qt for Python (PySide2)Qt5 的官方 Python 綁定。
https://www.qt.io/qt-for-python || pyside2AURpyside2-toolsAUR
  • Qt for Python (PySide6)Qt6 的官方 Python 綁定。
https://www.qt.io/qt-for-python || pyside6pyside6-tools
  • pyQt — Qt 的 Python 綁定集合。
https://riverbankcomputing.com/software/pyqt/intro || python-pyqt5python-pyqt6
  • PyGObject — 用於基於 GObject 的庫(如 GTKGStreamer、WebKitGTK、GLib 和 GIO)的 Python 綁定。
https://pygobject.readthedocs.io/ || python-gobject
  • wxPython — 封裝 wxWidgets 的跨平台 Python GUI 工具包。
https://wxpython.org/ || python-wxpython

若要在 Python 中使用它們,可能還需要安裝相關的控件工具包軟件包(例如,必須同時安裝 tk 才能使用 Tkinter)。

提示與技巧[編輯 | 編輯原始碼]

虛擬環境[編輯 | 編輯原始碼]

Python 提供了創建隔離的虛擬環境的工具,可以在其中安裝軟件包,而不與其他虛擬環境或系統軟件包發生衝突。虛擬環境還可以在同一系統上運行不同版本的 Python。

詳見 Python/虛擬環境

在 Python Shell 中實現 Tab 補全功能[編輯 | 編輯原始碼]

Tab 自動補全在交互式 shell 中默認可用。需要注意,readline 補全器只能補全全局命名空間中的名稱。python-jedi 提供了更豐富的 Tab 自動補全體驗 [1]

問題解決[編輯 | 編輯原始碼]

更新 Python 後找不到模塊[編輯 | 編輯原始碼]

在升級 python 到新版本(例如從 3.10 升級到 3.11)後,基於 Python 的應用程式可能會輸出 No module named 模塊名稱 錯誤,表示已安裝的依賴項 模塊名稱 不可用。

這種情況發生在某個依賴項不支持當前的 Python 版本,或者根本沒有安裝。Python 軟件包在安裝時會放置在版本隔離的 site-packages 目錄中(如果是全局安裝,路徑為 /usr/lib/pythonX.Y/site-packages,如果是用户安裝,路徑為 ~/.local/lib/pythonX.Y/site-packages/,其中 X.Y 是類似「3.11」這樣的版本號)。因此,每當 Python 版本進行小版本升級時,使用之前版本構建的基於 Python 的軟件包必須重新構建,以便能在新版本中正常使用。

需要注意,用户有責任重新構建非官方軟件包,包括從 AUR 安裝的基於 Python 的軟件包。請參閱 AUR#更新包和[[常見問題#Q)_執行pacman -Syu時,終端顯示某個共享庫需要升級,但依賴它的程序沒有升級,我該怎麼做呢?]]。

另見[編輯 | 編輯原始碼]

官方[編輯 | 編輯原始碼]

第三方[編輯 | 編輯原始碼]