我注意到我已经提出了大约5个问题,询问有关相关进口,每个都有工作解决方案,但有不同的情况。我阅读的文档越多,越多地尝试不同的案例越多,我越来越困惑,并质疑我是否正确地阅读了单词。更多相关进口奇怪:..记号
从PEP 328:
A single leading dot indicates a relative import, starting with the current package. Two or more leading dots give a relative import to the parent(s) of the current package, one level per dot after the first.
我的理解是, “当前包” 是关键字在这里。什么是“当前套餐”?它是执行开始的模块包吗? (即:__名称__ ==“__ main __”的文件)。
无论如何,这里是我使用..
表示法的简单情况。
main/ lib/ __init__.py myLib.py plugin/ __init__.py needLib.py run.py
run.py进口needLib:from plugin import needLib
needLib进口MYLIB:from ..lib import myLib
发生了什么事在我的脑海:(needLib)上升一个包,进入lib下,抢MYLIB
下面是我如何执行:python run.py
结果:试图相对导入超越顶层包年龄
但是,当我将导入电话更改为from .lib import myLib
时,它工作。
我不明白为什么后者的作品和..
表示法没有。当然,main
是不是一个包,所以怎么样我只是在一个init.py
有奉送,导致
main/ lib/ __init__.py myLib.py other/ __init__.py needLib.py __init__.py run.py
但是,这并没有区别;仍然在尝试导入超出顶层包
退房这个问题:python: forcing relative imports to search from script file
的..
符号确实工作!现在我想到了,我不明白它为什么起作用。该场景中的执行从相对导入发生的地方开始2级,而在此场景中的执行从相对导入发生的地方开始1级。除了我开始执行的地方外,情况完全相同。
两者都是我说的“去一个目录,进入lib包,并抓住你想要的模块”。
这种情况与参考情况的关键区别是什么?为什么..
在那里工作,但不在这里?我使用2.6有什么关系吗?或者也许我是如何执行它? python run.py