The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Pronko.yuri, 2022-09-19 04:55:10

Izuchaem Python 2020 Erik Metiz

Izuchaem Python 2020 Erik Metiz

Keywords: Python

Discord  501

Оказавшись в рабочем пространстве Python Developers, вы увидите список каналов.
Щелкните на ссылке Channels и выберите тему, которая вас интересует. Возможно,
вам стоит начать с каналов #learning_python и #django channels.

Discord

Discord — еще одна чат-среда с сообществом Python, в которой можно попросить
о помощи и читать обсуждения, связанные с Python.

Чтобы поближе познакомиться с Discord, откройте страницу https://pythondiscord.com/
и щелкните на ссылке Chat Now. На экране должно появиться окно с автоматически
сгенерированным приглашением; щелкните на ссылке Accept Invite. Если у вас уже
имеется учетная запись Discord, вы можете выполнить вход с данными своей учет-
ной записи. Если же учетной записи еще нет, введите имя пользователя и следуйте
инструкциям для завершения процесса регистрации.

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

Г Git и контроль версий

Программы контроля версий позволяют создать «моментальный снимок» состо-
яния программы, находящейся в рабочем состоянии. При внесении изменений
в проект (например, при реализации новой возможности) существует возможность
возврата к предыдущему работоспособному состоянию, если в новом состоянии
проект работает не так, как ожидалось.
Благодаря программам контроля версий программист может работать над усовер-
шенствованием и совершать ошибки, не опасаясь нарушить работоспособность
проекта. Это особенно важно в больших проектах, но также может быть полезно
и в меньших проектах — даже для программ, содержащихся в одном файле.
В этом приложении вы узнаете, как установить Git и использовать эту систему
для управления версиями программ, над которыми вы работаете. В настоящее
время Git является самой популярной программой контроля версий. Многие рас-
ширенные возможности Git предназначены для групп, совместно работающих
над большими проектами, но базовые функции также хорошо подходят для раз-
работчиков-одиночек. Контроль версий в Git основан на отслеживании изменений,
вносимых в каждый файл проекта; если вы совершите ошибку, то сможете просто
вернуться к ранее сохраненному состоянию.

Установка Git

Git работает во всех операционных системах, но способы установки в конкретных
системах различаются. Ниже приведены инструкции для каждой операционной
системы.

Установка Git в Windows

Программу установки Git можно загрузить по адресу https://git-scm.com/. Найдите
ссылку для загрузки программы установки, соответствующей вашей системе.

Установка Git в macOS

Возможно, программа Git уже установлена в вашей системе; попробуйте ввести
команду git --version. Если в выводе будет указан конкретный номер версии, Git

Игнорирование файлов  503

устанавливается в вашей системе. Если в сообщении будет предложено установить
или обновить Git, просто выполните инструкции на экране.
Также есть другой способ: зайдите на сайт https://git-scm.com/ и выберите подходя-
щую программу установки для вашей системы.

Установка Git в Linux

Чтобы установить Git в Linux, введите следующую команду:

$ sudo apt install git-all

Все, теперь вы можете использовать Git в своих проектах.

Настройка Git

Git следит за тем, кто вносит изменения в проект, даже если над проектом работает
всего один человек. Для этого Git необходимо знать ваше имя пользователя и па-
роль. Имя пользователя должно быть указано обязательно, но ничто не мешает вам
ввести фиктивный адрес электронной почты:

$ git config --global user.name "имя_пользователя"
$ git config --global user.email "[email protected]"

Если вы забудете это сделать, Git запросит информацию при первом закреплении.

Создание проекта

Для начала создадим проект для работы. Создайте в системе папку с именем
git_practice. В этой папке разместите файл с простой программой Python:

hello_git.py
print("Hello Git world!")

Эта программа поможет нам изучить базовую функциональность Git.

Игнорирование файлов

Файлы с расширением .pyc автоматически строятся на основе файлов .py, и отсле-
живать их в Git не нужно. Эти файлы хранятся в каталоге с именем __pycache__.
Чтобы приказать Git игнорировать этот каталог, создайте специальный файл
с именем .gitignore (с точкой в начале имени и без расширения) и включите в него
следующую строку:

.gitignore
__pycache__/

504  Приложение Г  •  Git и контроль версий

В результате Git будет игнорировать любые файлы, находящиеся в каталоге
__pycache__. Файл .gitignore избавляет проект от излишнего «балласта» и упрощает
работу с ним.
Возможно, для открытия файла .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

No commits yet

❷ Untracked files:

(use "git add <file>..." to include in what will be committed)

.gitignore
hello_world.py

❸ nothing added to commit but untracked files present (use "git add" to track)

git_practice$

В Git ветвью (branch) называется версия проекта, над которым вы работаете; из
вывода видно, что текущей является ветвь с именем master . Каждый раз, когда
вы проверяете статус своего проекта, программа должна сообщать, что текущей
является ветвь master. После этого мы видим, что система готова к исходному за-

Закрепление  505

креплению. Закреплением (commit) называется «моментальный снимок» проекта
на определенный момент времени.
Git сообщает, что в проекте имеются неотслеживаемые файлы , потому что мы
еще не сообщили Git, какие файлы должны отслеживаться. Затем мы узнаем, что
в текущее закрепление еще ничего не добавлено, но существуют неотслеживаемые
файлы, которые следует добавить в репозиторий .

Добавление файлов в репозиторий

Добавим в репозиторий два файла и снова проверим статус:

❶ git_practice$ git add .
❷ git_practice$ git status

On branch master

No commits yet

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

❸ new file: .gitignore

new file: hello_git.py

git_practice$

Команда git add . добавляет в репозиторий все файлы проекта, которые еще не от-
слеживаются . Закрепление при этом не выполняется; команда просто сообщает
Git, что эти файлы нужно отслеживать. При проверке статуса проекта мы видим,
что Git находит изменения, которые необходимо закрепить . Метка new file оз-
начает, что эти файлы были только что добавлены в репозиторий .

Закрепление

Выполним первое закрепление:

❶ git_practice$ git commit -m "Started project."
❷ [master (root-commit) ee76419] Started project.
❸ 2 files changed, 4 insertions(+)

create mode 100644 .gitignore
create mode 100644 hello_git.py

❹ git_practice$ git status

On branch master
nothing to commit, working tree clean
git_practice$

Команда git commit -m "сообщение"  создает «моментальный снимок» состояния
проекта. Флаг -m приказывает Git сохранить следующее сообщение ("Started
project.") в журнале проекта. Из вывода следует, что текущей является ветвь
master , а в проекте изменились два файла .

506  Приложение Г  •  Git и контроль версий

Проверка статуса показывает, что текущей является ветвь master, а рабочий каталог
чист . Это сообщение должно выводиться каждый раз, когда вы закрепляете ра-
бочее состояние своего проекта. Если вы получите другое сообщение, внимательно
прочитайте его; скорее всего, вы забыли добавить файл после закрепления.

Просмотр журнала

Git ведет журнал всех закреплений, выполненных в проекте. Проверим содержимое
журнала:

git_practice$ git log
commit a9d74d87f1aa3b8f5b2688cb586eac1a908cfc7f (HEAD -> master)
Author: Eric Matthes <[email protected]>
Date: Mon Jan 21 21:24:28 2019 -0900

Started project.
git_practice$

Каждый раз, когда вы выполняете закрепление, Git генерирует уникальный иден-
тификатор из 40 символов. Сохраняется информация о том, кто выполнил из-
менение, когда оно было выполнено, а также передаваемое сообщение. Не вся эта
информация вам понадобится, поэтому Git предоставляет возможность вывести
упрощенный вариант записи журнала:

git_practice$ git log --pretty=oneline
ee76419954379819f3f2cacafd15103ea900ecb2 (HEAD -> master) Started project.
git_practice$

Флаг --pretty=oneline выводит два важнейших атрибута: идентификатор закре-
пления и сохраненное для этого закрепления сообщение.

Второе закрепление

Чтобы увидеть всю мощь системы контроля версий, следует внести в проект из-
менение и закрепить его. Добавим еще одну строку в hello_git.py:

hello_git.py
print("Hello Git world!")
print("Hello everyone.")

Проверяя статус проекта, мы видим, что изменение в файле было замечено Git:

git_practice$ git status

❶ On branch master

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

Отмена изменений  507

❷ modified: hello_git.py

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

git_practice$

В результатах указывается текущая ветвь , имя измененного файла , а также
то, что изменения не были закреплены . Закрепим изменения и снова проверим
статус:

❶ git_practice$ git commit -am "Extended greeting."

[master 51f0fe5] Extended greeting.
1 file changed, 1 insertion(+), 1 deletion(-)

❷ git_practice$ git status

On branch master
nothing to commit, working tree clean

❸ git_practice$ git log --pretty=oneline

51f0fe5884e045b91c12c5449fabf4ad0eef8e5d (HEAD -> master) Extended greeting.
ee76419954379819f3f2cacafd15103ea900ecb2 Started project.
git_practice$

Команда git commit с флагом -am выполняет новое закрепление . Флаг -a прика-
зывает Git добавить все измененные файлы в репозитории в текущее закрепление.
(Если вы создали новые файлы между закреплениями, просто снова выполните
команду git add ., чтобы включить новые файлы в репозиторий.) Флаг -m при-
казывает Git сохранить сообщение в журнале.

При проверке статуса проекта рабочий каталог снова оказывается чистым . На-
конец, в журнале хранится информация о двух закреплениях .

Отмена изменений

А теперь посмотрим, как отменить изменение и вернуться к предыдущему работо-
способному состоянию. Сначала добавьте в файл hello_git.py новую строку:

hello_git.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 <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

508  Приложение Г  •  Git и контроль версий

❶ modified: hello_git.py

no changes added to commit (use "git add" and/or "git commit -a")
git_practice$

Git понимает, что файл hello_git.py был изменен , и при желании мы можем за-
крепить изменения. Но на этот раз вместо закрепления мы хотим вернуться к по-
следней операции закрепления, в которой проект был заведомо работоспособным.
С hello_git.py ничего делать не нужно — ни удалять строку, ни использовать функ-
цию отмены в текстовом редакторе. Вместо этого введите следующие команды
в терминальном сеансе:

git_practice$ git checkout .
git_practice$ git status
On branch master
nothing to commit, working tree clean
git_practice$

Команда git checkout позволяет работать с любым предшествующим закрепле-
нием. Команда git checkout . отменяет все изменения, внесенные с момента
последнего закрепления, и восстанавливает проект в последнем закрепленном
состоянии.

Вернувшись в текстовый редактор, вы увидите, что файл hello_git.py вернулся
к следующему состоянию:

print("Hello Git world!")
print("Hello everyone.")

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

ПРИМЕЧАНИЕ  Возможно, вам придется обновить файл в редакторе, чтобы увидеть
предыдущую версию.

Извлечение предыдущих закреплений

Git позволяет извлечь из журнала любое закрепление, не только последнее. Для
этого в команде вместо точки указываются первые 6 символов идентификатора.
Выполняя извлечение, вы можете просмотреть более раннее закрепление и либо
вернуться к своему последнему закреплению, либо отказаться от всей последней
работы и продолжить разработку с более раннего закрепления:

Извлечение предыдущих закреплений  509

git_practice$ git log --pretty=oneline
51f0fe5884e045b91c12c5449fabf4ad0eef8e5d (HEAD -> master) Extended greeting.
ee76419954379819f3f2cacafd15103ea900ecb2 Started project.
git_practice$ git checkout ee7641
Note: checking out 'ee7641'.

❶ You are in 'detached HEAD' state. You can look around, make experimental

changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b <new_branch_name>

HEAD is now at ee7641... Started project.
git_practice$

При извлечении предыдущего закрепления вы покидаете ветвь master и входите
в состояние, которое Git называет отсоединенным состоянием HEAD . HEAD —
текущее состояние проекта; «отсоединенным» оно называется потому, что мы по-
кинули именованную ветвь (master в данном случае).

Чтобы вернуться к ветви master, извлеките ее:

git_practice$ git checkout master
Previous HEAD position was ee76419 Started project.
Switched to branch 'master'
git_practice$

Вы снова возвращаетесь к ветви master. Если только вы не собираетесь исполь-
зовать расширенные возможности Git, лучше не вносить изменения в проект при
извлечении старого закрепления. Но если над проектом больше никто не работает
и вы хотите отбросить все более поздние закрепления и вернуться к предыдущему
состоянию, можете вернуть проект к предыдущему закреплению. Работая в ветви
master, введите следующую команду:

❶ git_practice$ git status

On branch master
nothing to commit, working directory clean

❷ git_practice$ git log --pretty=oneline

51f0fe5884e045b91c12c5449fabf4ad0eef8e5d (HEAD -> master) Extended greeting.
ee76419954379819f3f2cacafd15103ea900ecb2 Started project.

❸ git_practice$ git reset --hard ee76419

HEAD is now at ee76419 Started project.

❹ git_practice$ git status

On branch master
nothing to commit, working directory clean

❺ git_practice$ git log --pretty=oneline

ee76419954379819f3f2cacafd15103ea900ecb2 (HEAD -> master) Started project.
git_practice$

510  Приложение Г  •  Git и контроль версий

Сначала мы проверяем статус и убеждаемся в том, что текущей является ветвь
master . В журнале присутствуют оба закрепления . Затем выдается команда
git reset --hard с первыми шестью символами идентификатора того закрепления,
к которому нужно вернуться . Далее повторная проверка статуса показывает,
что мы находимся в главной ветви, а закреплять нечего . Повторное обращение
к журналу показывает, что проект находится в том состоянии, к которому мы ре-
шили вернуться .

Удаление репозитория

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

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

❶ git_practice$ git status
On branch master
nothing to commit, working directory clean

❷ git_practice$ rm -rf .git
❸ git_practice$ git status

fatal: Not a git repository (or any of the parent directories): .git

❹ git_practice$ git init

Initialized empty Git repository in git_practice/.git/

❺ git_practice$ git status

On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)

.gitignore
hello_git.py

nothing added to commit but untracked files present (use "git add" to track)

❻ git_practice$ git add .

git_practice$ git commit -m "Starting over."
[master (root-commit) 6baf231] Starting over.

2 files changed, 4 insertions(+)
create mode 100644 .gitignore
create mode 100644 hello_git.py

❼ git_practice$ git status

Удаление репозитория  511

On branch master
nothing to commit, working tree clean
git_practice$

Сначала мы проверяем статус и видим, что рабочий каталог чист . Затем команда
rm -rf .git (rmdir /s .git в Windows) удаляет каталог .git . При проверке статуса
после удаления каталога .git выдается сообщение об отсутствии репозитория Git .
Вся информация, используемая Git для отслеживания репозитория, хранится
в каталоге .git, поэтому его удаление приводит к уничтожению всего репозитория.

Тогда мы можем использовать команду git init для создания нового репозито-
рия . Проверка статуса показывает, что все вернулось к исходному состоянию,
ожидая первого закрепления . Мы добавляем файлы и выполняем первое за-
крепление . Теперь проверка статуса показывает, что проект находится в новой
ветви master, а закреплять пока нечего .

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

Эрик Мэтиз

Изучаем Python: программирование игр,
визуализация данных, веб-приложения

3-е издание

Перевел с английского Е. Матвеев

Заведующая редакцией Ю. Сергиенко

Ведущий редактор К. Тульцева

Художественный редактор В. Мостипан

Литературный редактор М. Рогожин

Корректоры С. Беляева, Н. Викторова

Верстка Л. Егорова

Изготовлено в России. Изготовитель: ООО «Прогресс книга».
Место нахождения и фактический адрес: 194044, Россия, г. Санкт-Петербург,

Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373.

Дата изготовления: 12.2019. Наименование: книжная продукция. Срок годности: не ограничен.

Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12.000 — Книги печатные
профессиональные, технические и научные.

Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01.

Подписано в печать 12.12.19. Формат 70×100/16. Бумага офсетная. Усл. п. л. 41,280. Тираж 2000. Заказ 0000.


Click to View FlipBook Version