Книга Изучаем Python
Скачать 4.68 Mb.
|
python 'python' is not recognized as an internal or external command > Вероятно, поиск по полному тексту сообщения принесет полезную информацию. В результатах поиска, связанного с программированием, особенно часто встреча- ются некоторые сайты. Я опишу некоторые из них, чтобы вы знали, чего от них можно ждать. 480 Приложение В . Помощь и поддержка Stack Overflow Stack Overflow (http://stackoverlow.com/), один из самых популярных сайтов с во- просами и ответами для программистов, часто встречается на первой странице результатов поиска, связанного с Python. Пользователи публикуют вопросы по возникшим проблемам, а другие участники пытаются дать полезные ответы. Пользователи могут голосовать за ответы, которые, по их мнению, принесли наибольшую пользу, так что лучшими ответами обычно оказываются первые из найденных. На сайте Stack Overflow можно найти ответы на многие основные вопросы по язы- ку Python, потому что со временем они были хорошо проработаны. Пользователи также публикуют обновления, так что ответы остаются относительно актуальными. На момент написания книги на сайте Stack Overflow были опубликованы ответы более чем на 400 000 вопросов, связанных с Python. Официальная документация Python Официальная документация Python (http://docs.python.org/) уже не столь бесспор- но полезна для новичков, потому что она написана для документирования языка, а не для разъяснений. Примеры в официальной документации должны работать, но возможно, что-то в них останется для вас непонятным. Тем не менее это полезный ресурс, к которому стоит обращаться при поиске, а по мере углубления вашего по- нимания Python он будет приносить еще больше пользы. Официальная документация библиотек Если вы используете конкретную библиотеку (например, Pygame, matplotlib, Django и т. д.), в поиске часто будут встречаться ссылки на официальную доку- ментацию этого проекта — например, документация http://docs.djangoproject.com/ чрезвычайно полезна. Если вы собираетесь работать с любыми из этих библиотек, вам стоит ознакомиться с официальной документацией. r/learnpython Форум Reddit состоит из ряда подфорумов (subreddits). Подфорум r/learnpython (http://reddit.com/r/learnpython/) достаточно активен и благожелательно на строен. Здесь вы сможете прочитать вопросы других участников и опубликовать свои собственные. Сообщения в блогах Многие программисты ведут блоги и пишут об аспектах языка, с которым они работают. Прежде чем брать на вооружение любой совет, просмотрите несколько первых комментариев к сообщению в блоге. Если комментариев нет, к сообщению следует относиться скептически. Вполне возможно, что никто другой не смог убе- диться в полезности этого совета. IRC (Internet Relay Chat) 481 IRC (Internet Relay Chat) Программисты общаются в реальном времени на каналах IRC. Если вы зашли в ту- пик, а поиск в Интернете не принес результатов, обращение на канал IRC может оказаться лучшим вариантом. Многие люди, проводящие время на этих каналах, вежливы и доброжелательны, особенно если вы можете точно описать, что вы пы- таетесь сделать, что уже было сделано и какие результаты вы получили. Создание учетной записи IRC Чтобы создать учетную запись на IRC, зайдите на сайт http://webchat.freenode.net/. Выберите имя пользователя, заполните поле c кодом проверки (captcha) и щелкни- те на кнопке Connect . Появляется сообщение, приветствующее вас на сервере IRC freenode. В поле в нижней части окна введите следующую команду: /msg nickserv register пароль адрес_электронной_почты Введите свой пароль и адрес электронной почты. Выберите простой пароль, ко- торый не используется для других учетных записей. Пароль передается в небезо- пасном виде, так что выбирать защищенный пароль не обязательно. На ваш адрес электронной почты придет сообщение с инструкцией по подтверждению учетной записи. В нем будет содержаться команда следующего вида: /msg nickserv verify register имя код_проверки Скопируйте эту строку на сайт IRC с именем, которое вы выбрали ранее, и полу- ченным кодом проверки. Теперь все готово для присоединения к каналу. Выбор канала Чтобы присоединиться к основному каналу Python, введите команду /join #python На экране появляется подтверждение о том, что вы присоединились к каналу, а также общая информация о канале. Канал ##learnpython (с двумя символами # ) обычно тоже активно работает. Этот канал связан с http://reddit.com/r/learnpython/, поэтому вы также будете видеть здесь информацию о сообщениях на r/learnpython . Канал #pyladies предназначен для женщин, изучающих Python, а также для людей, помогающих женщинам- программистам. Если вы работаете над веб-приложениями, также можно при- соединиться к каналу #django После присоединения к каналу вы сможете читать разговоры других пользователей, а также задавать вопросы. Культура IRC Чтобы помощь была эффективной, необходимо кое-что знать о культуре IRC. Если вы сосредоточитесь на трех вопросах, приведенных в начале приложения, это опре- деленно станет значительным шагом на пути к успешному решению. Люди охотно 482 Приложение В . Помощь и поддержка помогут вам, если вы сможете точно объяснить, что вы пытаетесь сделать, что уже пробовали сделать и какие именно результаты при этом получили. Если вам нужно поделиться кодом или выходными данными, участники IRC используют внешние сайты, предназначенные для этой цели (например, https://bpaste.net/+python/). Тем самым предотвращается загромождение канала кодом и упрощается чтение опубликованного кода. Терпение всегда повышает вероятность успеха. Четко сформулируйте свой вопрос и подождите ответа. Часто пользователи участвуют сразу в нескольких беседах, но обычно кто-то откликнется на вашу просьбу за разумное время. При небольшом количестве участников на получение ответа может потребо- ваться больше времени. Приложение Г . Git и контроль версий Программы контроля версий позволяют взять создать «моментальный снимок» со- стояния программы, находящейся в рабочем состоянии. При внесении изменений в проект (например, при реализации новой возможности) существует возможность возврата к предыдущему работоспособному состоянию, если в новом состоянии проект работает не так, как ожидалось. Благодаря программам контроля версий программист может работать над усовер- шенствованием и совершать ошибки, не опасаясь нарушить работоспособность проекта. Это особенно важно в больших проектах, но также может быть полезно и в меньших проектах — даже для программ, содержащихся в одном файле. В этом приложении вы узнаете, как установить Git и использовать эту систему для управления версиями программ, над которыми вы работаете. В настоящее время Git является самой популярной программой контроля версий. Многие рас- ширенные возможности Git предназначены для групп, совместно работающих над большими проектами, но базовые функции также хорошо подходят для раз- работчиков-одиночек. Контроль версий в Git основан на отслеживании изменений, вносимых в каждый файл проекта; если вы совершите ошибку, то сможете просто вернуться к ранее сохраненному состоянию. Установка Git Git работает во всех операционных системах, но способы установки в конкретных системах различаются. Ниже приведены инструкции для каждой операционной системы. Установка Git в Linux Чтобы установить Git в Linux, введите следующую команду: $ sudo apt-get install git Все, теперь вы можете использовать Git в своих проектах. Установка Git в OS X Возможно, программа Git уже установлена в вашей системе; попробуйте ввести команду git --version . Если в выводе будет указан конкретный номер версии, Git 484 Приложение Г . Git и контроль версий устанавливается в вашей системе. Если в сообщении будет предложено установить или обновить Git, просто выполните инструкции на экране. Также есть другой способ: зайдите на сайт https://git-scm.com/, перейдите по ссылке Downloads и выберите подходящую программу установки для вашей системы. Установка Git в Windows Вы можете установить Git в системе Windows с сайта http://msysgit.github.io/. Настройка Git Git следит за тем, кто вносит изменения в проект, — даже если над проектом рабо- тает всего один человек. Для этого Git необходимо знать ваше имя пользователя и пароль. Имя пользователя должно быть указано обязательно, но ничто не мешает вам ввести фиктивный адрес электронной почты: $ git config --global user.name "имя_пользователя" $ git config --global user.email "username@example.com" Если вы забудете это сделать, Git запросит информацию при первом закреплении. Создание проекта Для начала создадим проект для работы. Создайте в системе папку с именем git_practice . В этой папке разместите файл с простой программой Python: hello_world.py print("Hello Git world!") Эта программа поможет нам изучить базовую функциональность Git. Игнорирование файлов Файлы с расширением .pyc автоматически строятся на основе файлов .py , и отсле- живать их в Git не нужно. Эти файлы хранятся в каталоге с именем __pycache__ Чтобы приказать Git игнорировать этот каталог, создайте специальный файл с именем .gitignore (с точкой в начале имени и без расширения) и включите в него следующую строку: .gitignore __pycache__/ В результате Git будет игнорировать любые файлы, находящиеся в каталоге __pycache__ . Файл .gitignore избавляет проект от излишнего «балласта» и упрощает работу с ним. Проверка статуса 485 ПРИМЕЧАНИЕ Если вы используете Python 2 .7, замените эту строку на * .pyc . Python 2 .7 не создает каталог __pycache__; каждый файл .pyc хранится в одном каталоге с соответствующим файлом .py . Звез- дочка (*) приказывает Git игнорировать все файлы с расширением .pyc . Возможно, для открытия файла .gitignore вам придется изменить настройки своего текстового редактора, чтобы в нем отображались скрытые файлы. Некоторые ре- дакторы настроены на игнорирование имен файлов, начинающихся с точки. Инициализация репозитория Теперь, когда у вас имеется каталог с файлом Python и файлом .gitignore, можно переходить к инициализации репозитория Git. Откройте терминал, перейдите в каталог git_practice и выполните следующую команду: git_practice$ git init Initialized empty Git repository in git_practice/.git/ git_practice$ Из выходных данных видно, что Git инициализирует пустой репозиторий в ка- талоге git_practice . Репозиторий представляет собой набор файлов программы, который активно отслеживается системой Git. Все файлы, используемые Git для управления репозиторием, хранятся в скрытом каталоге .git/ , с которым вам вообще не придется работать. Просто не удаляйте этот каталог, иначе вся история проекта будет потеряна. Проверка статуса Прежде чем делать что-либо, проверьте статус проекта: git_practice$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add # # .gitignore # hello_world.py # nothing added to commit but untracked files present (use "git add" to track) git_practice$ В Git ветвью (branch) называется версия проекта, над которым вы работаете; из вывода видно, что текущей является ветвь с именем master . Каждый раз, когда вы проверяете статус своего проекта, программа должна сообщать, что текущей является ветвь master . После этого мы видим, что система готова к исходному за- креплению. Закреплением (commit) называется «моментальный снимок» проекта на определенный момент времени. 486 Приложение Г . Git и контроль версий Git сообщает, что в проекте имеются неотслеживаемые файлы , потому что мы еще не сообщили Git, какие файлы должны отслеживаться. Затем мы узнаем, что в текущее закрепление еще ничего не добавлено, но существуют неотслеживаемые файлы, которые следует добавить в репозиторий . Добавление файлов в репозиторий Добавим в репозиторий два файла и снова проверим статус: git_practice$ git add . git_practice$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached # # new file: .gitignore # new file: hello_world.py # git_practice$ Команда git добавляет в репозиторий все файлы проекта, которые еще не отсле- живаются . Закрепление при этом не выполняется; команда просто сообщает Git, что эти файлы нужно отслеживать. При проверке статуса проекта мы видим, что Git находит изменения, которые необходимо закрепить . Метка new file означает, что эти файлы были только что добавлены в репозиторий . Закрепление Выполним первое закрепление: git_practice$ git commit -m "Started project." [master (root-commit) c03d2a3] Started project. 2 files changed, 1 insertion(+) create mode 100644 .gitignore create mode 100644 hello_world.py git_practice$ git status # On branch master nothing to commit, working directory clean git_practice$ Команда git commit -m " сообщение " создает «моментальный снимок» состоя- ния проекта. Флаг -m приказывает Git сохранить следующее сообщение ( "Started project." ) в журнале проекта. Из вывода следует, что текущей является ветвь master , а в проекте изменились два файла . Проверка статуса показывает, что текущей является ветвь master , а рабочий каталог чист . Это сообщение должно выводиться каждый раз, когда вы закрепляете ра- бочее состояние своего проекта. Если вы получите другое сообщение, внимательно прочитайте его; скорее всего, вы забыли добавить файл после закрепления. Второе закрепление 487 Просмотр журнала Git ведет журнал всех закреплений, выполненных в проекте. Проверим содержимое журнала: git_practice$ git log commit a9d74d87f1aa3b8f5b2688cb586eac1a908cfc7f Author: Eric Matthes Date: Mon Mar 16 07:23:32 2015 -0800 Started project. git_practice$ Каждый раз, когда вы выполняете закрепление, Git генерирует уникальный иден- тификатор из 40 символов. Сохраняется информация о том, кто выполнил из- менение, когда оно было выполнено, а также передаваемое сообщение. Не вся эта информация вам понадобится, поэтому Git предоставляет возможность вывести упрощенный вариант записи журнала: git_practice$ git log --pretty=oneline a9d74d87f1aa3b8f5b2688cb586eac1a908cfc7f Started project. git_practice$ Флаг --pretty=oneline выводит два важнейших атрибута: идентификатор закреп- ления и сохраненное для этого закрепления сообщение. Второе закрепление Чтобы увидеть всю мощь системы контроля версий, следует внести в проект изменение и закрепить его. Добавим еще одну строку в hello_world .py : hello_world.py print("Hello Git world!") print("Hello everyone.") Проверяя статус проекта, мы видим, что изменение в файле было замечено Git: git_practice$ git status # On branch master # Changes not staged for commit: # (use "git add # (use "git checkout -- # # modified: hello_world.py # no changes added to commit (use "git add" and/or "git commit -a") git_practice$ В результатах указывается текущая ветвь , имя измененного файла , а также то, что изменения не были закреплены . Закрепим изменения и снова проверим статус: 488 Приложение Г . Git и контроль версий git_practice$ git commit -am "Extended greeting." [master 08d4d5e] Extended greeting. 1 file changed, 1 insertion(+) git_practice$ git status # On branch master nothing to commit, working directory clean git_practice$ git log --pretty=oneline 08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting. be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project. git_practice$ Команда git commit с флагом -am выполняет новое закрепление. Флаг -a прика- зывает Git добавить все измененные файлы в репозитории в текущее закрепление. (Если вы создали новые файлы между закреплениями, просто снова выполните команду git add. , чтобы включить новые файлы в репозиторий.) Флаг -m при- казывает Git сохранить сообщение в журнале. При проверке статуса проекта рабочий каталог снова оказывается чистым . На- конец, в журнале хранится информация о двух закреплениях . Отмена изменений А теперь посмотрим, как отменить изменение и вернуться к предыдущему рабо- тоспособному состоянию. Сначала добавьте в файл hello_world .py новую строку: hello_world.py print("Hello Git world!") print("Hello everyone.") print("Oh no, I broke the project!") Сохраните и запустите этот файл. Из информации статуса видно, что Git видит изменения: git_practice$ git status # On branch master # Changes not staged for commit: # (use "git add # (use "git checkout -- # # modified: hello_world.py # no changes added to commit (use "git add" and/or "git commit -a") git_practice$ Git понимает, что файл hello_world .py был изменен , и при желании мы можем закрепить изменения. Но на этот раз вместо закрепления мы хотим вернуться к последней операции закрепления, в которой проект был заведомо работоспособ- ным. С hello_world .py ничего делать не нужно: ни удалять строку, ни использовать функцию отмены в текстовом редакторе. Вместо этого введите следующие команды в терминальном сеансе: Извлечение предыдущих закреплений 489 git_practice$ git checkout . git_practice$ git status # On branch master nothing to commit, working directory clean git_practice$ Команда git checkout позволяет работать с любым предшествующим закрепле- нием. Команда git checkout . отменяет все изменения, внесенные с момента последнего закрепления, и восстанавливает проект в последнем закрепленном состоянии. Вернувшись в текстовый редактор, вы увидите, что файл hello_world .py вернулся к следующему состоянию: print("Hello Git world!") print("Hello everyone.") И хотя в таком простом проекте возврат к предыдущему состоянию может по- казаться тривиальным, если бы мы работали над большим проектом с десятками измененных файлов, все файлы, измененные с момента последнего закрепления, вернулись бы к предыдущему состоянию. Эта возможность невероятно полезна: вы можете вносить любые изменения в ходе реализации новой функции, а если они не сработают, вы просто отменяете их без вреда для проекта. Не нужно запоминать эти изменения и отменять их вручную; Git делает все это за вас. |