2016-10-06 2 views
0

Мне удобно разместить точку ввода моей программы в другом файле с __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) и что мне нужно сделать, чтобы выполнить поведение, которое я пытаюсь достичь?

+1

https://stackoverflow.com/questions/12172791/changes-in-import-statement-python3 –

+0

@TavianBarnes Спасибо. Я не знал, что относительный импорт в файл '__main __. Py' работал в Python 3. – FluxIX

ответ

0

Для Python 3, __main__.py необходимо использовать прямой относительный импорт, поэтому from .main import main as entry_point вместо from main import main as entry_point.

Смежные вопросы