首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Github操作flake8失败:F字符串缺少占位符

Github操作flake8失败:F字符串缺少占位符
EN

Stack Overflow用户
提问于 2020-06-25 08:18:57
回答 3查看 17K关注 0票数 5

在课程"FastAPI-TDD with Docker“之后,我让项目在本地构建并传递,然后在github操作中失败:

看起来源码中的攻击性路线是:

代码语言:javascript
运行
复制
    response = test_app_with_db.get(f"/summaries/")

Github Action的结果是:

代码语言:javascript
运行
复制
Run docker exec fastapi-tdd python -m flake8 .
  docker exec fastapi-tdd python -m flake8 .
  shell: /bin/bash -e {0}
  env:
    IMAGE: docker.pkg.github.com/$GITHUB_REPOSITORY/web
./app/db.py:14:1: E303 too many blank lines (3)
./tests/test_ping.py:4:1: F401 'app.main' imported but unused
./tests/test_summaries.py:6:1: F401 'pytest' imported but unused
./tests/test_summaries.py:60:37: F541 f-string is missing placeholders
##[error]Process completed with exit code 1.
EN

回答 3

Stack Overflow用户

发布于 2020-06-25 08:37:45

F字符串使用占位符的例子:如果你想把'/summary/‘放在f字符串中,把它赋给某个变量,然后把那个变量放在占位符里

语法是

代码语言:javascript
运行
复制
f'{variable}'

示例:

代码语言:javascript
运行
复制
f'{"quoted string"}'
票数 7
EN

Stack Overflow用户

发布于 2020-06-25 08:40:48

./app/db.py:14:1: E303空行太多(3) ./ F401 /test_ping.py:4:1:测试'app.main‘已导入但未使用./ F401 /test_sumaries.py:6:1:F401 'pytest’已导入但未使用

我还可以看到一些额外的错误,这将再次使您的构建在ci测试运行中失败。

在第14行中,您需要删除第4行和第6行中的额外行,您导入了在代码中未使用的app.main和pytest,因此也需要将其删除

票数 1
EN

Stack Overflow用户

发布于 2020-10-22 06:55:40

在学习Test-Driven Development with Django, Django REST Framework, and Docker课程后,我遇到了类似的问题。

在我的GitHub操作过程中,我确定在本地运行的是不同版本的flake8

我在本地运行(在docker容器中)进行了检查...

代码语言:javascript
运行
复制
flake8 --version

...and将该输出与我的GitHub操作的日志进行了比较。

在我的例子中,flake8 3.7.9运行在本地容器中,但GitHub操作使用的是flake8 3.8.4

看起来像是F541的新pyflakes检查进入了flake8 3.8.0 (参见https://gitlab.com/pycqa/flake8/-/issues/648)

至于解决办法,我看到了两个选择:

  1. flake8 3.7.9 GitHub

期间将源文件中不带占位符的f字符串转换为string literals

  • force

例如,在Dockerfile.prod中...

RUN pip install black flake8==3.7.9 isort

...allowed我的构建成功完成。不过,升级flake8并使源代码符合F541似乎更好。

我试了一段时间来理解为什么..。

RUN pip install black flake8 isort

...不会为这些包使用之前创建的轮子(参见下面的Dockerfile.prod )。

我的猜测是,在builder阶段安装和运行linters的指令不能使用之前为这些linters创建的轮子,因为这些轮子是用--no-deps构建的。我假设pip在这种情况下会退回到搜索在线索引,并且在没有其他说明的情况下安装最新的可用版本。由于我的Dockerfile在这方面与我的Dockerfile.prod有很大的不同,因此我得出结论,这会导致在本地运行的flake8版本与在我的GitHub操作期间运行的版本不同。

Dockerfile.prod

代码语言:javascript
运行
复制
#Builder

FROM python:3.8.2-alpine as builder

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1

RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt

COPY . /usr/src/app/
RUN pip install black flake8 isort
RUN flake8 .
RUN black --exclude=migrations .
RUN isort ./*/*.py

#Final

FROM python:3.8.2-alpine

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1
ENV DEBUG 0
ENV SECRET_KEY foo
ENV DJANGO_ALLOWED_HOSTS localhost 127.0.0.1 [::1] .herokuapp.com

RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache /wheels/*

COPY . /usr/src/app/

RUN python manage.py collectstatic --noinput

RUN adduser -D myuser
RUN chown myuser /usr/src/app
USER myuser

CMD gunicorn drf_project.wsgi:application --bind 0.0.0.0:$PORT
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62565979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档