.. _run-in-terminal-label: ================================== Запуск Python программ в терминале ================================== .. contents:: Содержание: :depth: 3 Это короткая инструкция по запуску Python программ в терминале (Unix) или ``cmd`` (Windows). .. _running-code: Запуск простой программы без зависимостей ========================================= Попробуем запустить файл ``start.py`` лабораторной работы ``lab_N_lab_name`` в проекте ``2-level-labs``. 1. Откройте терминал (Windows: ``PowerShell``, macOS: ``Terminal``). 2. Перейдите в папку проекта ``cd C:\\2-level-labs`` (полный путь зависит от того, где находится проект). 3. Создайте виртуальное окружение с помощью команды ``python -m venv venv``. 4. Активируйте виртуальное окружение: 1. Для Windows: ``.\venv\Scripts\activate``. 2. Для macOS: ``source venv\bin\activate``. После успешной активации в начале строки появится метка ``(venv)`` 5. Запустите программу через команду из корня проекта ``python lab_N_lab_name/start.py``. Запуск программ с пользовательскими модулями ============================================ Попробуем запустить файл ``start.py`` для лабораторной работы. Для этого выполним шаги 1-4 из :ref:`блока о запуске простой программы `. Затем установим зависимости из ``requirements.txt`` с помощью команды ``python -m pip install -r requirements.txt``. Наконец, запустим программу с помощью ``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``. Если всё работает корректно, поздравляем! У Вас есть шанс получить самую высокую оценку за лабораторную работу. Если нет, попросите о помощи в чате курса. .. _terminal_faq: FAQ === Python не распознан как имя командлета -------------------------------------- Если ``python`` не опознан как имя командлета, Вам понадобится установить Python. Инструкцию по установке можно найти в `инструкции по подготовке к прохождению курса `__. Если Python установлен, удостоверьтесь, что он есть в путях компьютера ``Path`` и ``PYTHONPATH``. Воспользуйтесь инструкцией :ref:`pythonpath_on_windows`. PowerShell выводит ошибку об отсутствии прав -------------------------------------------- Если на любом из этапов ``PowerShell`` выводит ошибку, связанную с отсутствием прав, Вам понадобится изменить политику выполнения. Выполните следующие два шага: 1. Запустите ``PowerShell`` через опцию "Запуск от имени администратора". 2. Разрешить запуск скриптов: .. code:: text set-executionpolicy remotesigned 3. Для вопроса "Вы хотите изменить политику выполнения?" введите **A** и нажмите ``Enter``. Если у Вас возникнут любые другие проблемы во время активации окружения, попросите о помощи в чате курса.