#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