小编aah*_*nik的帖子

如何使用 GitHub 操作测试 Python 项目的 Dockerfile?

  • 有时我们在编写docker文件时会出错。如果 Dockerfile 中有错误,docker 构建将会失败。

  • 有时我们可能会忘记在 Dockerfile 中指定依赖项。让我们举个例子。

假设我有一个 python 脚本,可以截取任何网页(提供了 URL)的屏幕截图。

  • 现在,在我的代码中我使用 pyppeeteer(无头 chrome/chromium 自动化库(puppeteer 的非官方端口)
  • pyppeeteer 使用 chromium 和 chrome 驱动程序。这些已经安装在我的机器上。因此,运行pytest 将在我的本地开发环境中通过。
  • RUN我忘记在 dockerfile 中指定将安装 chromium 和 chrome 驱动程序的命令。因此在容器内运行测试将会失败。(尽管docker build会成功。)

我想自动化构建 docker 镜像并在容器中运行测试的任务。

在本地机器上,我可以运行docker build -t myproj .构建。

为了测试,我可以运行docker run -it myproj pytest(如果我忘记添加RUN安装 chromium 和 chromedriver,那么我的 pytest 将在容器内失败)

我希望我能够解释我的目的。

通常,在 github actions 中,python 源代码可以在 ubuntu、mac、windows 等上运行。除了不同的操作系统之外,我还想构建和测试我的 dockerfile。

python testing docker github-actions

8
推荐指数
1
解决办法
3801
查看次数

我应该在 docker 构建期间运行测试吗?

我有一个像这样的 Dockerfile:

FROM python:3.9

WORKDIR /app

RUN apt-get update && apt-get upgrade -y

RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -

ENV PATH /root/.local/bin:$PATH

COPY pyproject.toml poetry.lock Makefile ./

COPY src ./src

COPY tests ./tests

RUN poetry install && poetry run pytest && make clean

CMD ["bash"]

Run Code Online (Sandbox Code Playgroud)

正如您所看到的,测试将在构建期间运行。它可能会稍微减慢构建速度,但会确保我的代码在 Docker 容器中运行。

如果测试在我的本地计算机中通过,并不意味着它们也会在 docker 容器中通过。

假设我在代码中添加了一个使用 chromedriver 或 ffmpeg 二进制文件的功能,该功能存在于我的系统中,因此测试将在我的系统中通过。

但是,假设我忘记在 Dockerfile 中安装这些依赖项,那么 docker 构建将会失败(因为测试在构建期间运行)

做我想做的事情的标准方法是什么?

我的 Dockerfile 好吗?或者我应该做一些不同的事情?

python testing docker python-poetry

7
推荐指数
2
解决办法
9687
查看次数

如何使用 GItHub Actions 测试我的 python 包?

我有一个 python 包,用于poetry依赖管理和打包。

在我的本地环境中,我正在使用tox多个 python 版本来测试包。

每次有推送或拉取请求时,如何使用 GitHub 操作来测试我的包?

我尝试过的事情:

我想在 gh-actions 中测试我的 python 代码。

在我的情况下,我实际应该使用什么?

最佳做法是什么?和最优化的工具

python pytest tox github-actions python-poetry

5
推荐指数
1
解决办法
1791
查看次数

为什么我看不到任何 docker 日志?

我有一个简单的脚本,每 2 秒打印一次 hello。

# entry.py

import time

while True:
    print("hello")
    time.sleep(2)

Run Code Online (Sandbox Code Playgroud)

我有一个运行此脚本的超简单 docker 文件。


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

Run Code Online (Sandbox Code Playgroud)

首先我构建docker镜像:


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

Run Code Online (Sandbox Code Playgroud)

现在我用这个-it选项运行它,它按预期工作。

$ docker build -t dtest .
Run Code Online (Sandbox Code Playgroud)

但是当我在分离模式下运行它,然后尝试查看日志时,我什么也看不到。

$ docker run -it dtest
# hello printed to screen every two seconds
Run Code Online (Sandbox Code Playgroud)

python logging docker docker-logs

3
推荐指数
1
解决办法
41
查看次数

Python yaml 按原样转储表情符号

我正在使用python 3.9.5, 和PyYaml 5.4.1.

\n

t.yml我有一个包含以下内容的文件。

\n
- \xe2\xac\x86\xef\xb8\x8f\n
Run Code Online (Sandbox Code Playgroud)\n

我编写了一个简单的 python 代码,用于读取 yaml 文件并将其转储回来。

\n
import yaml\n\nwith open("t.yml") as file:\n    con = yaml.safe_load(file)\n    print(con)\n    with open("t.yml","w") as file:\n        yaml.dump(con,file)\n
Run Code Online (Sandbox Code Playgroud)\n

代码的输出是:

\n
[\'\xe2\xac\x86\xef\xb8\x8f\']\n
Run Code Online (Sandbox Code Playgroud)\n

转储yaml后,t.yml文件变成这样:

\n
- "\\u2B06\\uFE0F\\U0001F622"\n
Run Code Online (Sandbox Code Playgroud)\n

如何以与我加载的完全相同的格式转储表情符号?

\n

python encoding yaml pyyaml

3
推荐指数
1
解决办法
500
查看次数

此 bash 命令在 Makefile 中未正确运行

在 Makefile 里面我有这样的:

release:
    version=$$(poetry version | cut -f2 -d " ")
    echo "release $$version"
Run Code Online (Sandbox Code Playgroud)

如果我运行,我的终端中的语句将毫无问题地运行。

release:
    version=$$(poetry version | cut -f2 -d " ")
    echo "release $$version"
Run Code Online (Sandbox Code Playgroud)

但如果我跑的话

> version=$(poetry version | cut -f2 -d " ")
> echo "release $version"
release 0.0.2
Run Code Online (Sandbox Code Playgroud)

您可以在输出中看到release版本号旁边。未显示。

bash shell makefile

2
推荐指数
1
解决办法
820
查看次数