ModuleNotFoundError:无法导入本地文件

问题描述 投票:0回答:2

我有一个包含多个文件的模块,其结构如下:

/bettermod/
├── __init__.py
├── api.py
├── bettermod.py
├── errors.py
└── loggers.py

bettermod.py
,我正在尝试导入两件事:

  • 一个名为
    API
    的课程,来自
    api.py
  • 整个
    errors.py
    文件

首先,这很简单,我只需要这样做:

from .api import API

但是,对于导入整个

errors.py
文件,我遇到了问题;我正在尝试这样做:

from . import errors

根据这个python文档,这应该可以工作,但它会引发以下错误:

  File "/path/to/bettermod/bettermod.py", line 10, in <module>
    from . import errors
ModuleNotFoundError: No module named 'bettermod'

编辑:调试时,我发现

__name__
等于
bettermod.bettermod

python-3.x python-import
2个回答
0
投票

来自文档

请注意,相对导入基于当前模块的名称。

我无法确定地告诉你出了什么问题,但有一种味道:

bettermod
包有一个
bettermod
模块。你想做
from bettermod.bettermod import MyBetterClass
吗?我对此表示怀疑。在 Python 文件中,文件是命名空间,因此选择文件和目录名称也是一种 API 设计。请记住这一点。

我怀疑问题被名称冲突掩盖了。尝试这个。如果您在

python
目录中运行
bettermod
并说
import bettermod
您正在导入
bettermod\bettermod.py
。而
.
是相对于
bettermod.py
模块而言的。现在尝试在
python
包目录上方的目录中运行
bettermod
。它会起作用,因为现在
.
解析为
bettermod
包。

尝试:

import mymodule
mymodule.__file__

这将告诉您

mymodule
是什么。对于软件包,它将显示
__init__.py
的路径。这将帮助您确定自己的方向。另请参阅
PYHTONPATH
以及如何使用它来确保从正确的路径导入。


0
投票

这是如何修复的好教程https://fortierq.github.io/python-import/

下一个文件结构

project
└── src
    ├── db
    │    └── models.py
    └── scripts
         └── script.py

对我来说,下一个施工工作是在

script.py

import sys
from pathlib import Path


path_root = Path(__file__).parents[1]
print(path_root)
sys.path.append(str(path_root))

from db.models import Station
© www.soinside.com 2019 - 2024. All rights reserved.