每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。
问题是你通过将
mod1.py作为参数传递给解释器而将模块作为
__main__运行。
从PEP 328:
相对导入使用模块的
__name__属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何软件包信息(例如,将其设置为
'__main__'),则相对导入的解析就好像该模块是顶级模块一样,无论该模块实际位于文件系统上的哪个位置。
在Python 2.6中,他们添加了相对于主模块引用模块的功能。 PEP 366描述了更改。
更新:根据Nick Coghlan的建议,推荐的替代方法是使用-m开关运行软件包中的模块。



