Запуск Python программ в терминале
Это короткая инструкция по запуску Python программ в терминале (Unix)
или cmd (Windows).
Запуск простой программы без зависимостей
Пусть у Вас есть некий Python файл script.py.
def main():
print("Hello world!")
if __name__ == "__main__":
main()
Чтобы запустить программу, необходимо открыть терминал
(Windows: Powershell, macOS: Terminal).
Далее потребуется создать виртуальное окружение
с помощью команды python -m venv venv и активировать его:
Для Windows:
.\venv\Scripts\activate.Для macOS:
source venv\bin\activate.
Если на любом из этапов PowerShell выводит ошибку, связанную с
отсутствием прав, Вам понадобится изменить политику выполнения.
Выполните следующие два шага:
Запустите
PowerShellчерез опцию “Запуск от имени администратора”.Разрешить запуск скриптов Enable running unsigned scripts by entering:
set-executionpolicy remotesigned
Если у Вас возникнут любые другие проблемы во время активации окружения, попросите о помощи в чате курса.
После успешной активации в начале строки появится метка (venv).
Теперь можно запустить программу через команду python script.py
и получить вывод Hello world!.
Данная команда будет работать без проблем, если её запуск происходит из той
же папки, где находится script.py. Чтобы перейти в нужную папку,
используйте комманду cd "path_to_directory" (в кавычках укажите нужный путь).
Также можно вызвать .py файл, используя полный путь до этого файла.
Например:
python "full_path_to_directory_with_script/script.py"
Если python не опознан как имя командлета, Вам понадобится установить Python.
Инструкцию по установке можно найти в инструкции по подготовке к прохождению курса
starting-guide-label.
Запуск программ с пользовательскими модулями
Попробуем запустить файл start.py для лабораторной работы.
Для этого выполним следующие шаги:
Перейти в папку проекта
cd C:\Users\user\Documents\20XX-2-level-labs.Запустить нужный файл через относительный путь
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.
Если всё работает корректно, поздравляем! У Вас есть шанс получить самую высокую оценку за лабораторную работу. Если нет, попросите о помощи в чате курса.