python-3.x ModuleNotFoundError:无法导入本地文件

aemubtdh  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(116)

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

/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

vm0i2vca

vm0i2vca1#

来自文档:
请注意,相对汇入是以目前模块的名称为基础。
我不能肯定地告诉你哪里出了问题,但是有一个味道:bettermod包有一个bettermod模块。你想做from bettermod.bettermod import MyBetterClass?我怀疑。在Python中,文件是命名空间,所以选择文件和目录名也是一个API设计。记住这一点。
我怀疑这个问题是因为名称恩怨而造成的。请尝试这个方法。如果您在bettermod目录中执行python,并指定import bettermod,您会汇入bettermod\bettermod.py。而且.是相对于bettermod.py模块。现在请尝试在bettermod套件目录上方的目录中执行python。它会正常运作,因为现在.会解析为bettermod封装的最大容量。
试试看:

import mymodule
mymodule.__file__

字符串
这将告诉你mymodule是什么。对于软件包,它将显示__init__.py的路径。这将帮助你确定自己的方向。同时查找PYHTONPATH以及如何使用它来确保你从正确的路径导入。

u91tlkcl

u91tlkcl2#

这里是很好的教程如何修复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

相关问题