モジュールをインポートすると、最上位でコードが実行され、そのモジュールの「グローバル」名前空間がモジュールの名前としてインポートされます
james@bodacious:~$cat test.py
def func():
pass
myname = "michael caine"
print "hello, %s" % myname
james@bodacious:~$python
Python 2.7.5 (default, Jul 12 2013, 18:42:21)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
hello, michael caine
>>> dir(test)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'func', 'myname']
>>>
実行したいコードがファイルの最上位にある場合は、モジュールをインポートするだけでコードが実行され、その「グローバル」名前空間にすべて 1 つの便利なパッケージでアクセスできます。実行したいコードが最上位にない場合 (たとえば、main()
一般的なトリックでのみトリガーされる関数内にある場合if __name__=="__main__"
)、その関数を自分で呼び出すことができます。
james@bodacious:~$cat test.py
def main():
print "hello there!"
if __name__=="__main__":
main()
james@bodacious:~$python
Python 2.7.5 (default, Jul 12 2013, 18:42:21)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.main()
hello there!
>>>
もちろん、インポートしたいファイルが sys.path にない可能性があるため、import
. 単純な解決策は を操作することかもしれませんがsys.path
、完全なパスを指定してモジュールをインポートする方法は? を使用したより良いソリューションについて説明しますimp.load_source()