Python

出自 ArchWiki

出自 什么是 Python?

Python 是一种解释型、交互式、面向对象的编程语言。它融入了模块、异常、动态类型、非常高级的动态数据类型和类。它支持面向对象编程之外的多种编程范式,例如过程式和函数式编程。Python 将非凡的威力与非常清晰的语法相结合。它具有许多系统调用和库的接口,以及各种窗口系统,并且可以在 C 或 C++ 中扩展。它也可用作需要可编程接口的应用程序的扩展语言。最后,Python 是可移植的:它可以在许多 Unix 变体(包括 Linux 和 macOS)以及 Windows 上运行。

安装

安装 python 软件包。

其他版本

Python 以前和将来的版本可通过 AUR 获得。这些版本对于需要特定版本的应用程序或项目很有用,或者仅仅是为了满足好奇心

警告: 3.9 之前的 Python 版本已达到生命周期结束且不再维护。请参阅 Python 版本状态

这些软件包中的每一个都安装一个以版本号命名的不同二进制文件,例如 Python 3.9 的 python3.9,允许系统上共存多个版本。您还可以使用 pyenvuv 来轻松安装和切换 Python 的多个版本。

旧版本 Python 的额外模块/库可以在 AUR 上找到,方法是搜索 python<不带句点的版本号>,例如,搜索 Python 3.9 模块的 python39

您还可以从 https://pythonlang.cn/downloads/ 页面下载任何版本的源代码。

替代实现

python 软件包安装了 CPython,即 Python 的参考实现。但是,还有其他实现可用。这些实现通常基于旧版本的 Python,并且与 CPython 不完全兼容。

Arch Linux 上可用的实现包括

  • PyPy — 一种用 Python 编写的 Python 实现。与 CPython 相比,它具有速度和内存使用优势。
https://pypy.pythonlang.cn || pypy, pypy3
  • Jython — 一种用 Java 编写的 Python 语言实现。它可用于将 Python 脚本嵌入到 Java 程序中,或在 Python 程序中使用 Java 库。
https://jython.cn/ || jython
  • micropython — 用于微控制器的 Python。它包括 Python 标准库的一个小子集,并针对在微控制器和受限环境中运行进行了优化。
https://micropython.org/ || micropythonAUR
  • IronPython — Python 编程语言的一种实现,它与 .NET 紧密集成。它可以使用 .NET 库,并允许 .NET 程序使用 Python 库。
https://ironpython.pythonlang.cn || ironpython-gitAUR

存在更多实现。有些实现,例如 Cinder,在大型科技公司内部使用。其他一些在历史上值得注意,但由于最流行的实现的改进而不再维护。

替代 Shell

python 软件包包含一个交互式 Python Shell/REPL,可以使用 python 命令启动。以下 Shell 也可用

  • bpython — Python 解释器的精美界面。
https://bpython-interpreter.org/ || bpython
  • IPython — 功能强大的交互式 Python Shell。
https://ipython.pythonlang.cn/ || ipython
  • Jupyter — 由 IPython 驱动的基于 Web 的计算应用程序。
https://jupyter.pythonlang.cn/ || jupyterlab, jupyter-notebook
https://github.com/prompt-toolkit/ptpython || ptpythonAUR

包管理

在 Arch Linux 上安装 Python 包有几种方法。

Arch 软件仓库

大量流行的软件包在官方软件仓库AUR 中可用。这是首选方法来安装系统范围的软件包,也是 Arch Linux 上唯一官方支持的方法。

第三方软件包

使用 Python 的开发人员可能需要使用 Arch 软件仓库中不可用的软件包或软件包版本。推荐的做法是使用单独的虚拟环境来隔离每个项目,防止与 /usr 中的系统软件包发生冲突。各种工具可用于在虚拟环境中安装软件包

  • pip(1) — Python 的官方软件包安装程序。
https://pip.pythonlang.cn/ || python-pip
  • pipx — 一种专门的软件包安装程序,只能用于安装带有 CLI 入口点的软件包(但不能安装库软件包)。
https://pipx.pypa.io || python-pipx
  • Poetry — 轻松实现 Python 依赖管理和打包。Poetry 是一个用于开发、构建、发布和跟踪 Python 项目依赖项的单一工具。
https://poetry.pythonlang.cn/ || python-poetry
  • Conda — Conda 为任何语言提供软件包、依赖项和环境管理。Conda 最初是为 Python 创建的,在科学计算、数据科学和机器学习中很受欢迎。Conda 是 miniforge 社区发行版以及 AnacondaMiniconda 发行版的软件包管理器。
https://docs.conda.org.cn || python-condaAUR
  • uv — 一种极其快速的 Python 软件包安装程序和解析器,用 Rust 编写。一个可以替代 pip、pip-tools、pipxpoetrypyenvtwinevirtualenv 等多种工具的单一工具。
https://docs.astral.sh/uv/ || uv

pippipxpoetryuvPython 包索引 和其他索引安装软件包。Conda 和 Miniconda 使用 Anaconda 仓库

作为虚拟环境的替代方案,可以使用 pip install --user 将软件包安装到 用户方案 中,而不是 /usr。 这样做会将软件包按用户而不是按项目分隔。虚拟环境通常是更好的选择。

有关软件包管理的官方最佳实践,请参阅 Python 打包用户指南

注意: 还有一些工具将 pippacman 集成,通过为指定的 PyPI 软件包自动生成 PKGBUILD:请参阅 创建软件包#PKGBUILD 生成器
提示: pipenvPipfilepipvirtualenv 提供了一个单一的 CLI。 它作为 python-pipenv 提供。

历史记录

在历史上,easy_installpython-setuptools 的一部分)用于安装以 Eggs 形式分发的软件包。easy_install 和 Eggs 已被 pipWheels 取代。 有关更多信息,请参阅 pip vs easy_install软件包格式

以前版本的 pip 可以系统范围内安装第三方软件包,但这导致了 PEP668 中概述的许多问题。 系统范围的环境现在被标记为 外部管理的环境,并且 pip 不再允许系统范围的安装。

小部件绑定

以下 小部件工具包 绑定可用

  • Tkinter — 用于 Tk GUI 工具包的标准 Python 接口。
https://docs.pythonlang.cn/3/library/tkinter.html || python
  • Qt for Python (PySide2) — 用于 Qt5 的官方 Python 绑定。
https://www.qt.io/qt-for-python || pyside2AUR, pyside2-toolsAUR
  • Qt for Python (PySide6) — 用于 Qt6 的官方 Python 绑定。
https://www.qt.io/qt-for-python || pyside6, pyside6-tools
  • pyQt — 一组用于 Qt 的 Python 绑定。
https://riverbankcomputing.com/software/pyqt/intro || python-pyqt5, python-pyqt6
  • PyGObject — 用于基于 GObject 的库(例如 GTKGStreamer、WebKitGTK、GLib 和 GIO)的 Python 绑定。
https://pygobject.readthedocs.io/ || python-gobject
  • wxPython — 用于 Python 的跨平台 GUI 工具包,它包装了 wxWidgets
https://wxpython.org/ || python-wxpython

要将这些与 Python 一起使用,您可能还需要安装相关的窗口小部件工具包软件包(例如,要使用 Tkinter,还必须安装 tk)。

技巧和窍门

虚拟环境

Python 提供了创建隔离的虚拟环境的工具,软件包可以安装到这些环境中,而不会与其他虚拟环境或系统软件包冲突。 虚拟环境还可以在同一系统上运行具有不同 Python 版本的应用程序。

有关详细信息,请参阅 Python/虚拟环境

Python shell 中的 Tab 补全

Tab 补全 在交互式 shell 中默认可用。 请注意,readline 补全器将仅补全全局命名空间中的名称。 您可以使用 python-jedi 获得更丰富的 Tab 补全体验 [1]

列出为特定 Python 版本构建的软件包

有时,了解哪些已安装的软件包是为特定版本的 Python 构建的很有用。 例如,

$ pacman -Qoq /usr/lib/python3.12

将列出所有为 Python 3.12 版本构建的软件包。 当官方 Python 版本更新并且想要从 AUR 获取需要重建的软件包列表时,这尤其有用,因为它们是为可能不再安装的 Python 版本构建的,请参阅 #Python 版本更新后找不到模块

故障排除

Python 版本更新后找不到模块

在将 python 软件包升级到新的次要版本(例如,从 3.10 版本升级到 3.11 版本)后,基于 Python 的应用程序可能会为名为 module_name 的已安装依赖项输出 No module named module_name

当依赖项对于该 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#更新软件包FAQ#如果我运行完整的系统升级,并且共享库将有更新,但依赖于它的应用程序没有更新怎么办?

另请参阅

官方

第三方