5  Установка и настройка среды программирования на языке программирования Python. Система контроля версии git

Важно

Эта тема состоит из двух самостоятельных частей. Оценка ставится в конце каждого занятия. Отчет готовить на эту тему не нужно!

Необходимо в конце каждого занятия:

  • Показать выполненную работу

  • Ответить на вопросы преподавателя

5.1 Занятие 1. Настройка среды программирования

Python (далее просто питон, хотя правильнее говорить “пайтон”) - интерпретируемый, объектно-ориентированный язык программирования высокого уровня с динамической типизацией. Давайте разбираться в каждом из приведенном в этом описании терминах.

5.1.1 Язык программирования

Программисты занимается ничем иным как формулированием алгоритмов для исполнителя (компьютера). Алгоритм можно записать 4 способами:

  • Словесный - словами на любом естественном языке

  • Графический - в виде блок-схем, графических примитивов, обозначающих какое-либо действие

  • Псевдокод - словесное описание, сделанное в виде компьютерных команд

  • Язык программирования - в виде команд, которые можно перевести в понятные длякомпьютера инструкции.

Компьютер пока понимает только алгоритмы, записанные на языке программирования, поэтому для описания пути к решению наших задач мы вынуждены использовать их. Программа - алгоритм, написанный на языке программирования.

5.1.2 Интерпретируемость

Команды, записанные на языке программирования, необходимо перевести в понятные для компьютера инструкции. Существуют два глобальных способа:

  1. Компиляция - проведенная заранее конвертация всего кода программы в машинный код
  2. Интерпретация - построчное выполнение программы

Для компилируемых языков все связи и типы данных определяются в основном на этапе компиляции. С такими языками надо заранее продумывать все подробности структуры программы, но взамен получаете более высокую скорость выполнения. Для интерпретируемых языков контекст определяется непосредственно в момент выполнения команды, что упрощает разработку, позволяет легко подстраивать алгоритм под ситуацию, но сильно уменьшает время выполнения в сравнении с компилируемыми языками.

5.1.3 Объектно-ориентированность

Подробнее речь про объектно-ориентированную парадигму программирования будет идти на занятиях 10 и 11. Сейчас ограничимся общими положениями. Каждая сущность в питон это объект - абстрактная модель окружающей нас действительности, обладающая такими свойствами и поведением, которое необходимо и достаточно для решения поставленных задач. Любая переменная, любая функция в питон - это объект, описываемый свойствами, к которым можно получить доступ, и над которым можно совершать определенные действия (реализовывать поведение).

5.1.4 Высокий и низкий уровнь.

Языки программирования работают на разных уровнях абстракции. Те языки, которые работают непосредственно с физическими уровнями памяти и инструкциями процессора принято называть языками низкого уровня. Языки, которые работают с сложными абстрактными операциями, называют языками высокого уровня. Кажущаяся нам простой операция сложения двух чисел, которая на питоне записывается в одну строку, на ассемблере (классе языков низкого уровня) будет записываться в несколько процедур.

5.1.5 Типизация

Как было показано на прошлом занятии, нас окружает информация разного типа: целые числа, числа с плавающей точкой, текст и т.д. Принципы работы с этими данными разные. Существуют два класса языков в зависимости от того, кто определяет тип информации, которая должна храниться в ячейке памяти (переменной). Если это задает программист на этапе написания кода программы, то язык имеет статическую типизацию. Попытка записать в такую переменную другого типа приведет к ошибке. Если тип переменной зависит от её текущего значения, а не задается программистом заранее, то язык имеет динамическую типизацию.

5.1.6 Системы управления зависимостями

Возникает большое количество проблем, связанных с использованием как чужого кода, так и своего. Одна из таких проблем заключается в том, что программист, работая над разными задачами на одном устройстве, сталкивается с тем, что для их решения нужны несовместимые программы. А устройство одно. Решение заключается в создании на устройстве изолированной виртуальной среды, в которой программы, необходимые для одной задачи не будут конфликтовать с другими.

Для питона существует специальная система управления такими виртуальными средами и программами, которые называются зависимостями (так как от них зависят ваши программы). Называется Anaconda, её офицальный сайт. Она обладает хорошим интерфейсом командной строки, но медленным графическим интерфейсом. Позволяет устанавливать как библиотеки (чужой код), так и готовые программы, в том числе специализированные биоинформатические.

В питоне есть встроенный менеджер пакетов pip, который обладает похожим, но несколько урезаннымв сравнении с Anaconda функционалом. Автор рекомендует её использовать только при отсутствии пакета на Anaconda.

5.1.7 Среды разработки

Писать код можно и в обычном блокноте Windows, но делать это на постоянной основе не рекомендую. Существуют специальные программы, которые имеют ряд функций, упрощающих программисту жизнь. Такие программы называют интегрирыванными средами разработки (Integrated Development Environment, IDE). Примеры:

  1. PyCharm (очень удобная, но поддерживают антироссийские санкции)
  2. Microsoft VS Code
  3. Spyder

Они обеспечивают такие полезные функции как автоотступы (крайне полезная вещь в питоне), подсветку синтаксиса, автодополнение, интеграцию с Anaconda, запуск и отладку кода, интеграцию с системой контроля версий и многое другое.

5.1.8 Инструкция по установке

Для наших практикумов мы будем использовать следующие программы:

  1. Miniconda - урезанная версия Anaconda, без плохо работающего графического интерфейса
  2. Jupyter Lab - IDE для удобного пошагового написания и запуска небольших блоков кода
  3. Microsoft VS Code - IDE для написания полноценных программ

Приведенная инструкция относится к операционной системе на базе Linux. Описание для других операционных систем приводится также на сайтах приведенных программ. Общая схема будет выглядит примерно похоже.

Внимание

Если перечисленные программы уже стоят на вашем устройстве, их необходимо удалить и установить заново!

  1. Скачаем Miniconda. Чтобы избежать возни с регистрацией на сайте, откройте терминал и выполните следующую команду. Файл сохранится в папке Загрузки.

    wget -O ~/Downloads/Miniconda3-latest-Linux-x86_64.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  2. Запустите файл установочника. Согласитесь с лицензионными настройками (листать с помощью Enter, в конце написать yes) и оставьте настройки по умолчанию. Префикс (установочную директорию) оставить на домашнюю. Скрипт спросит, вызывать ли conda init. Нужно согласиться

    bash ~/Downloads/Miniconda3-latest-Linux-x86_64.sh
    Внимание

    Проследите, чтобы в пути установки не было символов кириллицы. Это может порождать трудноотслеживаемые проблемы.

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

    source ~/.bashrc
  4. Создадим новое окружение

    conda create -n first_env -c conda-forge jupyterlab python=3.10

    Команда для создания окружения - conda create. Затем идут параметры в формате “-имя_параметра значение”, после перечень необходимых к установке программ и/или библиотек. Сейчас мы создаем окружение с программой Jupyter Lab

    -n - имя окружения, -с - источник, где искать и откуда скачивать. Библиотеки и программы находятся в специальных репозиториях - каналах (channels). Достаточно указать имя канала.

  5. Установим программу Microsoft VS Code, скачав установочник с официального сайта и оставив параметры по умолчанию.

  6. После создания окружения, его нужно активировать.

    conda activate first_env
  7. Запустите Microsoft VS Code через Anaconda Prompt

    code
  8. Установите плагины для работы. Нажмите клавиши Ctrl+Shift+X и откроется слева специальное меню. Установите Python и Jupyter.

  9. Создайте первый файл под названием hello_world.ipynb. В создавшемся окне создайте исполняемую ячейку, нажав кнопку Code+

5.1.9 Первый написанный код

  1. Существуют ряд встроенных функций. Самая простая из них - вывод сообщения на экран. Давайте поздороваемся с этим миром.

    print("Привет, мир!")
    Привет, мир!
  2. У питона есть своя философия. Выполните код ниже, ознакомьтесь с выводом и старайтесь следовать этим правилам.

    import this
    The Zen of Python, by Tim Peters
    
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
  3. Создайте файл hello_world.py. Объедините код из двух ячеек и запустите его как с помощью IDE, так и c помощью терминала.

    python hello_world.py

5.1.10 Вопросы

  1. Алгоритм. Определение, свойства, назначения, способы записи, оценки эффективности
  2. Типы языков программирования.
  3. Какие есть программы, помогающие писать программы? Их функции.
  4. Проблема зависимостей, виртуальные окружения.
  5. Дзен Python
  6. Markdown. Предназначение, основные конструкции.

5.2 Занятие 2. Система контроля версий

Important

Выполнять строго в командной строке!

  1. Зарегистрируйтесь на GitHub. Настройте двухфакторную аутентификацию. Рекомендую приложение Google Authenticator.

  2. Установите и сконфигурируйте git локально у себя на компьютере.

  3. Создайте новую папку и проиинциализируйте там локальный репозиторий.

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

  5. Вернитесь в папку, где вы создавали локальный репозиторий (не в клонированный). Свяжите ваш локальный репозиторий с удаленным на GitHub

  6. Создайте новый файл и запишите в него любое содержимое.

  7. Проиндексируйте, зафиксируйте и отправьте изменения на удаленный репозиторий. Возникла ли какая-нибудь ошибка? Если возникла, предпримите шаги к устранению. Как было бы поступить умнее?

  8. Создайте новую ветку и переключитесь на неё. Изменилось ли содержимое репозитория? Почему?

  9. Измените ваш файл и зафиксируйте изменения.

  10. Смените ветку на главную. Измените в ней ваш файл и зафиксируйте изменения.

  11. Попробуйте слить главную ветку с вашей тематической? Получилось ли? Если нет, разрешите конфликт слияния.

  12. В главной ветке создайте новый файл и зафиксируйте изменение.

  13. О, нет! Новый файл всё нам ломает. Откатите репозиторий к прошлому коммиту.

  14. Отправьте ваше текущее состояние на удаленный сервер.

  15. В удаленном репозитории создайте новый файл.Синхронизируйте удаленный репозиторий и локальный.

  16. Покажите преподавателю историю вашего репозитория в виде графа в командной строке. Объясните, что вы видите.

5.2.1 Вопросы

  1. Система контроля версий. Функции и принципы устройства.

  2. Жизненный цикл файлов

  3. Основный команды git

  4. Принципы ветвления, перемещения и слияния

  5. Модели и принципы организации командной работы