Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Можно использовать синтаксис pip freeze > [имя файла], чтобы сохранить имена всех пакетов, которые были установлены с помощью pip, в файл. Создайте файл требований командой:
pip freeze > requirements.txt >>
Откройте файл requirements.txt в текстовом редакторе, чтобы уви­деть новый файл. Этот файл полезен, потому что можно использовать синтак­сис pip install [requirements_file] для установки всех пакетов, пе­речисленных в файле требований. Эта команда полезна для быстрой загрузки зависимостей программы Python, которая не указана в pypi и, следовательно, недоступна в pip.
Наконец, можно удалить загруженные программы с помощью pip uninstall [имя_пакета]. Для удаления Flask используйте следу- ющую команду:
sudo pip uninstall Flask >> Proceed (y/n)? y Successfully uninstalled Flask-0.11.1
Теперь модуль Flask удален. Проверить это можно командой pip freeze.

16. Управление версиями

Разработка программного обеспечения – это командный вид спорта. Когда вы работаете над проектом совместно с другим программистом или нескольки­ми программистами, то будете вносить изменения в кодовую базу – папки и файлы, из которых состоит ваше программное обеспечение, – и вам необхо­димо синхронизировать эти изменения. Вы могли бы периодически отправлять друг другу электронные письма с вашими изменениями и самостоятельно ком­бинировать две разные версии, но это быстро станет утомительным. Кроме то­го, что произойдет, если вы оба внесете изменения в одну и ту же часть проек-
141
та? Чьи изменения следует использовать? Именно такие проблемы решает си­стема контроля версий. Система контроля версий – это программное обеспече­ние, разработанное для того, чтобы вы могли легко работать над проектами вместе с другими программистами.
Существует множество различных систем контроля версий. Наиболее
популярными из них являются Git и SVN. Системы контроля версий – это про­граммы, обычно используемые в сочетании со службой, которая хранит ва­ше программное обеспечение в облаке, например GitHub. В этой главе вы научитесь использовать систему управления версиями Git для размещения программного обеспечения на GitHub, веб-сайте, который хранит ваш код в облаке.

Репозитории

Репозиторий – это структура данных, созданная программой Git для управления программным проектом. Структура данных – это способ органи­зации и хранения информации: списки и словари – примеры структур данных (подробнее о структурах данных вы узнаете дальше). Репозитории используют­ся для отслеживания всех изменений в программном проекте.
Когда вы работаете над проектом, управляемым Git, существует несколько репозиториев (обычно по одному на каждого человека, работающего над про­ектом). Типичная ситуация выглядит так: каждый, кто работает над проектом, также имеет свой собственный репозиторий на своем компьютере, называемый локальным репозиторием, который отслеживает все изменения, которые они делают на своем компьютере. Есть также центральный репозиторий, разме­щенный на веб-сайте, таком как GitHub, с которым взаимодействуют все ло­кальные репозитории, чтобы оставаться синхронизированными друг с другом. Программист, работающий над проектом, может обновить центральный репо­зиторий изменениями, внесенными в его локальный репозиторий, или он может обновить свой локальный репозиторий новейшими изменениями, которые дру­гие программисты внесли в центральный репозиторий. Если вы работаете над проектом с еще одним программистом, вся система будет выглядеть следую­щим образом.
142
Делается это из командной строки с помощью программы Git.
Можно создать новый репозиторий с помощью программы Git из команд­ной строки или на веб-сайте GitHub. Создав репозиторий, можно использовать программу Git для управления им и связи с центральным репозиторием.
Для начала необходимо создать учетную запись Github: перейдите на Github.com/join, чтобы создать ее. Создайте New repository (новый репозито­рий) на Github. Войдите в свою учетную запись GitHub на github.com и нажмите кнопку + в правом верхнем углу экрана. Нажмите Create repository (создать репозиторий) в раскрывающемся меню. Дайте репозиторию имя hangman. Сделайте его Public (общедоступным) и проверьте инициализацию репозито­рия с помощью файла readme. Теперь нажмите Create repository. Если в ка­кой-то момент у вас возникнут проблемы, и вы сделаете что-то не так в этом разделе, перейдите на страницу настроек вашего репозитория, удалите его и начните заново. Вам также необходимо установить Git. Это можно сделать, используя менеджер пакетов по вашему выбору.
Нажмите кнопку в правом верхнем углу и выберите Your Profile (Ваш
профиль).
143
Увидите имя вашего репозитория: hangman. Кликните по нему – увидите
кнопку с надписью Clone Or Download (Клонировать или скачать). Когда щелкните по ней, то увидите ссылку. Можно использовать эту ссылку, чтобы загрузить свой репозиторий к себе в компьютер с помощью команды git clone [repository_url]. Репозиторий будет загружен в любом каталоге, из которого вводите команду. Скопируйте ссылку или нажмите кнопку копирования ссылки в буфер обмена и используйте ее с командой git clone:
$ git clone >>
Используйте команду ls для проверки, загрузился ли репозиторий.

Помещение и извлечение данных

Есть две основные операции, которые можно делать с Git. Первая – обнов-
ление центрального репозитория изменениями из вашего локального репозито­рия, то есть помещать данные (толкать), потому что таким образом отправ­ляются новые данные в свой центральный репозиторий.
Вторая – обновление вашего локального репозитория, внося изменения из
центрального репозитория, то есть получать данные (тянуть).
Команда git remote -v показывает вам, из какого центрального репо­зитория загружается и извлекается ваш локальный репозиторий. Флаг -v озна­чает подробное описание того, что команда обычно выводит дополнительную
информацию. Используйте эту команду внутри, чтобы увидеть центральный репозиторий, в который ваш локальный репозиторий помещает и извлекает данные:
$ git remote -v >> origin https://github.com/[username]/my_git_project.git (fetch) >> origin https://github.com/[username]/my_git_project.git (push)
Первая строка показывает центральный репозиторий, из которого ваш про­ект будет извлекать данные, а вторая строка показывает центральный репозито­рий, в который ваш проект будет отправлять данные. Как правило, будете от­правлять и получать данные из одного и того же центрального репозитория.
144

Пример помещения данных

Внесите изменения в локальный репозиторий для вашего проекта hangman
и отправьте эти изменения в центральный репозиторий.
Переместите файл Python с кодом, который использовали для создания
Hangman, в каталог hangman, который создали ранее. В нашем локальном репо­зитории теперь есть файл, которого нет в нашем центральном репозитории, т.к. наш локальный репозиторий не синхронизирован с нашим центральным репо­зиторием. Можем исправить это, отправив изменения, сделанные в нашем ло­кальном репозитории, в наш центральный репозиторий.
Отправка изменений из локального репозитория в центральный репозито­рий происходит в три этапа. Сначала вы создаете свои файлы, где сообщаете Git, какие файлы имеют изменения, которые хотите отправить в свой централь­ный репозиторий. После того как вы все просмотрели, фиксируете файлы и, наконец, помещаете. Сообщаете Git, какие файлы необходимо поместить в наш центральный репозиторий. Это называется промежуточной обработкой файла. Когда файл находится в стадии создания, есть шанс изменить свое ре­шение и отменить его. Синтаксис git add [file_path] используется для
создания файла. Используйте команду git add hangman.py, чтобы подго­товить ваш файл:
$ git add hangman.py >>
Команда git status показывает текущее состояние вашего проекта по отношению к вашему репозиторию. Новые файлы, которые существуют в ва­шем локальном проекте, но не существуют в вашем репозитории, отображают­ся зеленым цветом, как и удаленные файлы. Файлы, которые были изменены, выделены красным цветом. Файл модифицируется, если он находится в вашем репозитории, но локальная версия и версия в вашем репозитории различаются. Введите команду git status:
$ git status >> On branch master Changes to be committed: (use "git reset HEAD <file>…" to unstage) new file: hangman.py
145
Вы должны увидеть файл hangman.py, выделенный зеленым цветом. Нужно подготовить каждый файл, который необходимо отправить в репозито­рий, с помощью команды git add [file]. Если подготовили файл, но пе­редумали, то можете отменить его подготовку, не внося изменений в централь­ный репозиторий. Можно отключить файл с помощью синтаксиса git reset
[file_path], файл Hangman.py – с помощью команды git reset hangman.py. Используйте git status, чтобы увидеть результат, и снова добавьте его с помощью git add hangman.py:
$ git reset hangman.py $ git status >>
$ git add hangman.py >>
После того как разместили файлы, переходите ко второму этапу – фикса­ции файлов в центральном репозитории. Когда фиксируете файлы, нужно ис­пользовать флаг -m, чтобы можно было передать сообщение. Сообщение будет сохранено вместе с вашей фиксацией в вашем репозитории, чтобы помочь вам вспомнить, какие изменения вы внесли в эту фиксацию.
$ git commit -m "my first commit" >> 1 file changed, 1 insertion(+) create mode 100644 hel­lo_world.py
Третий этап – отправление ваших изменений на GitHub. Это делается с по­мощью команды git push origin master:
$ git push origin master >> Counting objects: 3, done.
Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 309 bytes | 0 bytes/s,
done.
Total 3 (delta 0), reused 0 (delta 0) To https://github.com/[your_username]/my_project.git 0eb3a47..48acc38 master -> master
146
Как только вы введете свое имя пользователя и пароль GitHub из команд-
в котором он был в то время
ной строки, ваши изменения будут отправлены на GitHub. Если посмотрите на свой репозиторий на веб-сайте GitHub, увидите, что hangman.py теперь нахо­дится в вашем проекте.

Пример извлечения данных

Для обновления вашего локального репозитория необходимо внести изме-
нения в наш центральный репозиторий, для этого используйте команду git
pull origin master.
$ git pull origin master >>From https://github.com/alex/my_project >> * branch master -> FETCH_HEAD
Git применил изменения из нашего центрального репозитория в наш ло-
кальный репозиторий, и теперь они синхронизированы. Можно просмотреть файл README.md на своем компьютере, чтобы увидеть изменения.

Откат версий

Когда вы используете контроль версий, вся история вашего проекта сохра-
няется и доступна для использования. Если вы решите вернуться к версии ва­шего проекта 10-дневной давности, можете это сделать, просмотрев историю коммитов (сохранения изменениий) вашего проекта с помощью команды git
log, которая должна вывести что-то вроде этого:
$ git log >> commit aeb4ef3cf3aabdb9205ea9e96e8cab5c0f5ca7ea
Author: Alex <alex@Pro.local> Date: Thu Jan 21 13:52:02 2016 -0800
Строка цифр и букв после фиксации является номером фиксации.
Можно использовать это число, чтобы вернуть наш проект к тому состоянию,
, с помощью команды
git checkout[old commit]. В этом случае команда будет git checkout aeb4ef3cf3aabdb9205ea9e96e8cab5c0f5ca7ea.
147

Команда git diff

Можно использовать команду git diff, чтобы увидеть разницу между версией файла в нашем локальном проекте и версией в нашем репозито­рии. Добавьте x=100 во вторую строку файла hello_world.py. Введите команду:
$ git diff hello_world.py >> diff –git a/hello_world.py b/hello_world.py
index b376c99..83f9007 100644 – a/hello_world.py +++ b/hello_world.py
@@ -1 +1,2 @@ print('hello') +x = 100
Git выделяет +x=100 зеленым цветом, потому что строка изменилась, + означает, что строка x=100 была добавлена.

Другой запрос на включение

Как ни странно, в контроле версий есть две концепции, называемые pull. Ранее говорилось об извлечении данных из вашего репозитория. Существует также не связанная с этим концепция, называемая запросом на извлечение. За­прос на включение происходит на GitHub. Если вы работаете над веткой проек­та и хотите объединить ее с главным репозиторием, должны отправить запрос на включение в GitHub, чтобы объединить их. Это дает вашим коллегам по ко­манде возможность просмотреть и прокомментировать ваши изменения. Если все выглядит хорошо, кто-то из вашей команды может одобрить запрос на из­влечение и объединить две ветки.
Обычно вы создаете новую ветку, когда хотите разработать новую функ­цию для вашей программы или исправить ошибку или проблему. Когда вы за­кончите все, что делаете в своей ветке, вы обычно объединяете свои измене­ния с основной веткой, что представляет собой процесс объединения двух
148
веток. Рассмотрение слияния выходит за рамки этого пособия, но в git-scm есть отличное руководство, которое можно посмотреть по адресу:
https://git-
scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging.
В заключение отметим, в чем разница между git и GitHub и чем отличается
коммит от пуша:
Git – это инструмент, позволяющий реализовать распределённую систему
контроля версий, а GitHub – это сервис для проектов, использующих Git;
git commit – редактирует репозиторий, заносит туда изменения, а git push –
обновляет ссылки на удалённый репозиторий. Простыми словами, когда вы «коммитите» изменения, вы делаете их на своём локальном репозитории, при этом удалённый репозиторий (тот что непосредственно находится на Git) оста­ётся без изменений.
149

IV. ВВЕДЕНИЕ В ИНФОРМАТИКУ

17. Структуры данных и алгоритмы

Алгоритмы и структуры данных, пожалуй, самый важный предмет компь­ютерных наук. Название влиятельной книги «Алгоритмы + структуры данных = программы» резюмирует их важность. Цель этой главы – ознакомление с пред­метом. В дополнение к усвоению этой главы обязательно нужно больше узнать об алгоритмах и структурах данных за пределами этого пособия, а также потра­тить много времени на практику представленных здесь концепций. Многие примеры в этой главе взяты из замечательной книги «Problem Solving with Algorithms and Data Structures» Брэда Миллера (Brad Miller) и Дэвида Ранума (David Ranum). Эту книгу можно прочитать в Интернете по адресу:
http://interactivepython.org

Что такое алгоритмы и структуры данных?

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

Нотация Big-O

Нотация Big O – это стандартная метрика, используемая для измерения сложности алгоритма. Она дает основу для принятия решения о том, какой из алгоритмов лучше, путем анализа количества шагов, выполняемых каждым ал­горитмом, и выбора того, который требует наименьшего количества шагов.
Для описания алгоритма можно использовать уравнение вида T(n) = n.
Далее представлены некоторые алгоритмы, которые следует изучить.
150
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]