python - 从不同目录导入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
。
我还尝试utils
从my-lambda.py
同样失败的文件中导入模块。中的代码my-lambda.py
是from datalake.utils import utils
,但是ModuleNotFoundError: No module named 'datalake'
从命令行运行时出现错误python datalake/lambda/my-lambda.py
。
如何导入模块?
解决方案
当您运行类似的命令时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
,它会工作。
推荐阅读
- r - R/Tcltk 条件文件菜单命令赋值
- html - 如何使用 Visual Studio 将结束标记与 HTML 中的开始标记对齐?
- windows - 哪个 Windows 注册表项存储 PATH 变量?
- javascript - 如何在Highcharts中删除X滚动的文本
- wordpress - 将 html 添加到 woocommerce 产品标题
- java - 如何在 TableView 中未使用的列标题上添加上下文菜单
- go - Golang 频道不关闭
- arrays - 将 csv 文件读入数据帧并使用 scala 访问它
- .net - 在 Rider IDE 中调试时重新加载 WPF XAML?
- java - 从 Firestore 随机获取文档