Запуск Python программ в терминале
Это короткая инструкция по запуску Python программ в терминале (Unix)
или cmd (Windows).
Запуск простой программы без зависимостей
Попробуем запустить файл start.py лабораторной работы lab_N_lab_name
в проекте 2-level-labs.
Откройте терминал (Windows:
PowerShell, macOS:Terminal).Перейдите в папку проекта
cd C:\<path-to-folder>\2-level-labs(полный путь зависит от того, где находится проект).Создайте виртуальное окружение с помощью команды
python -m venv venv.Активируйте виртуальное окружение:
Для Windows:
.\venv\Scripts\activate.Для macOS:
source venv\bin\activate.
После успешной активации в начале строки появится метка
(venv)Запустите программу через команду из корня проекта
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 через терминал:
Для Windows:
$env:PYTHONPATH = "$pwd;" + $env:PYTHONPATH.Для 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 выводит ошибку, связанную с
отсутствием прав, Вам понадобится изменить политику выполнения.
Выполните следующие два шага:
Запустите
PowerShellчерез опцию “Запуск от имени администратора”.Разрешить запуск скриптов:
set-executionpolicy remotesigned
3. Для вопроса “Вы хотите изменить политику выполнения?” введите
A и нажмите Enter.
Если у Вас возникнут любые другие проблемы во время активации окружения, попросите о помощи в чате курса.