У меня есть программа на Python, которую я создаю, и которую можно запустить любым из двух способов: во-первых, вызвать «python main.py», который запрашивает ввод данных в дружественной манере, а затем запускает ввод пользователя через программу. Другой способ - вызвать «python batch.py -file- », который пропустит весь дружественный сбор ввода и выполнит ввод всего файла за один раз.
Проблема в том, что когда я запускаю «batch.py», он импортирует некоторые переменные / методы / и т. Д. Из «main.py», и когда он запускает этот код:
import main
в первой строке программы он сразу же выдает ошибку, потому что пытается запустить код в «main.py».
Как я могу остановить запуск Python кода, содержащегося в «основном» модуле, который я импортирую?
источник
Из-за того, как работает Python, ему необходимо запускать ваши модули при их импорте.
Чтобы предотвратить выполнение кода в модуле при импорте, но только при непосредственном запуске, вы можете защитить его следующим образом
if
:Возможно, вы захотите поместить этот код в
main()
метод, чтобы вы могли либо выполнить файл напрямую, либо импортировать модуль и вызватьmain()
. Например, предположим, что это в файлеfoo.py
.Эта программа может быть запущена либо путем перехода
python foo.py
, либо из другого скрипта Python:источник
Используйте
if __name__ == '__main__'
идиому -__name__
это специальная переменная, значение которой равно,'__main__'
если модуль запускается как скрипт, и имя модуля, если оно импортировано. Так что вы бы сделали что-то вродеисточник
К сожалению, нет. Это часть того, как работает синтаксис импорта, и важно, чтобы он это делал - помните,
def
что на самом деле что-то выполняется, если бы Python не выполнял импорт, вы бы застряли без функций.Так как у вас, вероятно, есть доступ к файлу, вы можете посмотреть, что является причиной ошибки. Может быть возможно изменить вашу среду, чтобы предотвратить возникновение ошибки.
источник
Поместите код в функцию, и он не запустится, пока вы не вызовете функцию. Вы должны иметь основную функцию в вашем
main.py
. с утверждением:Затем, если вы звоните функция будет работать. Если вы импортируете , это не будет. Кроме того, вы должны, вероятно, переименовать что-то еще для ясности.
python main.py
main()
main.py
main.py
источник
Было предложение по улучшению Python PEP 299, целью которого было заменить
if __name__ == '__main__':
идиомуdef __main__:
, но оно было отклонено. Это все еще хорошее чтение, чтобы знать, что следует иметь в виду при использованииif __name__ = '__main__':
.источник
Вы можете написать свой "main.py" так:
источник
Хотя вы не можете использовать
import
без запуска кода; есть довольно быстрый способ ввода переменных; с помощьюnumpy.savez
которого переменные хранятся в виде пустых массивов в файле .npz. После этого вы можете загрузить переменные, используяnumpy.load
.Смотрите полное описание в документации Scipy
Обратите внимание, что это касается только переменных и массивов переменных, а не методов и т. Д.
источник
Попробуйте просто импортировать нужные функции из main.py? Так,
Возможно, вы назвали функцию в batch.py так же, как в main.py, и при импорте main.py программа запускает функцию main.py вместо функции batch.py; выполнение вышеизложенного должно исправить это. Я надеюсь.
источник
import main
НЕ импортирует все из main в текущее пространство имен. Он добавляет только одинmain
символ в текущем пространстве имен, поэтому столкновения не могут произойти.