Простой Python — страница 41 из 66

1. Используйте объект класса socket, чтобы реализовать службу, сообщающую текущее время. Когда клиент отправляет на сервер строку 'time', верните текущие дату и время как строку ISO.

2. Используйте сокеты ZeroMQ REQ и REP, чтобы сделать то же самое.

3. Попробуйте сделать то же самое с помощью XMLRPC.

4. Возможно, вы видели эпизод телесериала I Love Lucy, в котором Люси и Этель работают на шоколадной фабрике (это классика). Парочка стала отставать, когда линия конвейера, которая направляла к ним на обработку конфеты, начала работать еще быстрее. Напишите симуляцию, которая отправляет разные типы конфет в список Redis, и клиент Lucy, который делает блокирующие выталкивания из списка. Ей нужно 0,5 секунды, чтобы обработать одну конфету. Выведите на экран время и тип каждой конфеты, которую получит Lucy, а также количество необработанных конфет.

5. Используйте ZeroMQ, чтобы публиковать стихотворение из упражнения 7 главы 7 по одному слову за раз. Напишите потребителя ZeroMQ, который будет выводить на экран каждое слово, начинающееся с гласной. Напишите другого потребителя, который будет выводить все слова, состоящие из пяти букв. Знаки препинания игнорируйте.

Глава 12. Быть питонщиком

Всегда хотели отправиться во времени назад, чтобы сразиться с более молодой версией себя? Карьера в разработке ПО — это то, что вам нужно!

Эллиот Лох (Elliot Loh)

Эта глава посвящена науке и искусству разработки с помощью Python, она содержит рекомендации и правила хорошего тона. Изучите их, и вы тоже сможете стать настоящим питонщиком.

О программировании

Для начала я хочу сказать пару слов о программировании с высоты личного опыта.

Я начинал свою деятельность в области науки и обучился программированию, чтобы анализировать и отображать экспериментальные данные. Мне казалось, что программирование окажется похожим на бухгалтерский учет — будет точным и скучным. Но я удивился, когда понял, что мне это нравится. Одними из интересных для меня аспектов стали логическая — программирование похоже на складывание пазлов — и творческая составляющие. Вам нужно написать программу так, чтобы получить правильные результаты, но вы вольны написать ее тем способом, который вам больше нравится. Такое соотношение использования левого и правого полушарий мозга необычно.

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

Если вы программист, у вас мог быть похожий опыт. Если же нет, можете попробовать начать программировать, чтобы посмотреть, подходит ли это вам или хотя бы помогает ли это решить какие-то задачи. Как я уже писал в этой книге, знание математики здесь не так уж важно. Скорее всего, самое главное — это способность мыслить логически и склонность к языкам, что может помочь при программировании. Наконец, вам пригодится терпение, особенно если вы отслеживаете баг в своем коде.

Ищем код на Python

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

Стандартная библиотека Python (http://docs.python.org/3/library/) широка, глубока и довольно понятна. Погрузитесь в нее и ищите жемчужины.

Как и в случае с залами славы в спорте, модулю требуется время, чтобы попасть в стандартную библиотеку. Новые пакеты появляются довольно часто, и на протяжении этой книги я отмечал те из них, которые либо делают что-то новое, либо делают что-то старое лучше. Python поставляется сразу «с батарейками», но иногда вам нужна батарейка другого вида.

Так где же, помимо стандартной библиотеки, следует искать хороший код Python?

Первое место, на которое вы должны обратить внимание, — это Python Package Index (PyPI) (https://pypi.python.org/pypi). Ранее носивший имя Cheese Shop в честь скетча Monty Python, этот сайт постоянно обновляется — на момент написания этой книги он содержит более 39 000 пакетов. Когда вы используете pip (смотрите следующий раздел), он ищет пакет на сайте PyPI. Основная страница PyPI показывает самые свежие пакеты. Вы также можете выполнить прямой поиск. Например, в табл. 12.1 показаны результаты поиска по слову genealogy.

Таблица 12.1. Пакеты для работы с генеалогическим древом, которые вы можете найти на сайте PyPI
ПакетВесОписание
Gramps 3.4.25Исследуйте, организуйте и делитесь своей семейной генеалогией
python-fs-stack 0.22Оболочка, написанная на Python, для всех API FamilySearch
human-names 0.1.11Человеческие имена
nameparser 0.2.81Простой модуль Python, предназначенный для разбиения человеческих имен на отдельные компоненты

Лучшие совпадения имеют больший вес, поэтому пакет Gramps, скорее всего, подойдет вам лучше всего. Посетите сайт Python (https://pypi.python.org/pypi/Gramps/3.4.2), чтобы увидеть документацию и ссылки на загрузку пакета.

Еще одним популярным репозиторием является GitHub. Взгляните, какие пакеты Python популярны в данный момент.

Сайт Popular Python recipes (http://bit.ly/popular-recipes) содержит более 4000 коротких программ Python на любую тему.

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

Существует три способа установить пакет Python.

• Использовать pip, если есть такая возможность. С помощью pip вы можете установить большинство пакетов.

• Иногда вы можете использовать менеджер пакетов своей операционной системы.

• С помощью исходного кода.

Если вам нужно установить несколько пакетов из одной области, вы можете обнаружить дистрибутив, который уже содержит их. Например, в приложении В вы можете попробовать поработать с несколькими числовыми и научными программами, которые было бы трудно устанавливать вручную, но все они включены в дистрибутивы вроде Anaconda.

Используем pip

Использование пакетов Python имело несколько ограничений. Более ранний инструмент для установки easy_install был заменен pip, но ни один из них не находился в стандартном пакете Python. Если мы должны устанавливать пакеты с помощью pip, то где же его взять? Начиная с Python 3.4, pip наконец-то включили в стандартный пакет Python, чтобы избежать подобного экзистенциального кризиса. Если вы используете более раннюю версию Python и у вас не установлен pip, можете загрузить его по адресу http://www.pip-installer.org.

Простейший вариант использования pip — установка последней версии некоторого пакета с помощью следующей команды:

$ pip install flask

Вы увидите детали происходящего, просто чтобы не подумали, что pip ленится: загрузка, запуск setup.py, установка файлов на диск и др.

Вы также можете указать pip установить определенную версию:

$ pip install flask==0.9.0

Или минимальную версию (это полезно, когда некоторая особенность, без которой вы жить не можете, появляется только в определенной версии):

$ pip install 'flask>=0.9.0'

В предыдущем примере одинарные кавычки не дают оболочке интерпретировать символ >, чтобы перенаправить поток выходной информации в файл с именем =0.9.0.

Если вы хотите установить более одного пакета, можете воспользоваться файлом требований (http://bit.ly/pip-require). Несмотря на обилие вариантов, простейшим вариантом использования является список пакетов, в каждой строке по одному, опционально содержащий точные или относительные версии:

$ pip — r requirements.txt

Например, файл requirements.txt может содержать следующее:

flask==0.9.0

django

psycopg2

Менеджер пакетов

Apple’s OS X содержит сторонние менеджеры пакетов homebrew (brew) (http://brew.sh/) и ports (http://www.macports.org/). Они работают примерно так же, как и pip, но не ограничены пакетами Python.

В операционных системах семейства Linux имеется отдельный менеджер пакетов для каждого дистрибутива. Самыми популярными являются apt-get, yum, dpkg и zypper.

В операционных системах семейства Windows имеются Windows Installer и файлы пакетов с суффиксом. msi. Если вы устанавливали Python для Windows, то, скорее всего, файл пакета имел формат MSI.

Установка из исходного кода

Иногда случается так, что пакет еще совсем новый или же автор просто не сделал его доступным через pip. Для того чтобы создать пакет, вы, как правило, делаете следующее.

1. Загружаете код.

2. Извлекаете файлы с помощью zip, tar или другого подходящего инструмента, если они заархивированы или сжаты.

3. Запускаете команду python install setup.py в папке, которая содержит файл setup.py.


Как и обычно, вам следует быть осторожными с тем, что вы загружаете и устанавливаете. В программах, написанных на Python, вредоносный код спрятать труднее, поскольку они представляют собой читабельный текст, но иногда это случается.

Интегрированные среды разработки