从另一个包含另一个模块引用的文件夹中导入Python模块。

3

我有以下文件结构:

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() 函数的结果,发现问题在于工作目录仍然停留在 main.py 所在的根目录,而我想要从 Core/object_storage.py 中导入 setup_logger。

有什么解决方法吗?

1个回答

2

当Python运行您的文件时,它会将文件所在的目录添加到sys.path中(这是Python查找模块和包的位置)。

我建议在这些情况下始终检查sys.path,这样您就可以轻松找出为什么会发生此错误。

当您仅运行main.py时,它的目录将被添加到sys.path中。因此,您可以使用Core.setup_logger来查找setup_logger(Python知道在哪里找到Core目录)。将object_storage.py文件更改为:

from Core.setup_logger import logger

到目前为止,运行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')

@Looz 很高兴能够帮助你,请如果我的回答对你有所帮助,也请点赞支持一下。 - S.B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接