从另一个文件夹导入 python 模块,其中导入另一个模块

Import a python module from a different folder with another module import in it

我有以下文件结构:

main.py
Core/
    object_storage.py
    setup_logger.py

main.py:

from Core import object_storage
#rest doesn't matter

object_storage.py:

from setup_logger import logger
#rest doesn't matter

setup_logger.py:

import logging
import sys
Log_Format = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(stream = sys.stdout, 
                    format = Log_Format, 
                    level = logging.INFO)

logger = logging.getLogger()

当我 运行 object_storage.py 它工作得很好,但是当我想 运行 main.py 它给了我错误:

ModuleNotFoundError: No module named 'setup_logger'

我检查了 os.getcwd(),我认为问题是当我想从 [=30= 导入 setup_logger 时,工作目录仍然是我拥有 main.py 的根文件夹].py.

有什么办法可以解决?

当 Python 运行 是你的文件时,它会将文件的目录添加到 sys.path(这是 Python 查找模块和包的地方)。

我建议您在这些情况下始终检查 sys.path,然后您可以轻松找出发生此错误的原因。

当您 运行 main.py 只有它的目录被添加到 sys.path。所以你可以找到 setup_loggerCore.setup_logger (Python 知道在哪里可以找到 Core 目录。将 object_storage.py 文件更改为:

from Core.setup_logger import logger

到目前为止 运行ning main.py 工作正常,但现在出现了另一个问题。这次如果你 运行 object_storage.py 本身,你会得到这样的错误:

ModuleNotFoundError: No module named 'Core'

因此,为了能够 运行 直接 main.pyobject_storage.py,请考虑将路径添加到 main.py 的目录(其中 Core 存在)到 object_storage.py 因为这次不会自动添加该目录:

# object_storage.py

import sys
sys.path.insert(0, r'PATH TO WHERE Core EXIST')