# 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.

This article or section needs to be translated.

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

Related articles

- Python package guidelines
- Python/Virtual environment
- mod_wsgi
- Django

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

  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 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

- 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 осигурява единичен конзолен интерфейс за 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

- 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

  https://wiki.qt.io/PySide2 || pyside2 pyside2-tools

- 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

  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

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

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

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

Category:

- Programming languages (Български)

Hidden categories:

- Pages or sections flagged with Template:Translateme
- Pages with broken package links
- Pages or sections flagged with Template:Style