适用于AWS CodeBuild的Brother / Sister文件夹中的Python相对导入

时间:2019-03-21 21:12:42

标签: python python-2.7 aws-codebuild

我正在使用Python 2.7构建AWS CodeBuild,但我相信这更多是一个通用的python导入问题。我有一个目录设置,如下所示。我正在测试文件夹中运行test.py。在此测试中,我想导入依赖项mainScript.py。但是,我似乎无法正确理解相对依赖关系,并且在将mainScript导入到测试文件夹中时遇到很多困难。下面是我的目录文件夹的布局

main
    src
       mainScript.py
    test
       test.py

例如,如果我的目录设置类似于

main
    test
       test.py
       mainScript.py

我可以通过以下方式完成导入

from mainScript import *

我已确认这项工作。但是,我喜欢在它自己的src文件夹中。我已经尝试了所有这些方法,这些是我尝试过的以下相对路径尝试

from ..src/mainScript import * #SyntaxError: invalid syntax
from ..src.mainScript import * #ValueError: attempted relative import beyond top-level package
from mainScript import * #ModuleNotFoundError: No module named 'mainScript'
from src.mainScript import * #ModuleNotFoundError: No module named 'src'
from src/mainScript import * #SyntaxError: invalid syntax   

我一直在苦苦挣扎,但我找不到一个有人问访问兄弟/姐妹文件夹脚本的问题。预先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果目录包含__init__.py文件,Python会将目录视为软件包。将您的结构更新为以下应该可以解决问题:

    __init__.py
    src
       __init__.py
       mainScript.py
    test
       __init__.py
       test.py

现在,您可以从test.py中进行from ..src import *。有关 init .py的更多详细信息,您可以在此处查看:What is __init__.py for?

答案 1 :(得分:0)

除了添加 init .py文件。最终导致我必须在命令中运行带有-m参数的python,这是在Python 2.4中添加的。

PEP 338

  

Python 2.4添加了命令行开关-m以允许将模块   使用Python模块名称空间定位,以作为脚本执行。   激励示例是标准库模块,例如pdb和   配置文件,Python 2.4实现适合此限制   目的。

因此要从顶层目录启动的命令是:

python -m test.test

这似乎可以正常工作并获得正确的名称空间。然后在您的test.py文件中,您可以通过以下方式导入mainScript

from src.mainScript import *