{ "cells": [ { "cell_type": "markdown", "id": "0c89714c", "metadata": {}, "source": [ "# Создание скриптов. Работа с IDE\n", "\n", "## Файлы с исходным кодом\n", "\n", "До этого момента мы с вами работали только в интерактивной подсказке и jupyter ноутбуках, но основной способ программирования на `python` (как и в большинстве других языков программирования) --- составление программы, состоящей из файла/файлов с исходным кодом. Исходный код обычно хранится в файлах с расширением `.py`, а при их исполнении интерпретатор `python` (обычно `CPython`) считывает и исполняет команды из файла по строке.\n", "\n", "Python файлы часто разделяют на скрипты и модули. Скрипт --- то, что непосредственно предназначено для исполнения, а модуль --- предназначен для импортирования в скрипте и в других модулях. \n", "\n", "При решении исследовательских задач часто удобно бывает начать разработку в jupyter notebook: в интерактивном режиме удобно анализировать и визуализировать данные, прототипировать и тестировать функционал. По завершении такого этапа часто образовывается логически целостная программная единица, которая а) может пригодится и в других проектах б) в дальнейшем будет исполняться множество раз (например, на других наборах данных). Тогда гораздо удобнее перетащить код из jupyter ноутбука в файл `.py` (с возможным разделением на модули), который может быть импортирован в других программах в качестве модуля или запущен интерпретатором python без необходимости загружать jupyterlab и вручную исполнять ячейки. \n", "\n", "## Конвертирование .ipynb в .py \n", "\n", "Вообще говоря, файл .ipynb --- файл в формате `json`. Внутри этого файла можно найти список ячеек `cells`, элементы которого структуры, соответствующие каждой ячейке ноутбука. Например, у исполняемых ячеек с кодом есть поля `source` и `outputs`. Т.е. jupyter notebook содержит в себе исходный код всех ячеек и можно конвертировать его в файл `.py` записав в текстовый файл исходный код всех ячеек друг под другом.\n", "\n", "```{note}\n", "В поле `outputs` ячейки могут храниться изображения и другие не текстовые данные. Из-за этого такие файлы хуже работают с системами контроля версий (например, `git`), действие которых основано на вычислении разницы (`diff`) между двумя версиями файлов. В текстовых файлах можно выделить логические единицы (например, строки) и отслеживать появление/удаление таких единиц между версиями файлов. Для бинарных данных невозможно выделить таких единиц для произвольного содержимого файла. \n", "```\n", "\n", "Если скрипт уже открыт в jupyter, то для конвертирования достаточно в меню выбрать `File` $\\to$ `Download as` $\\to$ `Python (.py)`.\n", "\n", "```{figure} /_static/lecture_specific/scripts/convert.png\n", ":scale: 70%\n", "```\n", "\n", "Можно добиться похожего эффекта в командной строке не открывая ноутбук командой\n", "```sh\n", "jupyter nbconvert --to script notebook.ipynb\n", "```\n", "где `notebook.ipynb` --- имя ноутбука.\n", "\n", "\n", "```{warning}\n", "1) необходимо следить, чтобы магические команды `jupyter` (такие, как %matplotlib inline) не попали в исходных код. \n", "2) при конвертации в скрипт попадёт исходных код всех ячеек в порядке сверху вниз, т.е. если для корректной логики программы следует исполнять ячейки в другом порядке или некоторые из них исполнять не единожды или вообще не исполнять, то необходимо переработать структуру программы.\n", "```\n", "\n", "```{tip}\n", "При таком способе конвертации в скрипт попадают комментарии, отделяющие исходный код разных ячеек. С помощью многократного нажатия комбинации клавиш `shift+M` можно склеить ячейки ноутбука в одну большую.\n", "```\n", "\n", "## Среды разработки\n", "\n", "В подавляющем большинстве ситуаций разработка осуществляется в среде программирования, в качества примера которых можно привести\n", "\n", "- [Spyder-IDE](https://www.spyder-ide.org/), бесплатный, предназначен для научного программирования, \n", "- [PyCharm](https://www.jetbrains.com/pycharm/), есть бесплатная версия (`community edition`) с ограниченным функционалом, предназначен для разработки полномасштабных приложений;\n", "- [Visual Studio Code](https://code.visualstudio.com/), бесплатный, не позиционируется в качестве полноценной среды разработки, а только в качестве продвинутого текстового редактора.\n", "- многие другие; \n" ] }, { "cell_type": "markdown", "id": "584757d8", "metadata": {}, "source": [ "## Командная строка\n", "\n", "### windows\n", "\n", "Короткий обзор команд навигации по файловой системе в `cmd` Windows. \n", "\n", "|Команда|Действие|\n", "|:---:|:---:|\n", "|`cd path`|перейти в указанную папку на том же диске|\n", "|`cd ..`| перейти на уровень выше|\n", "|`D:`| перейти на другой диск|\n", "|`dir`| Вывод содержимого текущей папки. `dir /D` более лаконичный вывод|\n", "\n", "Если python добавлен в переменную среды `PATH`, то для запуска скрипта из `cmd` достаточно написать команду\n", "```console\n", "python path/to/script.py\n", "```\n", "\n", "### Mac OS\n", "\n", "TODO\n", "\n", "### Unix\n", "\n", "Короткий обзор команд навигации по файловой системе в командной строке unix-like операционных систем. \n", "\n", "|Команда|Действие|\n", "|:---:|:---:|\n", "|`cd path`|перейти в указанную папку на том же диске|\n", "|`cd ..`| перейти на уровень выше|\n", "|`ls`| Вывод содержимого текущей папки.|\n", "\n", "запуск скрипта:\n", "```console\n", "python path/to/script.py\n", "```" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }