Мне удобно разместить точку ввода моей программы в другом файле с __main__.py
. Ниже приведены два примера файлы, расположенные в том же пакете (test_1
):__main__.py Поведение, отличное от Python 2 и 3
__main__.py:
import sys
from main import main as entry_point
if __name__ == '__main__':
script_name = sys.argv[ 0 ]
print("Script name: {}".format(script_name))
sys.exit(entry_point(sys.argv[ 1: ]))
main.py:
import sys
def main(args = None):
if args is None:
args = sys.argv[ 1 : ]
print("Program arguments are: {}".format(str(args)))
return len(args)
При вызове сценария с python3 -m test_1 1 2 3 4
, я получаю следующее сообщение об ошибке: «ImportError: Нет модуля с именем «main», но при вызове с python2 -m test_1 1 2 3 4
я получаю ожидаемое поведение выполнения скрипта.
Почему импорт работает по-разному между python2 (2.7.12) и python3 (3.5.2) и что мне нужно сделать, чтобы выполнить поведение, которое я пытаюсь достичь?
https://stackoverflow.com/questions/12172791/changes-in-import-statement-python3 –
@TavianBarnes Спасибо. Я не знал, что относительный импорт в файл '__main __. Py' работал в Python 3. – FluxIX