【问题标题】:Python: 'ModuleNotFoundError' when trying to import module from filesPython:尝试从文件导入模块时出现“ModuleNotFoundError”
【发布时间】:2021-12-05 16:04:17
【问题描述】:

我想从 test.py 访问 config/cache.py 而且,我需要像从 config/env.py 这样的内部访问database/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

和inits文件是这样的:

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

【问题讨论】:

    标签: python python-3.x file path python-import


    【解决方案1】:

    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 的文件,以及可选的子包和/或模块。)

    因此,一种解决方法是将文件 test.py 移动到 projects

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多