找不到模块错误 - 从兄弟目录导入

Module Not Found Error - Importing from sibling directory

所以我尝试了很多关于堆栈溢出的解决方案,但仍然有问题。

下面是我的项目结构。

project
    | tool1
       | - application.py
    | resources
       | - tools
          | - dao.py

在 application.py 中,我有以下导入语句:

from resources.tools.dao import DAO

这在 PyCharm 中工作正常,但是当我尝试从项目目录 (python tool1/application.py) 的命令行 运行 它时,我得到:

ModuleNotFoundError: No module named 'resources'

如果我进入 'tool1' 文件夹和 运行,我会得到同样的错误:python application.py

我尝试在导入之前添加 ..,通过 PyCharm 将不同的文件夹设置为我的源根文件夹,并将空白 __init__.py 文件添加到资源目录。

为什么PyCharm能找到'resources'而命令行却不行?我怎样才能改变它,以便我的解决方案在任何一个位置都能工作?

如果有帮助,我正在使用 Python 3.7 和 Windows。我愿意重组项目目录,但会有多个 tools/applications 都将使用 dao.py 和资源目录中的其他工具,因此资源至少应与其他项目。

提前致谢。

如果项目是您的根目录(即您已将 pythonpath 初始化到该目录),那么您需要像这样导入模块:

from project.resources.tools.dao import DAO

假设您在每个目录中创建了 __ init __.py。您可以添加到系统路径。 它应该从任何地方导入 dao。它肯定适用于 linux。

# tool1.__init__.py
import sys
import os

CURRPATH, TAIL = os.path.split(os.getcwd())
while CURRPATH != "/":
    if TAIL == 'project':
        if os.path.join(CURRPATH, TAIL) not in sys.path:
            sys.path.append(os.path.join(CURRPATH, TAIL))
        break
    CURRPATH, TAIL = os.path.split(CURRPATH)
from resources.tools.dao import DAO

并在 application.py

# tool1.application.py
from __init__ import DAO

运行 使用 -m 参数的脚本。即

python -m project.tool1.application

这使得脚本 运行 具有命名空间中的 project 包。 (您可能需要将 __init__.py 文件添加到 project 以使其成为一个包)

声明父目录路径的另一种方法是:

import os, sys

dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

然后这一行就可以正常工作了:

from resources.tools.dao import DAO