pipenv+docker+github actions에서python 개발 환경 만들기

각자 사용하는 이유는 다음과 같다.
  • PC를 개발하는 환경을 오염시키고 싶지 않다=>docker를 사용한다.
  • 라이브러리의 의존 관계를 관리하고 싶은 =>pipenv를 사용합니다.
    버젼을 관리할 필요가 없기 때문이다.
  • github actions를 사용하여 테스트를 자동으로 수행합니다.
  • 참고 창고
    https://github.com/ushknn/trial-pipenv

    이루어지다


    1. docker로python 시작


    1.1 Docker file 및 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"입니다.
    $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 방법


    Docker file에서pythn3.8의 그림을 사용했기 때문에 용기를 시작하면 pip를 사용할 수 있습니다.
    또한 피프브를 Docker file로 설치하기 때문에 컨테이너를 시작하면 피프브도 사용할 수 있다.
    # pipenvをインストールする箇所
    RUN pip install --upgrade pip && \
        pip install pipenv
    

    3. pytest install


    다음 동작을 실행하면pipenv 환경에서pytest,pipfile,pipfile를 설치합니다.lock을 업데이트합니다.
    root@d1eb115d66b4:/app# pipenv install pytest
    

    4.ptest 실행


    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에서 ptest 실행


    .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 commiit를 실행하고github에서push를 실행하면 테스트가 시작됩니다.
    운행 중 노란색 표시입니다.

    성공하면 녹색 검사가 있을 거예요.

    docker-compose의 T 옵션은 컨테이너 대신 결과의 출력 목적지를 호스트에 추가해야 합니다.(그렇지 않으면 테스트 결과가 성공했는지 판정할 수 없습니다.)
    (참조)
    https://matsuand.github.io/docs.docker.jp.onthefly/compose/reference/exec/

    끝맺다


    이렇게 환경 구축이 끝난다.
    그리고 pipenv install에서 사용하고 싶은 프로그램 라이브러리를 설치하면 OK.

    좋은 웹페이지 즐겨찾기