Я пытаюсь запустить свой скрипт Python через .bat. Сценарий импортирует функции из других сценариев, и это отлично работает при работе в среде IDE (Spyder), однако, когда я запускаю .bat, я получаю сообщение об ошибке, неспособном импортировать модуль.
.bat выглядит следующим образом
"D:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe" "D:\Users\User\Documents\programming\test.py"
Я получаю следующую ошибку
Traceback (последний последний вызов): Файл "D:\Users\User\Documents\programming\test.py", строка 1, в из SFTPСкачать импортировать скачатьSFTP ModuleNotFoundError: нет модуля с именем «SFTPDownload»
Что мне нужно добавить в .bat, чтобы забрать мою функцию в SFTPDownload.py. Он находится в той же папке, что и test.py.
Заранее спасибо.
Если SFTPDownload.py
ваш файл в папке D:\Users\User\Documents\programming\
то вам нужно перейти в эту папку, прежде чем запускать скрипт python
cd D:\Users\User\Documents\programming\
D:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe test.py
Система может запускать ваш пакет в другой папке (которая используется как Current Working Directory
), а затем скрипт Python ищет ваши файлы в этой папке.
В Python вы можете проверить Current Working Directory
print( os.getcwd() )
См. также: Какой текущий каталог в пакетном файле?
В конце концов, в скрипте Python перед импортом SFTPDownload
вы можете добавить папку D:\Users\User\Documents\programming\
в специальный список sys.path
, который python использует для поиска импортированных файлов.
import sys
sys.path.insert(0, r'D:\Users\User\Documents\programming\')
import SFTPDownload
чтобы сделать его более универсальным (чтобы он работал, когда вы перемещаете test.py
и SFTPDownload.py
в другую папку), вы можете попробовать
import sys
import os
APP_FOLDER = os.path.abspath(os.path.dirname(__file__))
#APP_FOLDER = os.path.abspath(os.path.dirname(sys.argv[0]))
sys.path.insert(0, APP_FOLDER)
import SFTPDownload
привет @furas, я столкнулся с аналогичной проблемой, но мой модуль импорта «Аладдин» находится в другой папке (и, следовательно, в пути к файлу). как я могу заставить его работать в этом случае?
@Zack, если у вас есть модуль /full/path/other_folder/Aladdin
, то вам нужно вставить /full/path/other_folder
без Aladdin
. Если он у вас есть в подпапке APP_FOLDER/subfolder/Aladdin
, вы можете использовать os.path.join(APP_FOLDER, "subfolder")
для создания full path
для вставки.
Если
SFTPDownload.py
— это ваш файл в папкеD:\Users\User\Documents\programming\
, вам нужно перейти в эту папкуcd D:\Users\User\Documents\programming\
, прежде чем запускать скрипт Python.