我一直在这里:
还有很多我没有复制的URL,有些在SO上,有些在其他网站上,当我以为我会很快找到解决方案的时候。
永远反复出现的问题是:如何解决这个“尝试在非包中相对导入”消息?
ImportError: attempted relative import with no known parent package
我在pep-0328上构建了一个包的精确副本:
package/__init__.pysubpackage1/__init__.pymoduleX.pymoduleY.pysubpackage2/__init__.pymoduleZ.pymoduleA.py
导入是从控制台完成的。
我确实在相应的模块中制作了名为spam和鸡蛋的函数。自然,它不起作用。答案显然在我列出的第四个URL中,但对我来说都是校友。我访问的一个URL上有这样的回应:
相对导入使用模块的name属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如设置为main),则相对导入将被解析为该模块是顶层模块,而不管该模块实际位于文件系统上的位置。
上面的回答看起来很有希望,但对我来说都是象形文字。所以我的问题,如何让Python不返回我“尝试在非包中相对导入”?据说有一个涉及-m的答案。
有人能告诉我为什么Python会给出错误消息,“非包”是什么意思,为什么以及如何定义“包”,以及精确的答案用简单易懂的术语让幼儿园的孩子理解。