Python ImportError при выполнении через планировщик windows
Я сделал несколько поисков по этой теме и нашел несколько предыдущих тем, но я не понял ни одного из них, так как я все еще начинающий в Python.
У меня есть сценарий Python, который имеет несколько длинных строковых переменных, хранящихся в различных файлах.py в подкаталоге. Я импортирую файлы.py из этого подкаталога при запуске сценария. E сть __init__.py
файл в подкаталоге. Единственная причина, по которой я использую эту настройку, заключается в том, что длинные строковые переменные, которые я храню в этих других файлах, затруднят чтение кода, поскольку они являются строками SQL и могут занимать по 50-100 строк каждая.
Все отлично работает, когда я запускаю этот скрипт через PyCharm.
Однако когда я запускаю сценарий через планировщик Windows или пакетный файл, я получаю ошибку ImportError для всех файлов.py в подкаталоге. Проблема определенно связана с тем, что скрипт python не знает, где искать эти файлы.py, когда он запускается через планировщик Windows. Но я не уверен, как это исправить.
Действие для задачи планировщика заключается в запуске Python Exe
D:\Python35\python.exe
с аргументом в качестве сценария
D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py
Итак, полное действие выглядит так:
D:\Python35\python.exe "D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py"
Подкаталог, в котором хранятся длинные строковые переменные.py файлы:
D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0\
Импорт выглядит так:
from dcitechnicalperformance.dcitechnicalperformance0.dciquer import nzsqldciwk
Кто-нибудь знает, как решить эту проблему? Буду признателен за любую оказанную помощь.
1 ответ
Добрый день,
Прежде всего, я не знаю, какой смысл хранить длинные SQL-запросы в модуле, я ни в коем случае не эксперт, а что-то вроде файла JSON (или, черт возьми, даже хранить их в таблице внутри sql) кажется лучшим подходом.
О вашей проблеме, я думаю, что она находится в текущем каталоге, где запускается задача, позвольте мне объяснить:
- В PyCharm, когда вы запускаете код, он запускается из местоположения файла, и, таким образом, он может найти каталог с модулем.
- При запланированной задаче она может запускаться в другом каталоге, и поэтому не может найти модуль, так как каталог отсутствует.
Если вы решите придерживаться своего упрека, вероятным решением будет создание.bat-файла, который просматривает местоположение проекта:
@ECHO OFF
D:
cd D:\python\tableaudatasourcebuilds\dcitechnicalperformance\
D:\Python35\python.exe dcitechnicalperformance0.py
И это должно работать.