【问题标题】:Python: How to import a module from a parent directoryPython:如何从父目录导入模块
【发布时间】:2021-02-04 10:27:31
【问题描述】:

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

我的项目结构如下:

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

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

我尝试过类似

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

我还将__init__.py 文件添加到projecttests 目录中。

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

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

我做错了什么?

【问题讨论】:

    标签: python import path directory-structure project-structure


    【解决方案1】:

    添加__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 的相对路径保持不变,它就可以工作。

    【讨论】:

    • 我在两个目录中都添加了__init__.py 文件,但仍然无法正常工作。我得到同样的错误。
    • 导入语句到底是什么?只是“导入”有效吗?
    • 它没有,但是当我用 sys.path.append 替换 sys.path.insert 时它以某种方式起作用,但是我很确定我之前已经尝试过了......也许我做错了什么那个时候,我不知道
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2015-07-23
    • 2019-11-10
    • 1970-01-01
    • 2021-03-09
    • 2020-11-07
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多