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

Когда вы работаете над небольшой группой программ, то обычно можете отслеживать внесенные собственноручно изменения — до тех пор, пока не сделаете глупую ошибку и не потеряете несколько дней работы. Системы управления исходным кодом защитят ваш код от сил зла в лице вас самих. Если вы работаете в группе, управление исходным кодом становится необходимостью. Для этой области было создано множество коммерческих и бесплатных решений. Наиболее популярными в мире открытого исходного кода (где и живет Python) являются Mercurial и Git. Они оба являются примерами распределенных систем контроля версий, которые создают несколько копий репозиториев кода. Ранние системы вроде Subversion работают на одном сервере.

Mercurial

Mercurial (http://mercurial.selenic.com/) написан на Python. Научиться пользоваться им довольно легко, он имеет множество подкоманд для загрузки кода из репозитория Mercurial, добавления файлов, проверки на наличие изменений и объединения изменений из разных источников. bitbucket (https://bitbucket.org/) и другие сайты (http://bit.ly/merc-host) предлагают бесплатный или коммерческий хостинг.

Git

Git (http://git-scm.com/) изначально создавался для разработки ядра Linux, но теперь является доминирующим в области открытого исходного кода в целом. Он похож на Mercurial, хотя некоторые считают, что обучиться ему сложнее. GitHub (http://github.com/) — это самый крупный хостинг для git, содержащий более миллиона репозиториев, но существует и множество других хостов (http://bit.ly/githost-scm).

Отдельные примеры программ из этой книги доступны в публичном репозитории git на GitHub (https://github.com/madscheme/introducing-python). Если у вас установлена программа git, вы можете загрузить их с помощью следующей команды:

$ git clone https://github.com/madscheme/introducing-python

Вы также можете загрузить код, нажав на следующие кнопки на странице GitHub:

• Clone in Desktop (Клонировать на Рабочий стол), чтобы открыть версию git, установленную на ваш компьютер;

• Download ZIP (Загрузить архив), чтобы получить архивированную версию программ.

Если у вас нет git, но вы хотите попробовать с ним поработать, прочтите инструкцию по установке (http://bit.ly/git-install). Здесь я буду говорить о версии с командной строкой, но вам могут быть интересны сайты вроде GitHub, предоставляющие дополнительные услуги, которые в некоторых случаях использовать было бы проще: git имеет много возможностей, но не всегда интуитивно понятен.

Проведем тест-драйв. Далеко уходить не будем, просто посмотрим, как работают некоторые команды.

Создадим новую папку и перейдем в нее:

$ mkdir newdir

$ cd newdir

Создадим локальный репозиторий git в текущей папке newdir:

$ git init

Initialized empty Git repository in /Users/williamlubanovic/newdir/.git/

Создадим в папке newdir файл с кодом, который называется test.py, содержащий следующее:

print('Oops')

Добавим файл в репозиторий git:

$ git add test.py

Что вы об этом думаете, мистер git?

$ git status

On branch master

Initial commit

Changes to be committed:

··(use "git rm — cached …" to unstage)

····new file:···test.py

Это значит, что файл test.py стал частью локального репозитория, но изменения еще не были отправлены. Исправим это:

$ git commit — m "simple print program"

[master (root-commit) 52d60d7] my first commit

··1 file changed, 1 insertion(+)

··create mode 100644 test.py

Строка — m "my first commit" является вашим комментарием. Если вы ее опустите, git выведет на экран редактор и тем самым предложит вам ввести сообщение. Оно становится частью истории изменений нашего файла.

Взглянем на текущий статус:

$ git status

On branch master

nothing to commit, working directory clean

О’кей, все текущие изменения были отправлены. Это значит, что мы можем менять содержимое файла и не беспокоиться о том, что потеряем его оригинал. Внесем изменение в файл test.py — заменим Oops на Ops! и сохраним файл:

print('Ops!')

Посмотрим, что теперь думает git:

$ git status

On branch master

Changes not staged for commit:

··(use "git add …" to update what will be committed)

··(use "git checkout — …" to discard changes in working directory)

····modified:···test.py

no changes added to commit (use "git add" and/or "git commit — a")

Используйте команду git diff, чтобы увидеть, какие строки изменились с момента последней отправки:

$ git diff

diff — git a/test.py b/test.py

index 76b8c39..62782b2 100644

-a/test.py

+++ b/test.py

@@ -1 +1 @@

-print('Oops')

+print('Ops!')

Если вы попробуете отправить это изменение сейчас, git пожалуется:

$ git commit — m "change the print string"

On branch master

Changes not staged for commit:

····modified:···test.py

no changes added to commit

Фраза staged for commit означает, что вам нужно добавить файл, что в примерном переводе выглядит как «Эй, git, смотри сюда!»:

$ git add test.py

Вы также могли ввести команду git add, чтобы добавить все измененные файлы в текущий каталог, — это удобно, когда вы изменили несколько файлов, чтобы гарантировать, что отправите все изменения. Теперь мы можем отправить изменения:

$ git commit — m "my first change"

[master e1e11ec] my first change

··1 file changed, 1 insertion(+), 1 deletion(-)

Если вы хотите увидеть все те ужасные вещи, которые проделывали с файлом test.py, начиная с недавних, используйте команду git log:

$ git log test.py

commit e1e11ecf802ae1a78debe6193c552dcd15ca160a

Author: William Lubanovic 

Date:···Tue May 13 23:34:59 2014–0500

·····change the print string

commit 52d60d76594a62299f6fd561b2446c8b1227cfe1

Author: William Lubanovic 

Date:···Tue May 13 23:26:14 2014–0500

·····simple print program

Клонируйте эту книгу

Вы можете получить копию всех программ этой книги. Посетите репозиторий git (https://github.com/madscheme/introducing-python) и следуйте инструкциям по их копированию на ваш локальный компьютер. Если у вас есть git, запустите команду git clone https://github.com/madscheme/introducing-python, чтобы создать репозиторий git на вашем компьютере. Вы также можете загрузить файлы в формате ZIP.

Как узнать больше

Вы прочитали лишь введение. Скорее всего, в нем говорится слишком много о том, что вам не нужно, и слишком мало о том, что вам интересно. Позвольте мне порекомендовать некоторые ресурсы, связанные с Python, которые я считаю полезными.

Книги

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

• Barry P. Head First Python. — O’Reilly, 2010.

• Beazley D. M. Python Essential Reference. 4th ed. — Addison-Wesley, 2009.

• Beazley D. M., Jones B. K. Python Cookbook. 3rd ed. — O’Reilly, 2013.

• Chun W. Core Python Applications Programming. 3rd ed. — Prentice Hall, 2012.

• McKinney W. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython. — O’Reilly, 2012.

• Summerfield M. Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns. — Addison-Wesley, 2013.

Конечно же, хороших книг гораздо больше (https://wiki.python.org/moin/PythonBooks).

Сайты

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

• Learn Python the Hard Way, автор Зед Шоу (Zed Shaw) (http://learnpythonthehardway.org/book/);

• Dive Into Python 3, автор Марк Пилгрим (Mark Pilgrim) (http://www.diveintopython3.net/);

• Mouse Vs. Python, автор Майкл Дрисколл (Michael Driscoll) (http://www.blog.pythonlibrary.org/).

Если вам интересно узнавать о том, что происходит в мире Python, обратите внимание на эти новостные сайты:

• http://bit.ly/comp-lang-python;

• http://bit.ly/comp-lang-py-announce;

• http://www.reddit.com/r/python;

• Planet Python (http://planet.python.org/).

Наконец, рассмотрим сайты, с которых можно скачать хороший код:

• The Python Package Index (https://pypi.python.org/pypi);

• Stackoverflow Python Questions (http://stackoverflow.com/questions/tagged/python);

• ActiveState Python recipes (http://code.activestate.com/recipes/langs/python/);

• Python packages trending on GitHub (https://github.com/trending?l=python).

Группы

В сообществах программистов вы можете найти множество типажей: энтузиастов, спорщиков, глупцов, хипстеров, интеллигентов и множество других. Сообщество Python довольно дружелюбно. Вы можете найти группы, увлекающиеся Python, в зависимости от вашего местонахождения. Проводят встречи и местные пользовательские группы по всему миру (https://wiki.python.org/moin/LocalUserGroups). Другие группы распределены по всему миру и основываются на общих интересах. Например, PyLadies (http://www.pyladies.com/) — это сеть женщин, заинтересованных в Python и ПО с открытым исходным кодом.

Конференции

Самые крупные из множества конференций (http://www.pycon.org/) и совещаний по всему миру (https://www.python.org/community/workshops/) проводятся в Северной Америке (https://us.pycon.org/) и Европе (https://europython.eu/en/).

Coming Attractions