Python (简体中文) - ArchWiki

# Python (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- Python Package Guidelines
- mod_python
- Python/Virtualenv (简体中文)
- Django

翻译状态：本文是 Python 的翻译。上次翻译日期：2017-11-25。如果英文版本有所更改，则您可以帮助同步翻译。

根据Wikipedia 页面: Python 是一种面向对象、直译式电脑编程语言，具有近二十年的发展历史，成熟且稳定。它包含了一组完善而且容易理解的标准库，能够轻松完成很多常见的任务。它的语法简捷和清晰，尽量使用无异义的英语单词，与其它大多数程序设计语言使用大括号不一样，它使用缩进来定义语句块。

## 安装

### Python 3

Python 3 是语言的最新版本，而且不兼容 Python 2。语言. 语法基本上差不多，但是很多细节，尤其是一些内置对象，像字典和字符串，它们的工作方式已经改变了，一些不推荐使用的特性最终被移除了。同样，标准库也进行了整理。所有差别的列表，请访问 Python2orPython3 和 Dive into Python 3 的相关 章节。

要获得 Python 3，请安装软件包 python 。

要从源代码编译测试版，请访问 Python 下载页面。AUR 中同样包含 PKGBUILDS 。如果要安装 RC 版，请注意二进制文件默认安装到 `/usr/local/bin/python3.x`.

### Python 2

要获得 Python 2，请安装软件包 python2 。

Python 2 可以和 Python 3 同时运行，需要指定成`python2`才会运行此版本。

默认的`/usr/bin/python`是链接到 python 3 的，所以所有要求使用 python 2 的软件包应该用 `/usr/bin/python2` 替换 `/usr/bin/python`.

用文本编辑器打开程序或脚本，将第一行：

    #!/usr/bin/env python

或

    #!/usr/bin/python

中的 `python` 替换为 `python2`。

另一种强制使用 python2 而不修改脚本的方法是明确地使用 python2 调用它，即

    python2 myScript.py

最后，你可能无法控制脚本调用哪一个，但还有一种方法。它仅在脚本使用 `#!/usr/bin/env python` 时有效，在用 `#!/usr/bin/python` 时无效。这种手法依赖于 `env` 在 PATH 变量中搜索第一个对应的条目。 首先创建一个目录。

    $ mkdir ~/bin

然后添加一个名为 'python' 的链接指向 python2 以及一个名为 'python-config' 的链接指向 python2-config 。

    $ ln -s /usr/bin/python2 ~/bin/python
    $ ln -s /usr/bin/python2-config ~/bin/python-config

最后把新的目录添加到你的 PATH 变量的 最前面。

    $ export PATH=~/bin:$PATH

注意到这个修改不是永久的，仅在当前终端会话中有效。 要检查 `env` 使用的是哪个 python 解释器，使用以下命令：

    $ which python

另一个解决这个问题的方法是通过 Python/Virtualenv (简体中文) 来伪造一个脚本的运行环境。

### 旧版本

警告： 至少从 2014 年开始，Python 2.7 和 3.4 之前的版本就没有包含任何安全更新，使用老版本运行互联网应用或不信任的代码会有安全风险。

AUR中有之前发布的 Python 版本，运行旧程序或测试程序的版本兼容性时可以使用：

- Python 3.5: python35AUR
- Python 3.4: python34AUR
- Python 2.6: python26AUR[断开的链接：package not found]
- Python 2.5: python25AUR
- Python 1.5: python15AUR[断开的链接：package not found]

AUR 中还有老版本使用的模块和库，可以通过带版本的 python 搜索。例如 "python26" 关键字可以搜索支持 2.6 的模块。

## 软件包管理

尽管 官方软件仓库 和 AUR 中包含大量的软件包，Python 生态系统提供了自己的软件包管理器，可以配合 Python 软件包索引网站 PyPI 使用。

- pip — 可以安装 Python 软件包的 PyPA 工具。

  https://pip.pypa.io/ || python-pip, python2-pip

- setuptools — 可以简化 Python 软件包的下载、编译、安装、升级和卸载。

  https://setuptools.readthedocs.io/ || python-setuptools, python2-setuptools

pip vs easy_install 提供了两者的功能比较。这里包含 Python 软件包管理的最佳实践.

如果必须使用 pip，请使用虚拟环境或使用 `pip install --user` 以避免将软件包安装到 `/usr`. 建议在可能的情况下，使用 pacman 安装软件包.

注意： Creating packages#PKGBUILD generators 中介绍了一些工具，可以将 pip 与 pacman 整合起来，自动生成 pip 软件包的 PKGBUILD。

## 部件绑定

有如下部件工具的绑定:

- TkInter — Tk 绑定

  https://wiki.python.org/moin/TkInter || 标准模块

- pyQt — Qt 绑定

  https://riverbankcomputing.com/software/pyqt/intro || python2-pyqt4AUR python2-pyqt5[断开的链接：package not found] python-pyqt4AUR python-pyqt5

- pySide — Qt bindings

  https://wiki.qt.io/PySide || python2-pysideAUR

- pyGTK — GTK+ 绑定

  http://www.pygtk.org/ || pygtkAUR

- PyGObject — GTK+ 2/3 绑定通过 GObject Introspection

  https://wiki.gnome.org/PyGObject/ || python2-gobject2AUR python2-gobject python-gobject2[断开的链接：package not found] python-gobject

- wxPython — wxWidgets 绑定

  https://wxpython.org/ || wxpython[断开的链接：replaced by python2-wxpython3]

要和 Python 一同使用，需要先安装相应的组件。

## 技巧

### IPython

IPython 是改善了的 Python 命令行工具，可以从官方软件仓库安装 ipython 和 ipython2AUR。

如果要使用 IPython 笔记本，可以安装 IPython3 使用的 jupyter-notebook 和 IPython2 使用的 ipython2-notebook[断开的链接：package not found]，运行

    $ jupyter notebook

可以自动启动浏览器和 IPython 内核，可以在创建笔记本是选择 Python 版本。

bpython 是 Python 的 ncurses 界面，通过 bpython 和 bpython2AUR 安装.

### 虚拟环境

python-virtualenv 是 Ian Bicking 编写的 Python 工具，可以为 Python 建立独立环境，可以安装软件包而不影响其它 virtualenv 环境或系统 Python 软件包，可以修改一个软件使用的 Python 版本。详情请参考 Python/Virtualenv (简体中文).

### 在 Python Shell 中实现 Tab 补全功能

从 Python 3.4 开始默认启用了 tab 补全。Python 2 可以通过将下面设置加入到 `PYTHONSTARTUP` 环境变量引用的文件进行启用 [1]:

    import rlcompleter
    import readline
    readline.parse_and_bind("tab: complete")

## 问题解决

### 正确设置编译脚本中的 Python 版本

许多项目的编译脚本认为 `python` 是 Python 2，如果这样编译会导致错误 - 例如 `print 'foo'` 是错误语法。幸运的是，很多编译脚本会使用 `$PATH` 中的`python` 而不是写死 `#!/usr/bin/python`，而且 Python 脚本都位于项目树中。所以，可以不修改脚本就解决此问题，只需创建`/usr/local/bin/python`：

    /usr/local/bin/python

    #!/bin/bash
    script=$(readlink -f -- "$1")
    case "$script" in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)
        exec python2 "$@"
        ;;
    esac

    exec python3 "$@"

其中 `/path/to/project1/*|/path/to/project2/*|/path/to/project3*` 是用`|` 分隔的项目匹配列表。

有些脚本的第一个参数不是路径，例如 Google SDK 第一个参数是 "-S"，readlink 命令应该变成 `script=$(readlink -f -- "$1")`.

给脚本 执行权限.完成后，指定的项目就会以 Python 2 运行脚本了。

## 参阅

- O'Reilly's Learning Python, 5th edition commercial
- Dive Into Python, Dive Into Python3
- A Byte of Python
- Learn Python the Hard Way
- Learn Python
- Crash into Python (assumes familiarity with other programming languages)
- Beginning Game Development with Python and Pygame commercial
- Think Python
- Pythonspot
- Learn Python Step by Step
- awesome-python - A curated list of Python frameworks, libraries, software and resources.
- boltons - Constructs/recipes/snippets that would be handy in the standard library.

Category:

- Programming languages (简体中文)

Hidden category:

- Pages with broken package links