无法在 popper 工作流程的单独步骤中使用 python 模块
unable to use python modules in separate steps in a popper workflow
我有一个 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
步骤运行时,它没有在第一步中安装的模块。
问题是,当 pip install
作为第一步的一部分运行时,它会将 python 模块安装到容器内的 /usr/local
文件夹中。由于第二步是实例化另一个容器,因此这些模块不可用。这在 official Popper documentation 中有更详细的解释,其中解释了容器的名称空间与工作流所在的主机之间的关系。
使用官方 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 通常不起作用,因为没有预编译的二进制文件(wheels),所以我转向基于 debian 图像的 slim 变体
我有一个 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
步骤运行时,它没有在第一步中安装的模块。
问题是,当 pip install
作为第一步的一部分运行时,它会将 python 模块安装到容器内的 /usr/local
文件夹中。由于第二步是实例化另一个容器,因此这些模块不可用。这在 official Popper documentation 中有更详细的解释,其中解释了容器的名称空间与工作流所在的主机之间的关系。
使用官方 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 通常不起作用,因为没有预编译的二进制文件(wheels),所以我转向基于 debian 图像的 slim 变体