Python (Български)

From ArchWiki
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.

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: Some parts are not translated, abandoned since 2019 (Discuss in Talk:Python (Български))

От Уикипедия:

Python е интерпретируем, интерактивен, обектно-ориентиран език за програмиране, създаден от Гуидо ван Росум в началото на 90-те години. Кръстен е на телевизионното шоу на BBC „Monty Python’s Flying Circus“. Често бива сравняван с Tcl, Perl, Scheme, Java и Ruby.

Инсталиране

Python 3

Python 3 е последната версия на езика и тя е несъвместима с Python 2. Като цяло, езикът е същият, но много детайли, включително това как работят вградените обекти като речници и стрингове, са променени значително и много от остарелите характеристики на езика са най-сетне изтрити. Също така, стандартната библиотека е разделена на няколко важни части. Посетете Python2orPython3 и съответно тази глава в Dive into Python 3 книгата за общ преглед на разликите между двете версии.

За да инсталирате последната версия на Python 3, инсталирайте python пакета.

Ако искате да компилирате последното RC или бета от изходния код, посетете Изтегляне на Python. Arch User Repository също съдържа добри PKGBUILD-ове. Ако не компилирате от изходен код, тогава по подразбиране бинарният пакет се инсталира в /usr/local/bin/python3.x.

Python 2

За да инсталирате последната версия на Python 2, инсталирайте python2 пакета.

Не е проблем да имате инсталирани и двете версии на Python. Тази версия се изпълнява от python2 командата.

Всяка програма, работеща с Python 2 трябва да използва /usr/bin/python2 вместо /usr/bin/python, което е свързано с Python 3. За да го настроите, отворете програмата (или скрипта) в любимия си текстов редактор и променете първия ред. Той ще изглежда подобно на:

#!/usr/bin/env python

или

#!/usr/bin/python

И в двата случая просто променете python на python2 и програмата ще използва Python 2 вместо Python 3.

Друг начин за налагането на python2 над програмата, без да се променя тя, е изричното ѝ извикване с python2:

$ python2 myScript.py

В случай, че нямате контрол над извикването на програмата, съществува начин за подлъгването на средата, в която се изпълнява. Работи само ако програмата използва #!/usr/bin/env python. Няма да проработи с #!/usr/bin/python. Подлъгването се състои в търсенето на env за съответния запис в PATH системната променлива.

Първо си създайте примерна папка:

$ mkdir ~/bin

След това добавете символична връзка (symlink) python към python2 и конфигурационните скриптове в папката:

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

Най-накрая добавете новата папка в началото на вашата PATH системна променлива:

$ export PATH=~/bin:$PATH
Note: Този метод на променяне на системни променливи не е постоянен и е валиден само за текущата терминална сесия.

За да проверите кой python интерпретатор се използва от env, използвайте следната команда:

$ which python

Подобен подход за подлъгване на средата, който също зависи от това #!/usr/bin/env python да бъден извикан от изпълняващата програма, е да се използва виртуална среда (virtual environment).

Други имплементации

Python може да се разглежда като спецификация за програмен език, която може да бъде имплементирана по много различни начини. Горните раздели са свързани с референтната имплементация на Python (имплементацията по подразбиране), наречена CPython. Някои други известни имплементации са:

  • PyPy е Python 2.7/3.5 имплементация, използваща JIT компилатор. Тя е по-бърза и използва по-малко памет, но не е напълно съвместима с CPython (макар че повечето код и пакети ще работят без необходима промяна).
  • Jython е Python 2.7 имплементация, написана на Java. Тя позволява лесно интегриране на Python и Java код, но също не е напълно съвместима с всички CPython библиотеки. Често се използва, за да позволи използването на Python като скриптов език в по-големи Java приложения.
  • IronPython е Python 2.7 имплементация, написана на .NET - тя е много подобна на Jython, но е съвместима с езици, които работят върху .NET платформата(като C#/VB).
  • MicroPython е ограничена Python 3.4 имплементация, насочена към микроконтролери и други вградени системи (като UEFI), като е несъвместима с повечето стандартни пакети заради малки промени в синтаксиса и много ограничена стандартна библиотека. Често се използва за прототипиране във вградените системи, тъй като осигурява Python REPL.
  • Съществуват и още имплементации, въпреки че повечето вече не се поддържат заради подобренията в по-известните имплементации.

Стари версии

Warning: Версии на Python, по-стари от 2.7 и съответно 3.4, не са получавали актуализации—включително пачове за сигурност—от поне 2014 година. Използването на по-стари версии за интернет-ориентирани приложения или за несигурен/непроверяван код може да бъде опасно и не се препоръчва.

Стари версии на Python има в AUR и могат да бъдат от полза за проследяването на развитието на езика, стари приложения, които не вървят на новите версии на езика, или за тестването на Python програми, предназначени за изпълнение в среда, която разполага с по-стара версия на Python:

Допълнителни модули/библиотеки за старите версии на Python могат да бъдат намерени в AUR, като търсите python<версия без разделителна точка>, примерно "python26" за 2.6 модули.

Управление на Python пакети

Въпреки че много Python пакети са вече достъпни в официалните репозиторита и AUR, екосистемата на Python осигурява собствени мениджъри на пакети за работа с PyPI - репозитори съдържащо хиляди Python пакети:

  • pip — PyPA инструмент за инсталиране на пакети.
https://pip.pypa.io/ || python-pip, python2-pip[broken link: package not found]
  • setuptools — Лесно теглене, билдване, инсталиране, актуализиране и деинсталиране на пакети.
https://setuptools.readthedocs.io/ || python-setuptools, python2-setuptools

За кратко сравнение между двете, посетете pip vs easy_install. Добри практики за управлението на Python пакети са разгледани тук.

Ако се налага да използвате pip, използвайте виртуална среда, или pip install --user, за да избегнете конфликти с пакети, намиращи се в /usr. Винаги е за предпочитане да използвате pacman за инсталиране на софтуер.

Note: Съществуват инструменти за интегриране на pip с pacman чрез автоматично генериране на PKGBUILD-ове за съответните pip пакети: вижте Creating packages#PKGBUILD generators.
Tip: pipenv[dead link 2021-11-15 ⓘ] осигурява единичен конзолен интерфейс за Pipfile, pip и virtualenv. Достъпен е като python-pipenv и python2-pipenv[broken link: package not found].

Widget bindings

The following widget toolkit bindings are available:

  • TkInter — Tk bindings
https://wiki.python.org/moin/TkInter || standard module
  • pyQtQt bindings
https://riverbankcomputing.com/software/pyqt/intro || python2-pyqt4AUR python2-pyqt5[broken link: package not found] python-pyqt4AUR python-pyqt5
  • pySide2Qt bindings
https://wiki.qt.io/PySide2 || pyside2 pyside2-tools
http://www.pygtk.org/ || pygtkAUR
  • PyGObjectGTK+ 2/3 bindings via GObject Introspection
https://wiki.gnome.org/PyGObject/ || python2-gobject2AUR python2-gobject python-gobject2[broken link: package not found] python-gobject
  • wxPython — wxWidgets bindings
https://wxpython.org/ || python2-wxpython3 python-wxpython

To use these with Python, you may need to install the associated widget kits.

Tips and tricks

Alternative shells

  • bpython — Fancy interface for the Python interpreter.
https://bpython-interpreter.org/ || bpython bpython2AUR
  • IPython — Enhanced interactive Python shell.
https://ipython.org/ || ipython ipython2AUR
  • Jupyter Notebook — Web interface to IPython.
https://jupyter.org/ || jupyter-notebook
  • ptpython — Fancy interface for the Python interpreter based on prompt-toolkit input interface.
https://github.com/jonathanslenders/ptpython || ptpythonAUR ptpython2AUR[broken link: package not found]

Virtual environment

Python provides tools to create isolated environments in which you can install packages without interfering with the other virtual environments nor with the system Python's packages. It could change the python interpreter used for a specific application.

See Python/Virtual environment for details.

Tab completion in Python shell

Since Python 3.4 tab completion is enabled by default, for Python 2 you can manually enable it by adding the following lines to a file referenced by the PYTHONSTARTUP environment variable: [1]

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

Note that readline completer will only complete names in the global namespace. You can rely on python-jedi and/or python2-jediAUR for a more richer tab completion experience [2].

Troubleshooting

Dealing with version problem in build scripts

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: This is an ugly hack, instead explain how to recursively fix shebangs with find and sed. (Discuss in Talk:Python (Български))

Many projects' build scripts assume python to be Python 2, and that would eventually result in an error — typically complaining that print 'foo' is invalid syntax. Luckily, many of them call python from the PATH environment variable instead of hardcoding #!/usr/bin/python in the shebang line, and the Python scripts are all contained within the project tree. So, instead of modifying the build scripts manually, there is a workaround. Create /usr/local/bin/python with content like this:

/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 "$@"

Where /path/to/project1/*|/path/to/project2/*|/path/to/project3* is a list of patterns separated by | matching all project trees. For some scripts, the path may not be the first parameter, for example Google SDK it sends "-S" as the first parameter. The readlink command should change to script=$(readlink -f -- "$1").

Do not forget to make it executable. Afterwards scripts within the specified project trees will be run with Python 2.

See also