我使用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
我一直在苦苦挣扎,我找不到有人询问访问兄弟/姐妹文件夹脚本的问题。预先感谢您的帮助。
如果目录包含__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?
除了添加init.py文件。结果是我必须在我的命令中使用-m参数运行python,这是在Python 2.4中添加的。
Python 2.4添加了命令行开关-m,允许使用Python模块命名空间定位模块,以便作为脚本执行。激励性的例子是标准的库模块,如pdb和profile,而Python 2.4的实现对于这个有限的目的来说是好的。
所以从顶级目录启动的命令是:
python -m test.test
这似乎工作,并获得正确的命名空间。然后在test.py文件中,您将按以下方式导入mainScript
from src.mainScript import *