首页 > 解决方案 > 万亿次相对进口

问题描述

我有以下数据结构:

project/
    folder_a/
        file.py
    folder_b/
        useful_functions.py

我正在运行我的file.py并尝试导入我在useful_functions.py.

起初我尝试了以下方法:

from ..folder_b.useful_functions import function_a

但出现以下错误:

ValueError: attempted relative import beyond top-level package

然后我删除了最初有效的导入语句开头的两个点。从那以后,我重新审视了这个项目,没有任何改变,我面临着一个新的错误消息。以下代码:

from folder_b.useful_functions import function_a

给我以下错误消息:

ModuleNotFoundError: No module named 'folder_b'

我觉得很奇怪,有一次它可以工作,后来没有任何变化,导入失败。我真的很想用相对导入来解决这个问题,因为我希望代码可以在其他具有不同绝对文件路径的机器上工作。

提前致谢。

标签: pythonimportpython-importrelative-pathrelative-import

解决方案


好吧,第 1 万亿次直接在包中运行脚本被认为是一种反模式。我不知道 spyder 是如何运行的,但大概是这样

python file.py # from inside folder_a

这应该改为

python -m folder_a.file # from inside project

这将解决项目文件夹内包之间的相对导入,并且不需要任何 sys.path 或 PYTHONPATH hack


推荐阅读