【问题标题】:Python not finding module in same folder when called from a script in another folder从另一个文件夹中的脚本调用时,Python 在同一文件夹中找不到模块
【发布时间】:2021-04-26 11:37:00
【问题描述】:

我有一组交互的 Python 脚本。我从父目录 (parent/main.py) 调用我的“主”脚本,该脚本从子目录 (parent/child/foo.py) 中的脚本 foo 导入函数,然后从另一个程序栏 (parent /child/bar.py)。当我尝试运行 main.py 时,我收到了 bar.py 的 ModuleNotFoundError。

我阅读了命名空间模块,据我所知,我没有做错任何事情,因为显然“from child.foo import myfunc”应该没问题?

堆栈跟踪,每个请求:

Traceback (most recent call last):
  File ".\main.py", line 2, in <module>
    import child.foo
  File "C:\biglongpath\parent\child\run_n1.py", line 1, in <module>
    from bar import myfunc as mf
ModuleNotFoundError: No module named 'bar'

【问题讨论】:

  • 您不必在 child.foo.py 中包含 .py
  • 您能否在描述中添加 A) 正在崩溃的导入代码和 B) 堆栈跟踪?
  • @MitchellOlislagers 哎呀,我实际上没有——错字。道歉。

标签: python python-3.x namespaces python-module


【解决方案1】:

在 Python 3.x 中你需要编写:

from child.foo import myfunc

在 Python 2.7 中:

您应该在每个子目录中包含一个__init__.py 文件(即使它是空的)。

【讨论】:

  • 这行得通(3.x)——谢谢。你能解释一下它是如何工作的吗?我的猜测只是导入“复制”代码,所以一切都需要从最外层开始,但我不知道这有多准确。还要为其他人澄清——这是给 bar 的(例如应该是 child.bar)
  • @LiamWilson 导入是__import__ 函数的语法糖(在文档here 中阅读更多内容)。最简单的答案是它在标准库中的实现方式(我知道,不是很满意)。但基本上,当您在 .py 文件上运行 python 时,python 首先解析文件,进行导入,为声明的变量腾出空间,并提供一些基本检查以确保您与空格/制表符等保持一致。该过程的一部分正在加载您请求的模块。但是,它必须是 __import__ 期望的格式:)
  • 啊,明白了。谢谢!
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 2012-06-07
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多