2016-10-06 5 views
0

私のプログラムエントリポイントを__main__.pyから別のファイルに配置すると便利です。以下は、同じパッケージ(test_1)にある2つのサンプルファイルは、以下のとおりです。__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ありがとうございます。私はPython 3で働いていた '__main __。py'ファイルで相対的なインポートを認識しませんでした。 – FluxIX

答えて

0

Python 3の場合、__main__.pyは明示的な相対インポートを使用する必要があるため、from main import main as entry_pointの代わりにfrom .main import main as entry_pointを使用する必要があります。

関連する問題