这是正确的版本:
如果失败,ImportError: No module named foo
则是因为尚未设置PYTHONPATH
包含的目录myproject/
。
恐怕其他人会建议一些技巧,让您避免设置PYTHONPATH
。我敦促您不要理them它们。这就是PYTHONPATH
存在的原因:告诉Python在哪里寻找要加载的代码。它功能强大,文档合理,可移植到许多环境中。人们为了避免设置技巧而玩技巧并不是这些。
显式相对进口 工作,即使没有PYTHONPATH
被设置,因为它可能只是走了目录层次结构,直到找到合适的位置,它并不需要找到顶部,然后往下走。但是,它在您作为命令行参数传递给python
(或等效地,直接用#!/usr/bin/python
一行调用)的脚本中不起作用。这是因为在这两种情况下,它都成为__main__
流程的模块。无处可走__main__
-它已经在顶部了!如果您通过@H_419_31@导入 该模块在脚本中调用代码,那么就可以了。也就是说,比较:
至
您可以通过不直接执行脚本模块,而是创建一个bin/myscript
执行导入并可能调用主函数的方法来利用此功能:
比较一下Twisted的命令行脚本的定义方式:http ://twistedmatrix.com/trac/browser/trunk/bin/twistd