GitHub 작업으로 Python 프로젝트 테스트

며칠 전 처음으로 프로젝트에서 GitHub Actions를 사용했습니다. 전반적으로 결과는 매우 긍정적 이었지만 관련 작업도있었습니다. 이 게시물이 더 낮은 비용으로 동일한 작업을 수행하는 데 도움이되기를 바랍니다.

GitHub 작업 활성화

.github/workflows프로젝트의 루트에 디렉토리를 만듭니다 .

mkdir -p .github/workflows

제 경우에는 두 개의 파일을 만들었습니다.

YAML 파일의 맨 위에 다음 필드가 있습니다 name: CI (pip).. YAML 파일의 이름은 영향을 미치지 않는 것 같지만 파일 name상단의 입력란은 작업 탭에 표시 되는 입력란 이며 배지에 표시되는 이름입니다.

on필드를 사용하여 작업을 트리거 할 이벤트를 선택합니다. 처음에는을 시도 on: [push, pull_request]했지만 곧 너무 많은 빌드가 트리거된다는 느낌이 들었습니다. 이제 나는 사용 on: [push]하고 그것으로 충분할 것 같습니다. 이를 통해 기여자는 커밋 중 하나가 CI를 위반할 때 이메일을 받게되므로 풀 요청을 열기 전에 문제를 해결할 수 있습니다. 그리고 on: [push]이미 풀 요청에서 상태 업데이트를 얻습니다.

그리고 몇 분 후 :

Python의 여러 변형 테스트

Python 코드는 이식 가능하지만 실제로는 다양한 플랫폼에서 내 코드를 테스트하는 것을 선호합니다.

내 프로젝트에서 테스트하고 싶습니다.

  • Python 환경은 pipconda
  • Python 버전 2.7, 3.5, 3.6, 3.7 및 3.8
  • Linux, Mac OS 또는 Windows의 Python.

pip설정이 매우 쉬운부터 시작하겠습니다 . 다음은 내 continuous-integration-pip.yml파일 의 발췌 내용입니다 .

  • GitHub 저장소를 확인하는 방법 actions/checkout@v2
  • actions/setup-python@v1의해 매개 변수화 된 버전으로 Python을 설치하는 방법python-version: ${{ matrix.python-version }}
  • 프로젝트 requirements.txtrequirements-dev.txt파일 에서 패키지를 설치하는 방법
  • 선택적 종속성을 설치하는 방법

name: CI (pip)
on: [push]

jobs:
  build:
    strategy:
      matrix:
        python-version: [2.7, 3.5, 3.6, 3.7, 3.8]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install -r requirements-dev.txt
          # install black if available (Python 3.6 and above)
          pip install black || true
actions/checkout@v2Ubuntu (Linux), Mac OS, Windows 중에서 OS를 선택하는 방법 과 함께 GitHub 저장소를 확인 goanpeca/setup-miniconda@v1하는 python-version: ${{ matrix.python-version }}방법 environment.yml 파일 에서 conda 환경을 만드는 방법과 활성화 방법에 따라 매개 변수화 된 Python 버전 을 사용하여 Miniconda 를 설치하는 방법 해당 환경

name: CI (conda)
on: [push]

jobs:
  build:
    strategy:
      matrix:
        os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
        python-version: [2.7, 3.7]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Miniconda
        uses: goanpeca/setup-miniconda@v1
        with:
          auto-update-conda: true
          auto-activate-base: false
          miniconda-version: 'latest'
          python-version: ${{ matrix.python-version }}
          environment-file: environment.yml
          activate-environment: jupytext-dev

continuous-integration-pip.yml파일 의 해당 단계 는

- name: Lint with flake8
        run: |
          # stop the build if there are Python syntax errors or undefined names
          flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
          # all Python files should follow PEP8 (except some notebooks, see setup.cfg)
          flake8 jupytext tests
          # exit-zero treats all errors as warnings.  The GitHub editor is 127 chars wide
          flake8 . --count --exit-zero --max-complexity=10 --statistics

- name: Lint with flake8
        shell: pwsh
        run: |
          # stop the build if there are Python syntax errors or undefined names
          flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
          # all Python files should follow PEP8 (except some notebooks, see setup.cfg)
          flake8 jupytext tests
          # exit-zero treats all errors as warnings.  The GitHub editor is 127 chars wide
          flake8 . --count --exit-zero --max-complexity=10 --statistics

처음에는 flake8단계에 문제가있었습니다 . 오류는 다음과 같습니다.

Lint with flake8
4s
##[error]Process completed with exit code 2.
Run # stop the build if there are Python syntax errors or undefined names
  # stop the build if there are Python syntax errors or undefined names
  flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
  all Python files should follow PEP8 (except some notebooks, see setup.cfg)
  flake8 jupytext tests
  # exit-zero treats all errors as warnings.  The GitHub editor is 127 chars wide
  flake8 . --count --exit-zero --max-complexity=10 --statistics
  shell: /bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/3.6.10/x64
0
/home/runner/work/_temp/98d1db20-f0af-4eba-af95-cb39421c77b0.sh: line 3: syntax error near unexpected token `('
##[error]Process completed with exit code 2.

Pytest 실행

코드의 구문이 정확하다고 확신하면 모든 단위 테스트가 통과되었는지 알고 싶습니다. 해당 단계는 다음과 같습니다.

- name: Test with pytest
        run: coverage run --source=. -m py.test

커버리지 업로드

CI에서 커버리지를 계산하는 것이 좋지만 풀 리퀘스트에 대한 커버리지 업데이트와 README에 커버리지 배지가있는 것이 더 좋습니다. 이를 위해 codecov를 사용 합니다 . 옵션 기능의 더 많은 부분을 테스트 할 수 있기 때문에 conda CI에 대해서만 적용 범위를 업로드하는 것을 선호합니다. 커버리지 업로드 단계는 다음에서 마지막 단계입니다 continuous-integration-conda.yml.

- name: Upload coverage
        shell: pwsh
        run: coverage report -m

README , codecov.io 에서 자세한 커버리지 통계 및 차트 , pull 요청의 커버리지 보고서에 추가 할 수 있습니다 .

자동 작업 취소

처음에는 놀랐지 만 말이되는 기능 중 하나는 자동 작업 취소입니다. CI의 한 작업이 실패하면 아직 실행 중이거나 보류중인 다른 모든 작업이 취소됩니다.

다음은 내 프로젝트에 대한 예입니다. Windows 빌드에 문제가 발생하여 나머지 Windows 및 Mac OS 작업이 취소됩니다.

Travis-CI와의 차이점

GitHub Actions를 발견하기 전에 Travis-CI를 사용했습니다 . 그리고 나는 그것을 좋아했습니다! 나는 우리가 테스트하는멋진 프로젝트를 포함하여 많은 프로젝트에서 Travis-CI를 사용 했습니다. README 자체 !

이제 두 가지를 간략하게 비교하여 마무리하겠습니다.

  • Travis-CI는 훨씬 더 오랫동안 그곳에있었습니다. GitHub Actions에 대한 문서를 찾기가 더 어려울 것이라고 걱정할 수 있었지만 그렇지 않았습니다. 유용한 참조는 GitHub ActionsSetup Miniconda함께 Python 사용 입니다.
  • Travis-CI와 마찬가지로 Github Actions는 공개 프로젝트에 무료로 사용할 수 있습니다.
  • GitHub 통합은 Travis-CI 및 GitHub 작업 모두에 탁월하지만 작업에는 프로젝트 페이지에 전용 탭이있어 CI에 더 쉽게 액세스 할 수 있습니다.
  • Github의 작업으로 구성 CONDA은 내가 사용하고있는 트래비스-CI,보다 간단 것으로 판명 이 해킹 .
  • Github Actions 에서 Matrix (예 : Python version times OS like here )를 사용하는 것이 더 간단 하다는 것을 알았습니다 .
  • 작업 기간에 큰 차이를 느끼지 못했습니다. 내 샘플 PR에서 Travis-CI의 6 개 작업 (pip 및 conda, Linux 만 해당)은 8m 33 초에 실행되었으며 GitHub Actions에서는 5 개 pip 작업의 첫 번째 시리즈 (Linux 만 해당)는 4m 57 초에 실행되었으며 다른 시리즈는 6 개의 conda 작업 (Linux, Mac OS, Windows) 중 12 분 48 초 동안 병렬로 실행되었습니다. 따라서이 예에서 GitHub Actions는 50 % 더 오래 걸렸지 만 더 많은 구성 (+ 80 %)도 처리했습니다.

Suggested posts

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Auto-TS 라이브러리를 사용하여 ARIMA, SARIMAX, FB Prophet, VAR 및 ML 모델 개발

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Automated Machine Learning (AutoML)은 기계 학습 파이프 라인의 일부 구성 요소를 자동화하는 것을 말합니다. AutoML은 일부 모델 개발 프로세스를 자동화하여 데이터 과학자의 워크 플로를 가속화합니다.

Related posts

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

고유 분해 및 SVD에 유용한 기저의 선형 대수 개념 이해이 기사에서는 고유 분해 또는 특이 값 분해 (SVD)와 같은 행렬 분해 방법을 이해하는 흥미로운 방법 인 기저 개념에 대해 알아 봅니다. 정의 기본은 벡터 공간 (벡터 집합)을 설명하는 데 사용되는 좌표계입니다.

판다와 에라스무스 연구 교환 분석

판다와 에라스무스 연구 교환 분석

Erasmus 프로그램 2011-12에서 발생한 20 만 개의 연구 교환으로 데이터 세트를 분석 한 결과 1987 년 이후 Erasmus 프로그램은 매년 수십만 명의 유럽 학생들에게 한 학기 또는 1 년을 해외에서 보낼 기회를 다른 유럽에서 보낼 수있는 기회를 제공합니다. 경제적 인 지원뿐만 아니라 쉬운 교환 과정을 제공합니다. 유럽의 다양한 사람, 언어 및 문화에 대한 마음과 마음을 열어주는 정말 귀중한 경험입니다.

데이터 과학을위한 8 가지 기본 통계 개념

… 평범한 영어로 설명

데이터 과학을위한 8 가지 기본 통계 개념

통계는 "수량 데이터의 수집, 분석, 해석 및 표현을 다루는 수학의 한 분야"입니다. 프로그래밍과 기계 학습을 혼합하면 데이터 과학의 핵심 기술에 대해 꽤 잘 설명 할 수 있습니다.

데이터 과학의 9 가지 거리 측정

일반적인 거리 측정의 장점과 함정

데이터 과학의 9 가지 거리 측정

감독되거나 감독되지 않는 많은 알고리즘은 거리 측정을 사용합니다. 유클리드 거리 또는 코사인 유사성과 같은 이러한 측정은 종종 k-NN, UMAP, HDBSCAN 등과 같은 알고리즘에서 찾을 수 있습니다.