【问题标题】:Python: No module found even though it exists in directoryPython:即使它存在于目录中,也找不到模块
【发布时间】:2018-12-21 17:11:39
【问题描述】:

考虑我有以下项目结构:

+PROJECT
|  +models
|  |  =__init__.py
|  |  =client.py
|  |  =config.py
|
|  +tests
|  | =__init__.py
|  | =example.py
|  | =example_two.py
|
|  README.md
|  requirements.txt

当我尝试将一个类从客户端和一个变量从配置导入到 example.py 中时,如下所示:

from models.config import var 
from models.client import Class

我收到两个导入语句的 ModuleNotFound 错误。我知道这个问题之前已经被问过很多次了,但是这些解决方案并不能解决我的问题。我尝试将客户端和配置放在与测试文件夹相同的级别。但是,我收到了同样的问题。如果有人可以帮助我解决这个问题,那就太好了。

【问题讨论】:

  • 您从哪个文件夹运行它?命令是什么?
  • 我正在从 C:\user\documents\project\tests\ 运行 example.py
  • 您的测试脚本必须修改 sys.path 以插入 PROJECT 文件夹。
  • @Duncan 我尝试将我的项目目录附加到 PATH 但我仍然得到同样的错误。我检查了我的路径,项目文件夹的目录就在那里。我真的不明白我做错了什么
  • 创建PROJECT/__init__.py 并将其添加到路径中。

标签: python python-3.x class python-import diffbot


【解决方案1】:

您将需要进行相对导入 (PEP-328),但根据此 guide,您只能上到启动脚本的级别,在您的情况下是 tests 目录.

因此,您要么必须将 model 目录添加到路径中,要么将项目的源文件夹添加到站点包中的 .pth 文件中,如图所示 here

【讨论】:

  • 我在尝试相对导入时收到错误 E0402: Attempted relative import beyond top-level package.
【解决方案2】:

我想到了三种可能性:

  • 该模块仅适用于某些 python 版本(例如 3.5 但不适用于 3.6)。
  • 您的模块当前所在的路径未出现在 sys.path 中。
  • 您要使用的类必须在导入模块时指定,因为它没有在模块本身的 __init__.py 中指定。

据我所知,只有第一个选项可能会导致您的问题。
不过,我会快速检查一下

import sys
sys.path

如果确实缺少正确的路径..

sys.path.append('PathToModule')

【讨论】:

  • 我将我的项目目录附加到 PATH 但我仍然收到相同的 ModuleNotFound 错误。它在 diffbot 的存储库中说已更新为可在此处使用 python 3:github.com/diffbot/diffbot-python-client/pull/6。但是我不明白为什么他对 PATH 的 import sys 语句解决了他们的问题而不是我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2021-08-24
  • 2020-07-10
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多