【发布时间】:2018-11-03 22:21:06
【问题描述】:
我发现 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 的方式来处理这样的情况?
版本信息:
- Python:3.6.3
- IPython:6.1.0(带有 3.6.3 Python)
编辑以解释与“如何导入本地模块?”的区别这个问题是关于 IPython 和 Python 如何处理本地模块导入之间的差异,而不是如何导入本地模块。
我还应该补充一点——虽然如果我将导入语句更改为from a import foo,我的示例确实可以工作——但我(隐含地)试图避免这样做。我喜欢导入与某个顶级目录相关的所有内容的想法,以便在文件结构发生变化时更容易。例如,如果b.py 从src 移动到某个子目录src/core,那么您需要检查并重写相对于b.py 的新位置的所有导入。
【问题讨论】:
-
你有没有试过把整个路径放好???
-
@Micolho,他不仅在问如何让它工作,他还在问为什么它在 iPython 上的工作方式不同
标签: python import python-import