我发现将程序入口点放在与__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)之间的工作方式不同,我需要做些什么才能完成我想要实现的行为?
答案 0 :(得分:0)
对于Python 3,__main__.py
需要使用显式相对导入,因此from .main import main as entry_point
代替from main import main as entry_point
。