пятница, 13 июля 2012 г.

Python 101: easy_install или как создавать яйца (eggs) (Перевод)


Сегодня мы посмотрим противоречивый метод установки модулей и пакетов Python - easy_install. Мы так же узнаем как создавать собственные файлы *.egg. Для этого Вам понадобится пакет SetupTools. Этот пакет не поддерживает Python 3.x, так что если Вы работаете в третьей версии - смотрите в сторону pip или distribute. Про каждый из этих проектов я ещё напишу. Теперь давайте же начнём с SetupTools и easy_install.
SetupTools - это основной метод загрузки и установки пакетов Python с PyPI и других источников при помощи командной строки, что-то вроде apt-get для Python. Когда Вы установите SetupTools, заодно устанавливается скрипт или exe файл с названием easy_install, который Вы можете использовать для установки и обновления пакетов. Он так же позволяет Вам создавать eggs. Давайте потратим немного времени для знакомства с этой утилитой.

Использование easy_install для установки пакетов

После того, как Вы установили SetupTools, Вы можете использовать easy_install в вашей командной строке.  Вот пример:
easy_install sqlalchemy
Этот скрипт обратится к PyPI и попробует загрузить последнюю версию SQLAlchemy оттуда, куда указывает PyPI пакет. Скрипт easy_install ещё и установит этот пакет. Но есть одна проблема, которая иногда встречается - easy_install может попробовать начать установку ещё до того, как завершится его загрузка, что может повредить установку.  Но зато если Вы настроите ваш файл setup.py правильно, но заодно может скачать и установить все зависимости для этого пакета. Так что если Вы устанавливаете что-то сложное, типа TurboGears, он установит для Вас ещё кучу других пакетов. Это одна из причин, по которой Вы можете захотеть использовать virtualenv, в котором Вы сможете убедиться, что скачанные пакеты Вам нужны и работают как и надо. Если же окажется, что это не так - Вы сможете просто удалить папке virtualenv. Иначе Вам потребовалось бы лезть в папку Python и копаться в поисках новых пакетов и пытаться самому их удалить. Кроме того, easy_install после установки яиц добавляет яйца в файл easy_install.pth в папке site-packages, так что когда Вы их удаляете, Вам надо будет так же почистить этот файл. К счастью, Вы можете использовать pip для удаления этих яиц, если Вам не хочется делать это самому. Есть, конечно, команда -uninstall (-u), но я слышал разные отзывы про её работу.
Вы можете установить пакет так же передав напрямую easy_install url пакета.  Другая прикольная фишка в том, что Вы можете сообщить easy_install версию пакета, которая Вам нужна, и он попробует установить именно её. Наконец, easy_install может провести установку из яйца или исходников. Для просмотра полного списка доступных команд смотрите документацию.

Создаём яйцо

Файлы egg - это формат распространения для пакетов Python. Это ещё одна альтернатива распространению пакетов при помощи исходников или двоичных файлов Windows, при этом важно понимать, что egg-файл является полностью кроссплатформенным. Мы посмотрим на то, как создаются яйца, используя пакет, который мы создали в предыдущем руководстве. Создадим новую папку и поместим в неё нашу папку mymath. Затем создадим файл setup.py в этой новой папке:
from setuptools import setup, find_packages
 
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )
Обратите внимание, что вместо того, чтобы использовать функцию setup пакета distutils, мы используем setup пакета setuptools. Кроме того, мы используем функцию find_packages, которая автоматически находит все пакеты в текущей папке и добавляет их в яйцо. Для создания яйца Вам понадобится такая команда:
python setup.py bdist_egg
Вы получите в ответ много букаф, но в конце концов Вы увидите, что появилось три новых папки - build, dist и mymath.egg-info. Единственная папка, которая нас интересует - dist, в которой Вы найдёте наше яйцо - mymath-0.1-py2.6.egg. Обратите внимание, что на моём компьютере, поскольку я использую версию Python 2.6 - яйцо было создано именно для этой версии. Само яйцо по сути является zip файлом. Если Вы измените его расширение на zip, то сможете заглянуть внутрь и увидеть, что он содержит две папки - mymath и EGG-INFO. На данный момент у Вас должна быть возможность "натравить" easy_install на ваше яйцо и установить его.
Если Вы хотите, Вы можете так же использовать easy_install для выгрузки вашего яйца или исходников напрямую в Python Package Index (PyPI) используя следующие команды (скопировано из документации):
setup.py bdist_egg upload # создаём яйцо и выгружаем его
setup.py sdist upload # создаём дистрибутив исходников и выгружаем его
setup.py sdist bdist_egg upload # создаём и выгружаем и то и другое

Подведение итогов

На данный момент Вы должны уметь использовать easy_install или знать достаточно для того, чтобы попробовать одну из его альтернатив. Лично я сталкивался при работе с ним с разными проблемами и не планирую его использовать. В любом случае скоро мы посмотрим на pip и distribute, так что Вы сможете  узнать, как их использовать. А пока - экспериментируйте с easy_install и делитесь своими впечатлениями в комментариях!

Домашнее чтение

Комментариев нет:

Отправить комментарий