【问题标题】:Importing local modules in python v. IPython在 python v. IPython 中导入本地模块
【发布时间】: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.pysrc 移动到某个子目录src/core,那么您需要检查并重写相对于b.py 的新位置的所有导入。

【问题讨论】:

  • 你有没有试过把整个路径放好???
  • @Micolho,他不仅在问如何让它工作,他还在问为什么它在 iPython 上的工作方式不同

标签: python import python-import


【解决方案1】:

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

from a import foo
foo()

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

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2012-11-11
    • 1970-01-01
    • 2018-10-13
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多