首页 > 解决方案 > 在子目录中导入顶级文件

问题描述

我的 Python 项目中有以下结构:

project
├── subdir
│   ├── __init__.py
│   └── script_to_run.py
├── __init__.py
└── functions.py

script_to_run.py文件中,我想从顶级functions.py文件导入一个函数

from functions import function_to_import

当我尝试从根目录 ( project) 或其子目录 ( subdir) 运行脚本时,我收到以下错误:

ModuleNotFoundError: No module named 'functions'

那我怎么导入呢?

我见过几种方法,包括弄乱你的sys.path或通过 安装你的本地包pip,但对于这么简单的事情来说,这似乎太多了,对吧?

标签: python

解决方案


Python 包是个好东西,但要付出代价:您不能直接运行位于包深处的文件。

如果文件是从包中导入的,正确的方法是:

from ..functions import function_to_import

如果该文件打算作为顶级脚本启动,则不应包含在包中。如果您真的想这样做,解决方案是将project目录添加到sys.path并使用:

from functions import function_to_import

但这是一种反模式...您已被警告...


推荐阅读