gpt4 book ai didi

python - 在 python 和 IPython 中导入本地模块

转载 作者:行者123 更新时间:2023-12-05 07:33:37 24 4
gpt4 key购买 nike

我发现 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,我会得到两个不同的结果:

IPython works, python does not.

为什么一个有效而另一个无效?是否有可能使 python 句柄类似于 IPython,或者是否有更 pythonic 的方式来处理这种情况?

版本信息:

  • python :3.6.3
  • IPython:6.1.0(使用 3.6.3 Python)


编辑以解释与“如何导入本地模块?”的不同之处。这个问题是关于 IPython 和 Python 如何处理本地模块导入的差异,而不是关于如何导入本地模块。

我还应该补充一点——如果我将 import 语句更改为 from a import foo,我的示例确实可以工作——我(含蓄地)试图避免这样做。我喜欢导入与某个顶级目录相关的所有内容的想法,以便在文件结构发生变化时更容易。例如,如果 b.pysrc 移动到某个子目录 src/core 那么你需要重写所有相对于 b.py 新位置的导入。

最佳答案

我无法向您解释为什么会发生这种情况,但如果您使 b.py 文件看起来像这样,它也许可以在 python 上运行:

from a import foo
foo()

对我来说,使用 src.a 没有意义,因为 src 是(相同的)目录。但同样,我不知道为什么一个有效而另一个无效。 Refer to the 3rd example on this answer

关于python - 在 python 和 IPython 中导入本地模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50513580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com