Запустите скрипт Python с .bat, который импортирует функции из других скриптов

Я пытаюсь запустить свой скрипт 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\ , вам нужно перейти в эту папку cd D:\Users\User\Documents\programming\ , прежде чем запускать скрипт Python.

furas 25.12.2020 08:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
3 320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если 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 17.11.2021 15:30

@Zack, если у вас есть модуль /full/path/other_folder/Aladdin, то вам нужно вставить /full/path/other_folder без Aladdin. Если он у вас есть в подпапке APP_FOLDER/subfolder/Aladdin, вы можете использовать os.path.join(APP_FOLDER, "subfolder") для создания full path для вставки.

furas 17.11.2021 18:46

Другие вопросы по теме