Python: 'ModuleNotFoundError' 尝试从文件导入模块时

Python: 'ModuleNotFoundError' when trying to import module from files

我想从 test.py 访问 config/cache.py 而且,我需要像从config/env.pydatabase/modules/game.py 但我总是收到此错误:

ModuleNotFoundError: No module named 'modules'

我的项目树:

project
├─ modules
│  ├─ cache
│  │  ├─ playtime.py
│  │  └─ __init__.py
│  ├─ config
│  │  ├─ cache.py
│  │  ├─ database.py
│  │  ├─ env.py
│  │  ├─ yaml.py
│  │  └─ __init__.py
│  ├─ database
│  │  └─ models
│  │     ├─ game.py
│  │     ├─ member.py
│  │     ├─ room.py
│  │     ├─ wiki.py
│  │     └─ __init__.py
│  ├─ room
│  ├─ utils
│  │  ├─ functions.py
│  │  ├─ logger.py
│  │  └─ __init__.py
│  └─ __init__.py
├─ run.py
└─ test
   └─ test.py

初始化文件是这样的:

from .config import *
from .utils import *
from .database import *
from .cache import *

Python 自动将主脚本所在的文件夹插入到 sys.path,这是一个包含可在其中查找包和模块的文件夹的列表。

因此,如果 test.py 在文件夹 project 中,该文件夹将在 sys.path 中,然后您可以导入 modules 包及其任何子包或模块。

import module  # main package module
from module import config   # subpackage config
from module.config import env  # module env

(以防万一,模块是一个以 .py 结尾的文件,包是一个文件夹,里面有一个名为 __init__.py 的文件,并且可以选择子包 and/or 个模块。)

所以一个解决方案是将文件 test.py 移动到 projects

另一种方法是在导入之前手动将文件夹 projects(作为 str)添加到 sys.path,这是一个简单的 python list

import sys
sys.append('.../projects')
from modules.config import env