# Файл запуска python ```python= import atexit import os try: import readline except ImportError: print("Завершение недоступно: модуль readline недоступен") else: import rlcompleter # Автозаполнение readline.parse_and_bind('tab: complete') # Путь к файлу истории в домашнем каталоге пользователя # Можно использовать собственный путь history_file = os.path.join(os.environ['HOME'], '.python_shell_history') try: readline.read_history_file(history_file) except IOError: pass atexit.register(readline.write_history_file, history_file) del os, history_file, readline, rlcompleter ``` Создайте этот файл в вашем домашнем каталоге и назовите его **.pythonstartup**. Затем добавьте переменную **PYTHONSTARTUP** в вашу среду, используя путь к этому файлу. ## Настройка переменной среды PYTHONSTARTUP Если вы работаете под Linux или macOS, то самый простой способ — создать скрипт запуска в домашней папке. Затем нужно связать его с переменной среды PYTHONSTARTUP, которая задается в скрипте запуска оболочки. Например, в обо- лочках Bash и Korn используется файл .profile, в который вы можете вставить такую строку: ```bash= export PYTHONSTARTUP=~/.pythonstartup ``` Если вы работаете под Windows, то легко установить новую переменную среды с правами администратора в настройках системы, а затем сохранить скрипт в общем месте, а не задействовать заданное пользователем местоположение. Писать скрипт для PYTHONSTARTUP — хорошее упражнение, но создавать хорошие пользовательские оболочки в одиночку бывает сложно и немногие разработчики находят на это время. К счастью, существует несколько реализаций пользовательской оболочки Python, которые позволяют чрезвычайно упростить интерактивные сессии в Python. ### ptpython Оболочка ptpython (github.com/jonathanslenders/ptpython/) — иной подход к совре- менным оболочкам Python. Интересно в данном проекте то, что реализация основ- ных функций доступна в виде отдельного пакета, называемого prompt_toolkit (от того же автора). Это позволяет легко создавать различные эстетически при- ятные интерактивные интерфейсы командной строки. Эту оболочку часто по функциональности сравнивают с bpython, но основ- ное отличие состоит в том, что она позволяет работать в режиме совместимости с IPython и в ее синтаксисе есть дополнительные функции, такие как %pdb, %cpaste и %profile. ## Включение оболочек в собственные скрипты и программы Иногда возникает необходимость встроить цикл read-eval-print (REPL), похожий на интерактивную сессию Python, в ваше ПО. Это облегчает экспериментирование с кодом и его проверку «изнутри». Самый простой модуль, который позволяет эму- лировать интерактивный интерпретатор Python, входит в стандартную библиотеку и называется **code**. Скрипт, который запускает интерактивную сессию, состоит из одного импорта и вызова функции: ```python= import code code.interact() ``` Ниже приведены примеры того, как можно сослаться на все ранее упомянутые оболочки внутри вашего кода: ```python= # Пример для IPython import IPython IPython.embed() ``` ```python= # Пример для bpython import bpython bpython.embed() ``` ```python= # Пример для ptpython from ptpython.repl import embed embed(globals(), locals()) ``` ### Интерактивные отладчики Отладка кода — неотъемлемая часть процесса разработки ПО. Многие программисты проводят большую часть своей жизни, используя только логи и операторы `print` в качестве основного средства отладки, но большинство профессиональных разработчиков предпочитают задействовать какой-нибудь отладчик. Python поставляется с уже встроенным интерактивным отладчиком под названием pdb (см. docs.python.org/3/library/pdb.html). Его можно вызвать из командной строки в скрипте, чтобы Python запустил постмортем-отладку, если программа завершается аварийно: ```bash= python -m pdb script.py ``` Постмортем-отладка хоть и полезна, но не универсальна. Она полезна, только когда приложение завершается с исключением, если происходит ошибка. Часто некорректный код просто ведет себя неправильно, но не завершается ошибкой. В таких случаях можно установить пользовательские точки останова (брейкпойнты) в конкретных строках кода с помощью вот такой строки: ```python= import pdb; pdb.set_trace() ``` Сессия отладки в **pdb** выглядит очень просто и не дает дополнительных функций, таких как автозаполнение или подсветка кода. К счастью, в PyPI есть несколько пакетов, которые предоставляют такие функции из альтернативных оболочек Python, уже упоминавшихся выше. Наиболее известные примеры: ‰‰ipdb — это отдельный пакет на основе ipython; ‰‰ptpdb — отдельный пакет на основе ptpython; ‰‰bpdb — идет в комплекте с bpython.