arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
232 lines (139 loc) • 23.3 kB
Markdown
Ссылки по теме
* [Python package guidelines](/index.php/Python_package_guidelines "Python package guidelines")
* [Python/Virtual environment](/index.php/Python/Virtual_environment "Python/Virtual environment")
* [mod_wsgi](/index.php/Mod_wsgi "Mod wsgi")
**Состояние перевода:** На этой странице представлен перевод статьи [Python](/index.php/Python "Python"). Дата последней синхронизации: 2 июня 2017. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Python&diff=0&oldid=479061).
Из [Википедии](https://en.wikipedia.org/wiki/ru:Python "wikipedia:ru:Python"):
Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.
Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они, в свою очередь, могут быть объединены в пакеты).
## Contents
* [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
* [1.1 Python 3](#Python_3)
* [1.2 Python 2](#Python_2)
* [1.3 Старые версии](#.D0.A1.D1.82.D0.B0.D1.80.D1.8B.D0.B5_.D0.B2.D0.B5.D1.80.D1.81.D0.B8.D0.B8)
* [2 Управление пакетами](#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0.D0.BC.D0.B8)
* [3 Привязки к графическим библиотекам](#.D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8_.D0.BA_.D0.B3.D1.80.D0.B0.D1.84.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.BC_.D0.B1.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0.D0.BC)
* [4 Советы и рекомендации](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8)
* [4.1 IPython](#IPython)
* [4.2 Виртуальное окружение](#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B5_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5)
* [4.3 Включение автодополнения в оболочке Python2](#.D0.92.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B0.D0.B2.D1.82.D0.BE.D0.B4.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B2_.D0.BE.D0.B1.D0.BE.D0.BB.D0.BE.D1.87.D0.BA.D0.B5_Python2)
* [5 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC)
* [5.1 Проблемы с версией Python в скриптах сборки](#.D0.9F.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC.D1.8B_.D1.81_.D0.B2.D0.B5.D1.80.D1.81.D0.B8.D0.B5.D0.B9_Python_.D0.B2_.D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.D1.85_.D1.81.D0.B1.D0.BE.D1.80.D0.BA.D0.B8)
* [6 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)
## Установка
### Python 3
Python 3 - это актуальная на данный момент версия языка, несовместимая с Python 2\. Синтаксис в ней, по большей части, такой же, но многие вещи, например, то, как работают встроенные объекты наподобие словарей и строк, значительно изменились, а многие устаревшие функции были окончательно удалены. Помимо этого стандартная библиотека была разбита на несколько отдельных частей. Чтобы подробнее узнать о различиях, прочитайте статью [Python2orPython3](https://wiki.python.org/moin/Python2orPython3), а также относящуюся к ней [главу](http://getpython3.com/diveintopython3/porting-code-to-python-3-with-2to3.html) книги "Погружение в Python 3".
Для получения самой свежей версии Python 3 [установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакет [python](https://www.archlinux.org/packages/?name=python).
Если вы хотите собрать еще более свежую RC/бета-версию из исходников, посетите страницу [Python Downloads](https://www.python.org/downloads/). В [пользовательском репозитории Arch](/index.php/Arch_User_Repository_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch User Repository (Русский)") также есть несколько отличных [PKGBUILD](/index.php/PKGBUILD_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "PKGBUILD (Русский)")'ов. Если вы решили собрать RC-версию, обратите внимание, что исполняемый файл устанавливается (по умолчанию) в каталог `/usr/local/bin/python3.x`.
### Python 2
Для получения последней версии Python 2 [установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакет [python2](https://www.archlinux.org/packages/?name=python2).
Python 2 будет успешно запускаться и функционировать, даже если в ваше системе также установлен Python 3\. Для использования этой версии необходимо писать `python2`.
Любая программа, которой необходим Python 2, должна ссылаться на `/usr/bin/python2`, a не на `/usr/bin/python`, который указывает на Python 3\. Чтобы добиться этого, откройте программу или скрипт в [текстовом редакторе](/index.php/List_of_applications/Documents_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A2.D0.B5.D0.BA.D1.81.D1.82.D0.BE.D0.B2.D1.8B.D0.B5_.D1.80.D0.B5.D0.B4.D0.B0.D0.BA.D1.82.D0.BE.D1.80.D1.8B "List of applications/Documents (Русский)") и измените первую строку. Будет написано что-либо из этого:
```
#!/usr/bin/env python
```
или
```
#!/usr/bin/python
```
И в том, и в другом случае просто замените `python` на `python2`, и программа будет использовать Python 2.
Другой способ, избавляющий от необходимости редактировать скрипты - явно указывать префикс `python2`:
```
$ python2 *мой_скрипт.py*
```
Но бывают ситуации, в которых у вас нет возможности контролировать поведение скриптов. В этом случае можно попробовать обмануть окружение. Правда, такой трюк сработает, только если в скрипте прописано `#!/usr/bin/env python`: в случае с `#!/usr/bin/python` ничего не получится. Все это возможно благодаря указанию `env`, ищущему первое подходящее совпадение в переменной `PATH`.
Итак, для начала создайте необходимый каталог:
```
$ mkdir ~/bin
```
Затем создайте символьную ссылку `python`, указывающую на *python2*, и еще одну для конфигурационных скриптов:
```
$ ln -s /usr/bin/python2 ~/bin/python
$ ln -s /usr/bin/python2-config ~/bin/python-config
```
Наконец, добавьте ваш вновь созданный каталог *в начало* значения вашей переменной `PATH`:
```
$ export PATH=~/bin:$PATH
```
**Примечание:** Изменение [переменных окружения](/index.php/Environment_variables_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Environment variables (Русский)") подобным образом не является долговременным и действует только в текущем сеансе терминала
Чтобы узнать, какая версия интерпретатора python будет использоваться, введите следующую команду:
```
$ which python
```
Еще один способ обмана окружения, который также основан на вызове `#!/usr/bin/env python` - использовать [#Виртуальное окружение](#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B5_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5).
### Старые версии
**Важно:** Все версии Python вплоть до 2.7 и 3.4 не получали никаких обновлений, в том числе обновлений безопасности, как минимум с 2014 г. Использование этих версий для работы приложений с непроверенным кодом или имеющих отношение к интернету может быть весьма опасным и не рекомендуется
Устаревшие версии Python доступны в [AUR](/index.php/Arch_User_Repository_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch User Repository (Русский)") и могут быть полезны, если вас одолевает историческое любопытство, если старые приложения не запускаются, или если вам необходимо протестировать свои программы на возможность работы в дистрибутивах, в которых используются старые версии интерпретатора (например, в RHEL 5.x это Python 2.4, а в Ubuntu 12.04 это Python 3.2):
* Python 3.5: [python35](https://aur.archlinux.org/packages/python35/)
* Python 3.4: [python34](https://aur.archlinux.org/packages/python34/)
* Python 2.6: [python26](https://aur.archlinux.org/packages/python26/)
* Python 2.5: [python25](https://aur.archlinux.org/packages/python25/)
* Python 1.5: [python15](https://aur.archlinux.org/packages/python15/)
Дополнительные модули/библиотеки для старых версий Python можно найти в AUR по слову "python" с указанием версии без точки. Например, введите "python26" для поиска модулей версии 2.6.
## Управление пакетами
Огромное количество пакетов Python доступно в [официальных репозиториях](/index.php/Official_repositories_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Official repositories (Русский)") и в [AUR](/index.php/Arch_User_Repository_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch User Repository (Русский)"), однако экосистема Python предоставляет свои собственные пакетные менеджеры, работающие с [PyPI](https://pypi.python.org/) (Python Package Index):
* **pip** — PyPA, инструмент установки пакетов Python
[https://pip.pypa.io/](https://pip.pypa.io/) || [python-pip](https://www.archlinux.org/packages/?name=python-pip), [python2-pip](https://www.archlinux.org/packages/?name=python2-pip)
* **setuptools** — с легкостью скачивайте, собирайте, устанавливайте, обновляйте и удаляйте пакеты Python
[https://setuptools.readthedocs.io/](https://setuptools.readthedocs.io/) || [python-setuptools](https://www.archlinux.org/packages/?name=python-setuptools), [python2-setuptools](https://www.archlinux.org/packages/?name=python2-setuptools)
Для просмотра краткой истории и сравнения этих двух утилит, обратитесь к странице [pip vs easy_install](https://packaging.python.org/pip_easy_install/#pip-vs-easy-install). Общепризнанные лучшие практики управления пакетами Python описаны [здесь](https://packaging.python.org/).
Если вы собираетесь использовать *pip*, используйте его в [виртуальном окружении](#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B5_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5) или с опцией `--user` (`pip install --user`), чтобы избежать конфликтов между пакетами в каталоге `/usr`. Во всех случаях предпочтительный способ установки программного обеспечения - это [использование pacman](/index.php/System_maintenance_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D0.B9.D1.82.D0.B5_.D0.BC.D0.B5.D0.BD.D0.B5.D0.B4.D0.B6.D0.B5.D1.80_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2_.D0.B4.D0.BB.D1.8F_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B8_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BE.D0.B1.D0.B5.D1.81.D0.BF.D0.B5.D1.87.D0.B5.D0.BD.D0.B8.D1.8F "System maintenance (Русский)").
**Примечание:** Существуют инструменты, автоматически генерирующие PKGBUILDы для пакетов *pip* и таким образом интегрирующие его в *pacman*: [pipman-git](https://aur.archlinux.org/packages/pipman-git/), [pip2arch-git](https://aur.archlinux.org/packages/pip2arch-git/)
## Привязки к графическим библиотекам
Доступны следующие привязки к [библиотекам графических элементов](https://en.wikipedia.org/wiki/widget_toolkit "wikipedia:widget toolkit"):
* **TkInter** — привязки к Tk
[https://wiki.python.org/moin/TkInter](https://wiki.python.org/moin/TkInter) || стандартный модуль
* **pyQt** — привязки к [Qt](/index.php/Qt_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Qt (Русский)")
[https://riverbankcomputing.com/software/pyqt/intro](https://riverbankcomputing.com/software/pyqt/intro) || [python2-pyqt4](https://www.archlinux.org/packages/?name=python2-pyqt4) [python2-pyqt5](https://www.archlinux.org/packages/?name=python2-pyqt5) [python-pyqt4](https://www.archlinux.org/packages/?name=python-pyqt4) [python-pyqt5](https://www.archlinux.org/packages/?name=python-pyqt5)
* **pySide** — привязки к [Qt](/index.php/Qt_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Qt (Русский)")
[https://wiki.qt.io/PySide](https://wiki.qt.io/PySide) || [python2-pyside](https://www.archlinux.org/packages/?name=python2-pyside) [python-pyside](https://www.archlinux.org/packages/?name=python-pyside)
* **pyGTK** — привязки к [GTK+ 2](/index.php/GTK%2B_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "GTK+ (Русский)")
[http://www.pygtk.org/](http://www.pygtk.org/) || [pygtk](https://www.archlinux.org/packages/?name=pygtk)
* **PyGObject** — привязки к [GTK+ 2/3](/index.php/GTK%2B_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "GTK+ (Русский)") при помощи GObject Introspection
[https://wiki.gnome.org/PyGObject_ru](https://wiki.gnome.org/PyGObject_ru) || [python2-gobject2](https://www.archlinux.org/packages/?name=python2-gobject2) [python2-gobject](https://www.archlinux.org/packages/?name=python2-gobject) [python-gobject2](https://www.archlinux.org/packages/?name=python-gobject2) [python-gobject](https://www.archlinux.org/packages/?name=python-gobject)
* **wxPython** — привязки к wxWidgets
[https://wxpython.org/](https://wxpython.org/) || [wxpython](https://www.archlinux.org/packages/?name=wxpython)
Для использования этих привязок в Python, скорее всего, потребуется доустановить соответствующие наборы библиотек.
## Советы и рекомендации
### IPython
[IPython](http://ipython.org/) - это расширенная командная строка Python, доступная в официальных репозиториях в пакетах [ipython](https://www.archlinux.org/packages/?name=ipython) и [ipython2](https://www.archlinux.org/packages/?name=ipython2). Если вы хотите использовать IPython notebook, установите пакет [jupyter-notebook](https://www.archlinux.org/packages/?name=jupyter-notebook) для IPython3 или [ipython2-notebook](https://www.archlinux.org/packages/?name=ipython2-notebook) для IPython2\. Затем выполните:
```
$ jupyter notebook
```
чтобы запустить браузер, а в нем - ядро IPython. Вы можете выбрать версию *python* при создании notebook в браузере.
[bpython](https://bpython-interpreter.org/) - интерфейс ncurses для интерпретатора Python, доступный в официальных репозиториях в пакетах [bpython](https://www.archlinux.org/packages/?name=bpython) и [bpython2](https://www.archlinux.org/packages/?name=bpython2).
### Виртуальное окружение
Python предоставляет инструменты для создания изолированных окружений, в которых вы можете устанавливать пакеты, не влияя и никак не взаимодействуя ни на другие виртуальные окружения, ни на системные пакеты Python. Таким образом, в частности, можно изменить интерпретатор *python* для конкретного приложения.
Для получения дополнительной информации смотрите статью [Python/Virtual environment](/index.php/Python/Virtual_environment "Python/Virtual environment").
### Включение автодополнения в оболочке Python2
Начиная с версии Python 3.4, [автодополнение по клавише Tab](https://docs.python.org/3/tutorial/interactive.html) включено по умолчанию. Для Python 2 вы можете включить его самостоятельно, добавив следующие строки в файл, к которому обращается переменная окружения `PYTHONSTARTUP`: [[1]](https://algorithmicallyrandom.blogspot.co.at/2009/09/tab-completion-in-python-shell-how-to.html)
```
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
```
## Решение проблем
### Проблемы с версией Python в скриптах сборки
Сборочные скрипты многих проектов предполагают, что `python` обращается к Python 2, и в конце концов это может привести к ошибке, обычно гласящей, что `print 'foo'` - неправильный синтаксис. К счастью, многие из них вызывают *python* через переменную окружения `PATH`, а не содержат в себе жестко прописанный `#!/usr/bin/python`. Благодаря этому, вместо редактирования установочных скриптов, вы можете создать файл `/usr/local/bin/python` с содержимым наподобие этого:
`/usr/local/bin/python`
```
#!/bin/bash
script=$(readlink -f -- "$1")
case "$script" in (/путь/к/проекту1/*|/путь/к/проекту2/*|/путь/к/проекту3*)
exec python2 "$@"
;;
esac
exec python3 "$@"
```
Где `/путь/к/проекту1/*|/путь/к/проекту2/*|/путь/к/проекту3*` - список шаблонов, разделенных символом `|` и соответствующих всем веткам проекта.
Не забудьте сделать файл [исполняемым](/index.php/Help:Reading#Make_executable "Help:Reading"). После этого соответствующие скрипты будут запускаться через Python 2.
## Смотрите также
* [O'Reilly's Learning Python, пятое издание](http://shop.oreilly.com/product/0636920028154.do) коммерческое
* [Dive Into Python](http://www.diveintopython.net/), [Dive Into Python3](http://getpython3.com/diveintopython3/)
* [A Byte of Python](https://python.swaroopch.com/)
* [Learn Python the Hard Way](https://learnpythonthehardway.org/)
* [Learn Python](https://learnpython.org/)
* [Crash into Python](https://stephensugden.com/crash_into_python/) (предполагает владение другими языками программирования)
* [Beginning Game Development with Python and Pygame](https://www.apress.com/book/9781590598726) коммерческое
* [Think Python](http://www.greenteapress.com/thinkpython/)
* [Pythonspot](https://pythonspot.com)