跳转到内容

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时,终端显示某个共享库需要升级,但依赖它的程序没有升级,我该怎么做呢?]]。

另见[编辑 | 编辑源代码]

官方[编辑 | 编辑源代码]

第三方[编辑 | 编辑源代码]