Когда вы работаете над небольшой группой программ, то обычно можете отслеживать внесенные собственноручно изменения — до тех пор, пока не сделаете глупую ошибку и не потеряете несколько дней работы. Системы управления исходным кодом защитят ваш код от сил зла в лице вас самих. Если вы работаете в группе, управление исходным кодом становится необходимостью. Для этой области было создано множество коммерческих и бесплатных решений. Наиболее популярными в мире открытого исходного кода (где и живет 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