Python 多级导入

问题描述

如果相对导入,我会遇到问题。目录结构为:

folder
    app.py
    src_1
         __init__.py
        database
            db_declare.py
            __init__.py
        pages
            page_1.py
            df_prep.py
            __init__.py

好的,现在我有

#On app.py
from src_1.pages import page_1

#On page_1.py
from df_prep import df

#On df_prep.py
from database.db_declare import *

但我还是明白了

"*\folder\src_1\pages\page_1.py",line 9,in <module>
    from df_prep import df

ModuleNotFoundError: No module named 'df_prep'

当我运行 app.py 时。我曾尝试将“..”添加sys.path,但最终会添加到许多“..”。我试过了 谢谢你。我想保持脚本中的导入不变,这意味着如果两个脚本在同一个文件夹中,则没有理由在 from pages.df_prep import df 中写入 pages_1.py。 我愿意接受建议,但我真的不想对文件结构进行太多更改。

解决方法

src_1 是一个包。 folder 不是,因此 app.py 不在包中(但其他所有内容都在包中)。

包中的相对导入需要 .

# in page1.py
from .df_prep import df
# in df_prep.py
from ..database.db_declare import *

在此处查看详细答案:Relative imports for the billionth time

,

您能否将导入更改为:

#On app.py
from src_1.pages import page_1

#On page_1.py
from .df_prep import df

#On df_prep.py
from ..database.db_declare import *
,

请指定从 src_1 开始的完整路径。这是因为代码是从 app.py 的角度执行的。

#On page_1.py
from src_1.pages.df_prep import df