0

我有一个requirements.txt在执行以下工作流时使用的文件:

steps:
  - id: install-python-modules
    uses: popperized/python-actions@master
    args:
    - pip install -r requirements.txt

  - id: run-script
    uses: popperized/python-actions@master
    args:
    - python my_script.py

我遇到的问题是,当该run-script步骤运行时,它没有在第一步中安装的模块。

4

1 回答 1

0

问题是,当pip install作为第一步的一部分运行时,它将 python 模块安装到/usr/local容器内的文件夹中。由于第二步是实例化另一个容器,因此这些模块不可用。这在官方的 Popper 文档中有更详细的解释,其中解释了容器的命名空间和工作流所在的主机之间的关系。

使用官方 python docker 映像并明确处理 virtualenv 可能会有所帮助:

steps:
- id: install-requirements
  uses: docker://python:3.8-slim-buster
  runs: [bash, -uec]
  args:
  - |
    python -mvenv venv/
    source venv/bin/activate
    pip install -r requirements.txt

- id: run-sim
  uses: docker://python:3.8-slim-buster
  runs: [bash, -uec]
  args:
  - |
    source venv/bin/activate
    python my_script.py

第一步在popper run从(文件夹)调用的文件夹上创建一个虚拟环境,并在那里venv/安装需求。第二个在运行脚本之前加载环境。

您可能想知道如何python:3.8-slim-buster选择。一般来说,docker hub 上有三种官方镜像,基于 1) full debian, 2) debian-slim 和 3) alpine。我通常使用最新的稳定版 python(截至今天为 3.8),并从 alpine 开始,因为与 debian 映像相比,它的占用空间很小。如果需求使用系统库(例如numpy),alpine 通常不起作用,因为它没有预编译的二进制文件(轮子),所以我转向基于 debian 的图像的苗条变体

于 2020-07-19T08:09:10.477 回答