Python (简体中文) - ArchWiki

# Python (简体中文)

From ArchWiki
Jump to navigation Jump to search

相关文章

- 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
- Python 2.5: python25AUR
- Python 1.5: python15AUR

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 安装软件包.

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

## 部件绑定

有如下部件工具的绑定:

- TkInter — Tk 绑定

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

- pyQt — Qt 绑定

  https://www.riverbankcomputing.co.uk/software/pyqt/intro || python2-pyqt4AUR python2-pyqt5 python-pyqt4AUR python-pyqt5

- pySide — Qt bindings

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

- pyGTK — GTK+ 绑定

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

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

  https://wiki.gnome.org/PyGObject/ || python2-gobject2 python2-gobject python-gobject2 python-gobject

- wxPython — wxWidgets 绑定

  https://wxpython.org/ || wxpython[broken link: replaced by python2-wxpython3]

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

## 技巧

### IPython

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

如果要使用 IPython 笔记本，可以安装 IPython3 使用的 jupyter-notebook 和 IPython2 使用的 ipython2-notebook，运行

    $ jupyter notebook

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

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

### 虚拟环境

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