【问题标题】:ImportError - tests failing on CircleCI but pass locallyImportError - 在 CircleCI 上测试失败但在本地通过
【发布时间】:2018-12-18 16:16:48
【问题描述】:

正如标题所说 - 我的文件夹结构是这样的:

venv/  
__init__.py  
.circleci/  
    config.yml  
Dockerfile   
docker-compose.yml  
config.py  
requirements.txt  
src/  
    __init__.py  
    other_scripts.py  
tests/  
    __init__.py  
    test_a.py  
    test_b.py  

测试文件有一个from config import * 行。从本地根目录运行$ pytest 或通过bash shell 进入容器(在virtualenv 内)按预期运行,但在CircleCI 上,上述代码行的构建失败并出现ImportError: No module named 'config'。我正在使用 python3.5 和 circleCI 2.0。

提前致谢!

【问题讨论】:

  • 从根目录中删除__init__.py,添加一个名为conftest.py的空文件。
  • @hoefling 成功了,谢谢!如果您可以添加您的评论和解释作为答案,那就太好了,我会将其标记为已接受。

标签: python python-3.x pytest circleci


【解决方案1】:

按照评论中的建议:从根目录中删除 __init__.py,添加一个名为 conftest.py 的空文件。

有关conftest.py 技巧的解释,请查看我对类似问题的其他答案,例如pytest cannot find moduleUsing pytest with a src layer。简而言之,添加conftest.py 会将项目目录添加到sys.path,因此config 模块变得可导入。

至于删除__init__.py 文件,它与错误无关,它只是不属于那里。当然,您不想将项目目录设置为包,因此提前删除不需要的 init 模块可以避免将来出现一些意外错误。

【讨论】:

  • 这仅对 pytest 或 unittest 模块有效吗?我也收到了Failed to import test module
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2023-03-19
相关资源
最近更新 更多