Travis CI 尽管 flake8 测试通过了本地开发环境,但 flake8 测试失败了?

Travis CI failing flake8 tests despite flake8 tests passing on local development environment?

背景

我正在使用 Django、Docker、Travis CI 和 Flake8 构建一个项目。我的 flake8 文件:

[flake8]
max-line-length = 119
exclude =
    migrations,
    __pycache__,
    manage.py,
    settings.py,
    env

当我 运行 本地 flake8 测试使用:

docker-compose exec app python manage.py test && flake8

我收到一条没有错误消息的正常消息。我的代码不错!

问题

当我将我的代码推送到自动启动 Travis CI 的 master 时,Travis 构建因以下错误而失败:

./project/settings.py:94:80: E501 line too long (91 > 79 characters)
./project/settings.py:97:80: E501 line too long (81 > 79 characters)
./project/settings.py:100:80: E501 line too long (82 > 79 characters)
./project/settings.py:103:80: E501 line too long (83 > 79 characters)
./core/models.py:7:80: E501 line too long (93 > 79 characters)
./core/models.py:13:80: E501 line too long (104 > 79 characters)
./core/migrations/0001_initial.py:18:80: E501 line too long (126 > 79 characters)
The command "docker-compose run app sh -c "python manage.py test && flake8"" exited with 1.

我的 flake8 文件明确指出最大行长度为 119,因此这些错误不应该发生(就像 运行 在我的本地机器上测试时不会发生)。

有人知道这是怎么回事吗?

问题中没有足够的信息,所以我深入研究了 OP 的 github

这是他们提出问题时的 dockerfile:

FROM python:3.9.0a5-alpine3.10
MAINTAINER Tom Mac

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache postgresql-client
RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user

他们的 flake8 配置位于 .flake8 的存储库根目录中

因为这个文件不是他们图像的一部分(没有 COPYd 进去),所以在 linting 时没有考虑到它

将此文件添加到图像中(最简单的方法是 COPY . . 添加 所有内容 )修复此问题


我怀疑发生了什么:

  • 中指出flake8配置错误的地方
  • OP 可能移动了 app/.flake8 的配置(上图中
  • OP 然后:(1) 这样做之后没有重建图像,或者 (2) 有某种类型的本地安装设置,其中 . 在运行时安装到容器中

无论哪种方式,重建和添加 COPY . . 应该可以解决这个问题