pipenv + docker + github actionsでpython開発環境作成
それぞれ使う理由はこちらです。
- 開発PCの環境を汚したくない => dockerを使う。
- ライブラリの依存関係を管理したい => pipenvを使う。
versionを管理する必要がないため。 - テストを自動実行するようにしたい => github actionsを使う。
参考リポジトリ
実装
1. dockerでpython動かす
1.1 Dockerfileとdocke-compose.ymlを作成して以下のように編集。
Dockerfile
FROM python:3.9![](https://storage.googleapis.com/zenn-user-upload/795c1285e735a0ef5688bd5d.png)
WORKDIR /app
SHELL ["/bin/bash", "-c"]
RUN apt-get update &
RUN pip install --upgrade pip && \
pip install pipenv
docker-compose.yml
version: '3'
services:
app:
build: .
volumes:
- ./:/app
tty: true
1.2 コンテナを立ち上げる
以下のコマンドをターミナル実行します。
$ docker-compose build
$ docker-compose up -d
$docker-compose ps
以下のようにStateが「Up」であればOK
$docker-compose ps
Name Command State Ports
--------------------------------------------
trial-pipenv_app_1 python3 Up
1.3 コンテナに入ります。
以下を実行すれば入れます。
docker-compose exec app bash
こんな感じで入力箇所左が「app#」になっていればOK!
root@d1eb115d66b4:/app#
2. pipenv installする方法
Dockerfileでpython3.8のイメージを使っているためコンテナ起動すればpip使えます。
また、Dockerfileでpipenvをインストールするようにしてるのでコンテナが起動さればpipenvも使えます。
# pipenvをインストールする箇所
RUN pip install --upgrade pip && \
pip install pipenv
3. pytest install
以下を実行するとpipenvの環境下にpytestがインストールされ、pipfileとpipfile.lockが更新されます。
root@d1eb115d66b4:/app# pipenv install pytest
4. pytest実行
test/test_pytest.pyを作成し以下のコードを追加します。
pytestが実行できればなんでもいいのですが今回はpytestのversionをチェックするテストにしました。'6.2.5'はインストールしたpytestのversionになります。
import pytest
def test_version():
assert pytest.__version__ == '6.2.5'
root@d1eb115d66b4:/app# pipenv run pytest
結果はこんな感じになり、passedが表示されてれば成功です。(実行環境で表示内容は変わるかもしれないです。)
$ pipenv run pytest
===================================================== test session starts ======================================================
platform linux -- Python 3.9.2, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: /app
collected 1 item
tests/test_pytest.py . [100%]
====================================================== 1 passed in 0.01s =======================================================
5. github actionsでpytest実行
.github/workflow/pytest.ymlを作成し以下を記入します。
name: PyTest
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
pytest:
name: Run tests with pytest
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: docker Build
run: docker-compose build
- name: Docker Compose Up
run: docker-compose up -d
- name: Pipenv Install
run: docker-compose exec -T app pipenv install
- name: Pipenv Run Pytest
run: docker-compose exec -T app pipenv run pytest
git commitを実行して、githubにpushすればテストが動きます。
実行中は黄色のマーク。
成功すると緑のチェックがつきます。
docker-composeのTオプションは結果の出力先をコンテナ内ではなくホストへするために付ける必要があります。(そうしないとテスト結果の成否が判定できない。)
(参考)
終わりに
以上で環境構築は終わりになります。
あとはpipenv installで使いたいライブラリをインストールしていけばOKです。
Discussion