从子文件夹导入python模块

时间:2020-09-09 10:00:42

标签: python aws-lambda python-import

我想通过引用子模块gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year {#}"从以下文件夹结构中导入模块。

task(){
...
jobnumber=$4    
gpu=$(expr $jobnumber% 2)
...
}

这是我想做的事的一个例子:

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'将在AWS上实现为Lambda函数,并且为了获得所有必要的依赖关系,我需要将src文件夹的内容上传到AWS,但需要有一个顶部文件夹的已知名称,以便我可以将其用于绝对导入。如果没有app,则src的内容将上传到具有我无法引用的自动生成名称的文件夹。

我首先尝试了相对导入,但是收到了writers/company_*.py错误,所以现在我要进行绝对导入,即从here插入。

2 个答案:

答案 0 :(得分:0)

您可以在代码中添加它,

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

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

答案 1 :(得分:0)

您是否尝试将__init__.py放在应用文件夹中?

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