【问题标题】:Python sibling directory import errorsPython同级目录导入错误
【发布时间】:2020-05-11 12:09:44
【问题描述】:

我的导入没有显示任何 linting 错误 (flake8),但在运行时会生成 ModuleNotFoundError。

应用程序可以从__main__.pybar.py 启动。两个模块都调用bar.py。调用__main__ 时应用程序似乎可以工作,但运行bar 时出现以下错误:

Traceback (most recent call last):
  File "a:/Git/repo/lib/data/bar.py", line 1, in <module>
    from src.foo import classA
ModuleNotFoundError: No module named 'src'

目录结构

repo
└── lib
    ├── src
    │   ├── __init__.py
    │   ├── __main__.py
    │   └── foo.py
    ├── data
    │   ├── __init__.py
    │   └── bar.py
    └── __init__.py

主要

from foo import classA

class classA:
    def dostuff(x):
        ...

酒吧

from src.foo import classA 

【问题讨论】:

  • from foo import classA 放入__init__.py 并尝试像from ..src.foo import classA 一样访问

标签: python module directory package python-import


【解决方案1】:

如果您尝试从模块导入,则需要确保为它提供与您要导入的文件在结构中的位置相关的上下文。

bar.py 中,您需要注意datasrc 处于同一级别,因此您必须在引用src 之前再上一级:from ..src.foo import ClassAfrom src.foo 在您的问题中等同于 from .src.foo,它将在 data 目录中搜索 foo

【讨论】:

  • 我现在收到 ValueError:尝试相对导入超出顶级包
  • 这可能是基于您的 PYTHONPATH 没有引用项目的根目录。这篇文章可能会帮助你调整:stackoverflow.com/questions/30669474/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2012-05-03
  • 2019-06-19
相关资源
最近更新 更多