Запуск кода Python через терминал. Ошибка No such file or directory

Запускаю консольный файловый менеджер, терминал выдает ошибку - не найден нужный файл.

Проверяю через ранер Pycharm'a через os.getcwd(), показывает нужную директорию, ту, в которой находится файл с кодом. введите сюда описание изображенияПри запуске терминала он указывает совсем другой путь. В чем проблема?введите сюда описание изображения


Ответы (2 шт):

Автор решения: Alex Titov

Вообще-то каталоги запуска и терминала, и "ранера" в PyCharm настраиваются, но чтобы минимизировать проблемы, можете искать файл относительно файла с текстом программы, т.е. для данных в том же каталоге можно использовать pathlib.Path(__file__).parent / 'my_data_file.txt'. Тем более, при вызове "без PyCharm" (из командной строки) текущий каталог тоже може быть где угодно.

Могут быть тонкости при упаковке программы в один исполняемый файл (не проверял).

Ну а еще разумнее файл данных передать в параметрах командной строки.

→ Ссылка
Автор решения: Эникейщик

Запуск запуск в командной строке и через PyCharm это два разных процесса (непохожих снаружи, внутри-то там одно и то же).

В первом случае запускается исполняемый интерпретатор python, который находится где-то в служебных папках, который ищет переданый ему аргументом файл. В вашем случае передано main.py. Путь относительный и очевидно, что в папке с интерпретатором такого файла нет. Потому и выдается ошибка.

В запуске через PyCharm тоже запускается инерпретатор (системый или пичарный, сейчас неважно) и ему неявно передается путь до запускаемого скрипта.

Т.е. в первом случае вы запускаете

/какаято/папка/на/системном/диске/python main.py

а во втором случае

/какаято/папка/на/системном/диске/python /полный/путь/до/файла/main.py

Поэтому при запуске через консоль нужно или предварительно перейти в папку с файлом, или указываеть полный путь до файла.

А os.getcwd() вам покажет ту папку, в которой находится скрипт. Но выполняется-то у вас не скрипт, а интерпретатор и рабочая директория у него совсем другая. Запустите файл где написано

import os
os.getcwd()

и эти же две строчки просто в интерпретаторе питона. Результаты будут разные.

→ Ссылка