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