Python从一个相邻目录导入模块

30

我应该如何组织我的Python导入,以便我可以拥有像这样的目录。

project
|      \
|      __init__.py
|     
src
|   \
|    __init__.py
|    classes.py
|
test
    \
     __init__.py
     tests.py

然后在 /project/test/tests.py 中,需要导入 classes.py 文件。

我在 tests.py 文件中有如下代码:

from .. src.classes import(
    scheduler
    db
)

我遇到了以下错误:

SystemError: Parent module '' not loaded, cannot perform relative import

有人知道该怎么做吗?

1个回答

38

Python将包含启动脚本的文件夹添加到PYTHONPATH中,因此如果您运行

python test/tests.py

只有文件夹test被添加到路径中(而不是您正在执行命令的基本目录)。

相反,应该这样运行测试:

python -m test.tests

这将会将基础目录添加到Python路径中,然后通过非相对导入方式可以访问类:

from src.classes import etc

如果您真的想要使用相对导入方式,那么您的三个目录需要添加到一个包目录中。

package
* __init__.py
* project
* src
* test

你可以在包目录的上层执行以下命令:

python -m package.test.tests

另请参阅:


如果你得到了"No module named test.tests"的错误提示,确保你的test/目录下有一个__init__.py文件。 - Translunar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接