Python

出自 ArchWiki
(重定向自 Pip

出自 What is Python?

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

安装

安装 python 软件包。

其他版本

Python 以前和未来的版本可以通过 AUR 获取。这些版本对于需要特定版本的应用程序或项目,或者仅仅出于好奇心都很有用

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

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

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

您还可以从 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 — 一种与 .NET 紧密集成的 Python 编程语言实现。它可以使用 .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
  • ptpython — 一个使用 prompt-toolkit 构建的高级 Python REPL。
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 Packaging User Guide

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

历史记录

历史上,easy_install (是 python-setuptools 的一部分) 被用来安装以 Eggs 形式分发的软件包。easy_install 和 Eggs 已经被 pipWheels 所取代。更多信息请参阅 pip vs easy_installPackage Formats

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

Widget 绑定

以下 widget 工具包 绑定可用

  • 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 一起使用,您可能还需要安装相关的 widget 工具包软件包(例如,要使用 Tkinter,还必须安装 tk)。

技巧和窍门

虚拟环境

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

有关详细信息,请参阅 Python/Virtual environment

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

另请参阅

官方

第三方