首页 > 解决方案 > 从不同目录导入python模块失败

问题描述

我在python3中有这个代码结构:

- datalake
  __init__.py
  utils
     __init__.py
     utils.py
  lambdas
     __init__.py
     my-lambdas.py
- tests
    __init__.py
    demo.py

所有init__.py文件都是空的。

我的问题是如何从中导入datalake模块tests/demo.py?我试过from datalake.utils import utils了,demo.py但是当我从命令行运行时python tests/demo.py,我得到了这个错误ModuleNotFoundError: No module named 'datalake'

如果我使用此代码:

from ..datalake.utils import utils

我会得到错误ValueError: attempted relative import beyond top-level package

我还尝试utilsmy-lambda.py同样失败的文件中导入模块。中的代码my-lambda.pyfrom datalake.utils import utils,但是ModuleNotFoundError: No module named 'datalake'从命令行运行时出现错误python datalake/lambda/my-lambda.py

如何导入模块?

标签: pythonpython-3.x

解决方案


当您运行类似的命令时python tests/demo.py,您所在的文件夹不会添加到 PYTHONPATH,脚本文件夹会添加。所以像这样的顶级导入import datalake会失败。为了解决这个问题,您可以将测试作为模块运行:

蟒蛇2:

python -m tests/demo

蟒蛇 3:

python -m tests.demo

并且任何datalake进口都demo.py将起作用。

听起来您真正想要做的是拥有一个与您的主应用程序分开的包含测试的文件夹并运行它们。为此,我推荐py.test,对于您的情况,您可以阅读测试外部应用程序代码以了解如何执行此操作。TL;DR 是从您的顶级项目文件夹运行您的测试python -m py.test,它会工作。


推荐阅读