我发现IPython和python以不同的方式处理本地模块的加载,我想知道是否有人可以解释为什么会发生这种情况。
假设我的项目结构为:
top_level/
src/
a.py
b.py
__init__.py
b.py
的内容是:
from src.a import foo
foo()
然后a.py
有一个函数foo
:
def foo():
print('It worked!')
档案__init__.py
为空白。
如果我从top_level
调用ipython和python,我会得到两个不同的结果:
为什么一个工作而另一个工作?有可能使python句柄类似于IPython,还是有更多的pythonic方法来处理这样的情况?
版本信息:
<小时/> 编辑以解释与“如何导入本地模块?”的区别?这个问题是关于IPython和Python如何处理本地模块导入之间的差异,而不是如何导入本地模块。
我还应该补充一点 - 虽然如果我将import语句更改为from a import foo
,我的示例是正确的 - 我(隐含地)试图避免这样做。我喜欢导入相对于某个顶级目录的所有内容的想法,以便在文件结构发生变化时更容易。例如,如果b.py
已从src
移至某个子目录src/core
,那么您需要通过并重写相对于{{1}新位置的所有导入}}。
答案 0 :(得分:0)
我无法向您解释为什么会发生这种情况,但如果您使b.py
文件看起来像这样,它可能适用于 python :
from a import foo foo()
对我来说,使用src.a
没有意义,因为src
是(相同的)目录。但同样,我不知道为什么一个有效,另一个无效。
Refer to the 3rd example on this answer