导入模块会在顶层执行代码,并且该模块的“全局”命名空间被导入为模块的名称
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']
>>>
如果您要运行的代码位于文件的顶层,只需导入模块即可执行代码并让您在一个方便的包中访问其“全局”命名空间。如果您要运行的代码不在顶层(例如,如果它在一个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()