September 23, 2012

Установка питона и пакетов

В этой статье я попытаюсь описать процесс создания готового python окружения и работу с пакетами на пользовательском уровне. Статья расcчитана на новичков (в основном для студентов, слушающих мои курсы).

Задачи обычно возникающие при установки питона и его пакетов:

  • Выбор дистрибутив питона и его установка
  • Выбор IDE
  • Поиск и установка пакетов

Кроме этого я пробегусь по этим полезным вещам:


Выбор дистрибутив питона и его установка

Если вы используете linux, то лучше использовать python идущий в пакетах - как правило это немного измененный cpython. Для windows можно выбирать между стандартным питоном и дистрибутивом от Active State. Последний содержит расширенную документацию и некоторые дополнительные библиотеки. Мы не будем рассматривать PyPy/Stackless/etc - ограничимся только CPython. Дальше нужно сделать выбор между двумя ветками - 3.2/3.3 и 2.7. Пока что с 2.7 у вас будет меньше проблем, но третья версия по поддержке уже подбирается достаточно близко. x86 и amd64 версии выбираем по вкусу. Установка и под windows и совершенно стандартна и не должна вызывать проблем. В linux питон уже почти 100% установлен.


Выбор IDE

Динамический характер языка делает написание функциональных IDE достаточно сложным, а высокая компактность кода и pythonic подход заметно уменьшает в них необходимость. Так что не сложные проекты можно делать в продвинутых текстовых редакторах - [notepad++], sublime text (или vim/emacs). Хотя новичкам IDE будут оказывать заметную помошь встроенной подсказкой и каким ни каким статическим анализом. Из IDE я бы выделил eclipse + pydev и платные PyCharm и KomodoIDE. Также есть Python tools for VS, которые добавляет поддержку cpython и ironpython в VS2010/VS2012.

Я бы советовал выбирать между sublime text и eclipse + pydev.


Поиск и установка пакетов

Пакеты/модули в python это файлы с расширениями py/pyc/pyo/(pyd или so), или директории с такими файлами. Также весь пакет может быть в одном архиве (только если пакет не содержит pyd/so файлы). По умолчанию пакеты устанавливаются в системную папку - PYTHON_ROOT\lib\site-packages для windows и /usr/local/lib/pythonXX/dist-packages для ubuntu (XX - версия питона, PYTHON_ROOT - корневая папка установки python, как правило С:\PythonXX)

Если вы используете linux, то можно использовать пакеты из дистрибутива - в Ubuntu/Fedora есть практически все. Иначе искать пакеты в основном стоит на pypi или с помощью google. Пакеты могут быть в трех основных форматах: архив, exe/msi, egg.

Архив нужно распаковать, в корневой папке должен быть файл setup.py. Если его там нет, то можно просто скопировать содержимое архива в директорию с пакетами. Если setup.py есть, то нужно выполнить python setup.py install. При этом следует использовать тот интерпретатор питона, в который вы хотите установить пакет. Если пакет не предоставляет модулей написанных на С/С++, то установка должна пройти без особенных проблем. Иначе python будет пытаться собрать компилируемые расширения. В linux такой процесс проходит чаще всего безболезненно (максимум требуется установка пакетов с заголовочными файлами для для используемых C библиотек), а вот в windows путь компиляции может быть достаточно трудным.

При установке в windows проще использовать уже собранный exe/msi файл. Для большинства пакетов они доступны на pypi или на сайте библиотеки, также много бинарных пакетов можно найти на pythonlibs. При загрузке обратите внимание на архитектуру и версию python. Для установки такие пакеты нужно запустить. Библиотеки не содержащие компилируемого кода уставливаются без проблем на обеих системах.

egg это формат пакетов одного из пакетные менеджеров питона - setuptools. Грубо говоря это zip архив с дополнительной информацией о пакете и его зависимостях. Более новой и активно развиваемой альтернативой setuptools является pip. pip использует код setuptools(или distribute) и не поддерживает egg. Оба этих менеджера умеют находить пакеты по имени на pypi, по URL и локально. Поддерживаются разнообразные форматы архивов и автоматическая установка зависимостей. pip умеет деинсталлировать пакеты и поддерживает установку из svn/git/mercurial.

Установка pip - www.pip-installer.org/en/latest/installing.html

Установка setuptools

Оба этих менеджера предоставляют команду easy_install, pip кроме этого предоставляет команду pip.

Использование (примеры команд без их вывода):

Без подсветки синтаксиса
# pip install pylint # установим pylint
# easy_install install -U pylint # обновить пакет
# pip install --upgrade simplejson
# pip uninstall simplejson # удалить
# pip install http://my.package.repo/SomePackage-1.0.4.zip
# pip install git+https://github.com/simplejson/simplejson.git
# pip install svn+svn://svn.zope.org/repos/main/zope.interface/trunk/

virtualenv

virtualenv позволяет делать на одной машине несколько независимых инсталляций python, каждая из которых имеет свой интерпретатор, набор настроек и библиотек. Некоторые из таких окружений могут использовать системную папку с дополнительными пакетами. Кроме этого virtualenv позволяет устанавливать питон и пакеты пользователям без прав root.

Без подсветки синтаксиса
$ sudo pip install virtualenv # или sudo apt-get install python-virtualenv
$ virtualenv --distribute ENV_NAME # или python virtualenv.py --distribute ENV_NAME

--distribute заставить virtualenv установить distribute вместо setuptools.

Эта команда создаст папку ENV_NAME внутри которой будет интерпретатор python ENV_NAME/bin/python и каталог для пакетов ENV_NAME/lib/pythonX.X/site-packages. ENV_NAME/bin/python будет настроен на поиск пакетов в ENV_NAME/lib/pythonX.X/site-packages. Также virtualenv устанавливает в новое окружение pip. Что-бы активировать это окружений нужно исполнить скрипт activate.

Без подсветки синтаксиса
$ source ENV_NAME/bin/activate
> ENV_NAME\Scripts\activate # для windows

Теперь команда python будет приводить к запуску питона из ENV_NAME/bin/python, то же относится и к pip. После окончания работы нужно выполнить deactivate. virtualenv включили в стандартную библиотеку начиная с python3.3


lint'ы

Линтами называют средства статического анализа по имени первой такой утилиты, которая находила странно написанные участки C кода, потенциально содержащие ошибки. Из-за динамического характера python сделать для него очень хороший линт невозможно, а даже просто хороший очень сложно. Ошибки при которых С программа даже не скомпилируется могут легко загнать в угол python линты. Но тем не менее значительную часть (а у начинающих - практически все) ошибок/опечаток они найдут.

Три основных lint'а для python это pylint, pychecker и pyflakes. Из них pylint, наверное, наиболее сообразительный. Кроме этого он имеет большое количество настроек, которые позволяют изменить особенности проверок. Также pylint проверяет стиль кода, используя шаблоны из конфигурационного файла и собирает полезную статистику. Плюс большая часть IDE и даже sublime имеют интеграцию с pylint.

По умолчанию pylint слишком требовательный так что начинать его использование стоит с подстройки конфига под себя, кроме этого иногда он дает ложные срабатывания.

Как более легкую альтернативу можно использовать pep8, проверяющий код на соответствие основному python стандарту кодирования.


ipython

Чуть подробнее о установке ipython. Под linux с правами root все просто (ubuntu):

Без подсветки синтаксиса
$ sudo apt-get install ipython ipython-doc ipython-notebook ipython-qtconsole python-zmq

или

Без подсветки синтаксиса
$ sudo apt-get install --install-suggests ipython

ipython готов к запуску -

Без подсветки синтаксиса
$ ipython qtconsole # GUI консоль
$ ipython notebook  # Web интерфейс
$ ipython # консольный интерфейс

Под windows все не так просто - нужно загрузить все пакеты и зависимости вручную и установить их. pip поможет не сильно, поскольку большая часть пакетов С расширения с внешними зависимости и собирать их будет лишней сложностью. Зависимости ipython (поскольку мы не будем использовать pip то их придется выяснять и устанавливать самостоятельно) можно определить двумя способами - найти в документации по установке или пытаться запускать ipython и смотреть на ошибки импорта. Из документации находим зависимости:

  • pyqt или pyside
  • pyzmq
  • tornado
  • pygments
  • pyreadline
  • distribute или setuptools

Бинарные версии всех этих пакетов есть в pythonlibs. Загружаем и ставим в любом порядке. После чего выбираем из:

Без подсветки синтаксиса
> С:\Python2.7\Scripts\ipython.bat qtconsole # GUI консоль
> С:\Python2.7\Scripts\ipython.bat notebook # Web интерфейс
> С:\Python2.7\Scripts\ipython.bat # консольный интерфейс

pythonanywhere.com

Если поставить питон совсем никак нельзя, то можно воспользоваться web консолью на указанном сайте. После регистрации можно бесплатно запустить 2 python/ipython консоли в браузере и пробовать python без установки.

Ссылки:
          pypi.python.org/pypi/virtualenv
          www.python.org/download
          www.activestate.com/activepython/downloads
          pypi.python.org/pypi
          www.lfd.uci.edu/~gohlke/pythonlibs
          www.pip-installer.org/en/latest/index.html
          ipython.org/ipython-doc/stable/install/install.html
          pychecker.sourceforge.net
          pytools.codeplex.com
          launchpad.net/pyflakes
          www.python.org/dev/peps/pep-0008
          pypi.python.org/pypi/pylint
          pypi.python.org/pypi/pep8
          www.jetbrains.com/pycharm
          pydev.org
          pypi.python.org/pypi/setuptools
          www.sublimetext.com
          www.activestate.com/komodo-ide
          pythonanywhere.com

Исходники этого и других постов со скриптами лежат тут - github.com/koder-ua. При использовании их, пожалуйста, ссылайтесь на koder-ua.blogspot.com.

14 comments:

Hope Vignesh said...

Well done,its a great knowledge. Great blog here with all of the valuable information you have.

Python Training Centres in Chennai
Python Training in Chennai

gowsalya saranya said...

Existing without the answers to the difficulties you’ve sorted out through this guide is a critical case, as well as the kind which could have badly affected my entire career if I had not discovered your website.
Digital Marketing Training in Chennai

Aws Training in Chennai

Selenium Training in Chennai

johnsy sai said...

Thanks a lot very much for the high quality and results-oriented help. I won’t think twice to endorse your blog post to anybody who wants and needs support about this area.
Digital Marketing Training in Bangalore

digital marketing training in tambaram

digital marketing training in annanagar

digital marketing training in marathahalli

digital marketing training in rajajinagar

Digital Marketing online training

amala said...

Thanks for the informative article. This is one of the best resources I have found in quite some time. Nicely written and great info. I really cannot thank you enough for sharing.

rpa Training in Chennai

rpa Training in bangalore

rpa Training in pune

blueprism Training in Chennai

blueprism Training in bangalore

blueprism Training in pune

rpa online training

Mouni yoga said...

After reading this web site I am very satisfied simply because this site is providing comprehensive knowledge for you to audience. Thank you to the perform as well as discuss anything incredibly important in my opinion. We loose time waiting for your next article writing in addition to I beg one to get back to pay a visit to our website in
python training institute in chennai
python training in Bangalore
python training institute in chennai

nivatha said...

Wonderful article, very useful and well explanation. Your post is extremely incredible. I will refer this to my candidates...

Data Science Training in Chennai
Data science training in bangalore
Data science online training
Data science training in pune
Data science training in kalyan nagar
selenium training in chennai

simbu said...

Well somehow I got to read lots of articles on your blog. It’s amazing how interesting it is for me to visit you very often.
java training in marathahalli | java training in btm layout

java training in jayanagar | java training in electronic city

java training in chennai | java training in USA

selenium training in chennai

geetha sridhar said...

Some us know all relating to the compelling medium you present powerful steps on this blog and therefore strongly encourage contribution from other ones on this subject while our own child is truly discovering a great deal. Have fun with the remaining portion of the year.
Data Science training in rajaji nagar
Data Science training in chennai
Data Science training in electronic city
Data Science training in USA
Data science training in pune
Data science training in kalyan nagar

Mouni yoga said...

All are saying the same thing repeatedly, but in your blog I had a chance to get some useful and unique information, I love your writing style very much, I would like to suggest your blog in my dude circle, so keep on updates.
python training in pune
python online training
python training in OMR

shethal said...

Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
Devops training in tambaram
DevOps online Training
DevOps Training in USA

ummayasri said...

I know you feel more happy when you get things done and best of all those things are your most precious treasure.
Blue Prism Training Course in Pune

Blue Prism Training Institute in Bangalore

Deepika Analy said...

Great work. Quite a useful post, I learned some new points here.I wish you luck as you continue to follow that passion.

Cloud Training
Cloud Training in Chennai

sudhagar raja said...

I found your blog while searching for the updates, I am happy to be here. Very useful content and also easily understandable providing.. Believe me I did wrote an post about tutorials for beginners with reference of your blog. 
java training in chennai

java training in marathahalli | java training in btm layout

chitra pragya said...

Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
angularjs-Training in sholinganallur

angularjs-Training in velachery

angularjs Training in bangalore

angularjs Training in bangalore

angularjs Training in btm