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
За да проверите кой 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.
- Съществуват и още имплементации, въпреки че повечето вече не се поддържат заради подобренията в по-известните имплементации.
Стари версии
Стари версии на Python има в AUR и могат да бъдат от полза за проследяването на развитието на езика, стари приложения, които не вървят на новите версии на езика, или за тестването на Python програми, предназначени за изпълнение в среда, която разполага с по-стара версия на Python:
- Python 3.6: python36AUR
- Python 3.5: python35AUR
- Python 3.4: python34AUR
- Python 2.6: python26AUR[broken link: package not found]
- Python 2.5: python25AUR
- Python 1.5: python15AUR[broken link: package not found]
Допълнителни модули/библиотеки за старите версии на 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 — Лесно теглене, билдване, инсталиране, актуализиране и деинсталиране на пакети.
За кратко сравнение между двете, посетете pip vs easy_install. Добри практики за управлението на Python пакети са разгледани тук.
Ако се налага да използвате pip, използвайте виртуална среда, или pip install --user
, за да избегнете конфликти с пакети, намиращи се в /usr
. Винаги е за предпочитане да използвате pacman за инсталиране на софтуер.
Widget bindings
The following widget toolkit bindings are available:
- TkInter — Tk bindings
- https://wiki.python.org/moin/TkInter || standard module
- pyQt — Qt bindings
- https://riverbankcomputing.com/software/pyqt/intro || python2-pyqt4AUR python2-pyqt5[broken link: package not found] python-pyqt4AUR python-pyqt5
- pySide2 — Qt bindings
- pyGTK — GTK+ 2 bindings
- http://www.pygtk.org/ || pygtkAUR
- PyGObject — GTK+ 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
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.
- IPython — Enhanced interactive Python shell.
- Jupyter Notebook — Web interface to IPython.
- 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
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
- 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[dead link 2021-11-15 ⓘ]
- OverIQ Python Tutorial
- Python Tutorial to Learn 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.