python - ImportError - 在 CircleCI 上测试失败但在本地通过
问题描述
正如标题所说 - 我的文件夹结构是这样的:
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 *
一行。从本地根目录或通过 bash shell运行$ pytest
到容器(在 virtualenv 内)按预期工作,但在 CircleCI 上,构建失败并出现ImportError: No module named 'config'
上述代码行。我正在使用 python3.5 和 circleCI 2.0。
提前致谢!
解决方案
正如评论中所建议的:__init__.py
从根目录中删除,添加一个名为conftest.py
.
有关conftest.py
技巧的解释,请查看我对类似问题的其他答案,例如pytest cannot find module或Using pytest with a src layer。简而言之,添加 aconftest.py
会将项目目录添加到sys.path
,因此config
模块变得可导入。
至于删除__init__.py
文件,它与错误无关,它不属于那里。当然,您不想将项目 dir 设置为包,因此提前删除不需要的 init 模块可以避免将来出现一些意外错误。
推荐阅读
- html - SVG 文本;将 tspan 向左对齐,使文本父级向右对齐
- sql - 如何修改 SQL 查询以获取最新日期
- mqtt - MQTT aedes.js 随机崩溃
- css - Material-UI: TablePagination 隐藏下一个和上一个
- python - 如何在 Python OpenCV 中删除图像的某些部分?
- c - 当程序需要以 sudo 运行时,读取 ~/.config 下的程序配置文件
- php - 错误消息:“此路由不支持 GET 方法。支持的方法:POST”
- javascript - 有人可以解释 AbortComponent 是如何工作的吗?我无法理解
- twilio - Twilio statuscallback POST 导致 15003 错误
- html - How to control other element when radio button is check on css?