我正在使用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
我一直在苦苦挣扎,但我找不到一个有人问访问兄弟/姐妹文件夹脚本的问题。预先感谢您的帮助。
答案 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中添加的。
Python 2.4添加了命令行开关-m以允许将模块 使用Python模块名称空间定位,以作为脚本执行。 激励示例是标准库模块,例如pdb和 配置文件,Python 2.4实现适合此限制 目的。
因此要从顶层目录启动的命令是:
python -m test.test
这似乎可以正常工作并获得正确的名称空间。然后在您的test.py文件中,您可以通过以下方式导入mainScript
from src.mainScript import *