__main__.py Python 2和3之间的行为不同

时间:2016-10-06 01:59:35

标签: python python-2.7 python-3.x

我发现将程序入口点放在与__main__.py不同的文件中很方便。以下是位于同一个包(test_1)中的两个示例文件:

__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 个答案:

答案 0 :(得分:0)

对于Python 3,__main__.py需要使用显式相对导入,因此from .main import main as entry_point代替from main import main as entry_point