Python: ‘ModuleNotFoundError’ при попытке импортировать модуль из файлов

#python #python-3.x #file #path #python-import

Вопрос:

я хочу получить доступ config/cache.py от test.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  

и в этом файле все так:

 from .config import * from .utils import * from .database import * from .cache 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 (как a str ) вручную, в sys.path которую входит простой python list , перед импортом.

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