.. _run-in-terminal-ru-label: .. contents:: Содержание: :depth: 2 Запуск Python программ в терминале ================================== Это короткая инструкция по запуску Python программ в терминале (Unix) или ``cmd`` (Windows). Запуск простой программы без зависимостей ----------------------------------------- Пусть у Вас есть некий Python файл ``script.py``. .. code:: python def main(): print("Hello world!") if __name__ == "__main__": main() Чтобы запустить программу, необходимо открыть терминал (Windows: ``Powershell``, macOS: ``Terminal``). Далее потребуется создать виртуальное окружение с помощью команды ``python -m venv venv`` и активировать его: 1. Для Windows: ``.\venv\Scripts\activate``. 2. Для macOS: ``source venv\bin\activate``. Если на любом из этапов ``PowerShell`` выводит ошибку, связанную с отсутствием прав, Вам понадобится изменить политику выполнения. Выполните следующие два шага: 1. Запустите ``PowerShell`` через опцию "Запуск от имени администратора". 2. Разрешить запуск скриптов Enable running unsigned scripts by entering: .. code:: text set-executionpolicy remotesigned Если у Вас возникнут любые другие проблемы во время активации окружения, попросите о помощи в чате курса. После успешной активации в начале строки появится метка ``(venv)``. Теперь можно запустить программу через команду ``python script.py`` и получить вывод ``Hello world!``. Данная команда будет работать без проблем, если её запуск происходит из той же папки, где находится ``script.py``. Чтобы перейти в нужную папку, используйте комманду ``cd "path_to_directory"`` (в кавычках укажите нужный путь). Также можно вызвать ``.py`` файл, используя полный путь до этого файла. Например: .. code:: shell python "full_path_to_directory_with_script/script.py" Если ``python`` не опознан как имя командлета, Вам понадобится установить Python. Инструкцию по установке можно найти в инструкции по подготовке к прохождению курса :ref:`starting-guide-label`. Запуск программ с пользовательскими модулями -------------------------------------------- Попробуем запустить файл ``start.py`` для лабораторной работы. Для этого выполним следующие шаги: 1. Перейти в папку проекта ``cd C:\Users\user\Documents\20XX-2-level-labs``. 2. Запустить нужный файл через относительный путь ``python lab_N_lab_name/start.py``. При запуске терминал выводит ошибку: .. code:: shell Traceback (most recent call): File ...., line 5 in from lab_N_lab_name.main import lab_function ModuleNotFoundError: No module named 'lab_N_lab_name' Почему же? Когда мы запускаем данный файл в среде разработки, всё работает без проблем! Что не так с терминалом? Папка ``lab_N_lab_name`` никуда не исчезла, она всё ещё находится в нашей текущей папке. Ответ на эти вопросы более замысловатый. Нам нужно понимать, как Python импортирует модули и библиотеки. Чтобы использовать скачанные библиотеки и импортированные модули, Python требуется знать положение их файлов. По умолчанию, Python знает несколько базовых мест, где хранятся эти файлы на компьютере. Их можно увидеть при выполнении команды ``python -c "import sys;print(sys.path)"``. Среди них будут только стандартные папки, в которых Python будет пытаться искать библиотеки: .. code:: text [ '/Users/alexanderdemidovskij/.pyenv/versions/3.10.8/lib/python310.zip', '/Users/alexanderdemidovskij/.pyenv/versions/3.10.8/lib/python3.10', '/Users/alexanderdemidovskij/.pyenv/versions/3.10.8/lib/python3.10/lib-dynload', '/Users/alexanderdemidovskij/Documents/hse/2022-2-level-ctlr/venv/lib/python3.10/site-packages' ] Поэтому, если модуль, который мы пытаемся импортировать, не находится в подпапках этих путей, Python выдаст ошибку. Чтобы решить эту проблему, Вам понадобится эксплицитно добавить путь до Ваших пользовательских зависимостей в этот список стандартных путей. Рекомендуется добавить их в системную переменную ``PYTHONPATH`` через терминал: 1. Для Windows: ``$env:PYTHONPATH = "$pwd;" + $env:PYTHONPATH``. 2. Для macOS: ``export PYTHONPATH=$pwd:$PYTHONPATH``. Переменная ``pwd`` возвращает путь до текущей рабочей папки (в которой Вы находитесь на момент работы с терминалом). Теперь попробуйте запустить программу снова через ``python lab_N_lab_name/start.py``. Если всё работает корректно, поздравляем! У Вас есть шанс получить самую высокую оценку за лабораторную работу. Если нет, попросите о помощи в чате курса.