从子文件夹导入python模块

2024-04-16 07:46:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过引用子模块app,从以下文件夹结构中导入模块

├── src
│   ├── __init__.py
│   └── app
│       ├── __init__.py
│       ├── getters
│       │   ├── company_1.py
│       │   └── company_2.py
│       ├── parsers
│       │   ├── company_1.py
│       │   └── company_2.py
│       └── writers
│           ├── company_1.py
│           └── company_2.py

下面是我想做的一个例子:

# src/app/writers/company_1.py

import app.parsers.company_1 as parser_1


def write_data(event, context):
    ...

但是我得到了错误ModuleNotFoundError: No module named 'app'。我不明白为什么这不起作用

注意

为什么我要包括看似多余的子文件夹app?这里的旁白是函数writers/company_*.py将在AWS上实现为Lambda函数,为了获得所有必要的依赖项,我需要将src文件夹的内容上载到AWS,但需要有一个具有已知名称的顶级文件夹,以便我可以将其用于绝对导入。如果没有app,src的内容将上载到一个具有自动生成名称的文件夹中,我无法引用该名称

我首先尝试了相对导入,但收到了一个attempted relative import with no known parent package错误,所以现在我要从here进行绝对导入


Tags: 模块函数pyimportsrc文件夹名称aws
2条回答

你有没有试着在你的应用程序文件夹中加入__init__.py

module
|
| module
|  |
|  | __init__.py
|  | module.py

您可以在代码中添加此项

import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), "source"))

只需将source替换为保存模块的文件夹即可。 在这种情况下,将source替换为app

相关问题 更多 >