Python:如何从父目录导入模块

问题描述

我知道已经有很多类似的问题,但没有一个答案对我真正有用,所以在将其标记为重复之前,请先阅读我的问题(并告诉我其他解决方案哪里出了问题)。

我的项目结构如下:

Project/
|-- src/
    |-- project/
        |-- a.py
        |-- b.py
        |-- tests/
            |--c.py

我不太了解如何构建 python 项目/包等如何工作。 我想在我的 a 模块中导入 c

我尝试过类似的事情

from project.a import xyz
from ..a import xyz

我还在 __init__.pyproject 目录中添加tests 文件

但我仍然总是得到 ModuleNotFoundError: No module named 'project'

然后我尝试在导入 project 之前将 sys.path 路径添加到我的 a,但我仍然收到相同的错误消息。

我做错了什么?

解决方法

添加 __init__.py,并使用 sys.path 添加项目路径,然后导入 a 应该可以工作。但我建议在您的 c.py 中尝试以下操作:

import sys
from pathlib import Path

filepath = Path(__file__)
filepath = filepath.parent
sys.path.insert(0,str(filepath))
import a

为什么?这是一个通用的解决方案,只要从 ca 的相对路径保持不变,它就会起作用。