Запуск Python программ в терминале

Это короткая инструкция по запуску Python программ в терминале (Unix) или cmd (Windows).

Запуск простой программы без зависимостей

Попробуем запустить файл start.py лабораторной работы lab_N_lab_name в проекте 2-level-labs.

  1. Откройте терминал (Windows: PowerShell, macOS: Terminal).

  2. Перейдите в папку проекта cd C:\<path-to-folder>\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 из блока о запуске простой программы.

Затем установим зависимости из requirements.txt с помощью команды python -m pip install -r requirements.txt.

Наконец, запустим программу с помощью python lab_N_lab_name/start.py.

При запуске терминал выводит ошибку:

Traceback (most recent call):
   File ...., line 5 in <module>
      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 будет пытаться искать библиотеки:

[
    '/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.

Если всё работает корректно, поздравляем! У Вас есть шанс получить самую высокую оценку за лабораторную работу. Если нет, попросите о помощи в чате курса.

FAQ

Python не распознан как имя командлета

Если python не опознан как имя командлета, Вам понадобится установить Python. Инструкцию по установке можно найти в инструкции по подготовке к прохождению курса.

Если Python установлен, удостоверьтесь, что он есть в путях компьютера Path и PYTHONPATH. Воспользуйтесь инструкцией Providing PYTHONPATH on Windows.

PowerShell выводит ошибку об отсутствии прав

Если на любом из этапов PowerShell выводит ошибку, связанную с отсутствием прав, Вам понадобится изменить политику выполнения. Выполните следующие два шага:

  1. Запустите PowerShell через опцию “Запуск от имени администратора”.

  2. Разрешить запуск скриптов:

set-executionpolicy remotesigned

3. Для вопроса “Вы хотите изменить политику выполнения?” введите A и нажмите Enter.

Если у Вас возникнут любые другие проблемы во время активации окружения, попросите о помощи в чате курса.