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

问题描述 投票:2回答:2

我使用Python 2.7在AWS CodeBuild上构建,但我相信这更像是一个通用的python导入问题。我有一个目录设置,如下所示。我在test文件夹中运行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   

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

python python-2.7 aws-codebuild
2个回答
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?


0
投票

除了添加init.py文件。结果是我必须在我的命令中使用-m参数运行python,这是在Python 2.4中添加的。

PEP 338

Python 2.4添加了命令行开关-m,允许使用Python模块命名空间定位模块,以便作为脚本执行。激励性的例子是标准的库模块,如pdb和profile,而Python 2.4的实现对于这个有限的目的来说是好的。

所以从顶级目录启动的命令是:

python -m test.test

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

from src.mainScript import *
© www.soinside.com 2019 - 2024. All rights reserved.