초보 자 는 어떻게 Python 프로젝트 의 오픈 소스 패키지 과정 에 대한 상세 한 설명 을 발표 합 니까?

이 글 은 GitHub 에 포장 하고 발표 하고 자 하 는 프로젝트 가 있다 고 가정 합 니 다.
STEP 0:프로젝트 라이선스 획득
다른 일 을 하기 전에 당신 의 프로젝트 가 시작 되 어야 하기 때문에 허가증 이 있어 야 합 니 다.어떤 허가증 을 얻 느 냐 는 프로젝트 패키지 의 사용 방식 에 달 려 있다.오픈 소스 항목 중 일부 흔 한 허가증 은 MIT 나 BSD 가 있다.
프로젝트 에 허가증 을 추가 하려 면 다음 링크 의 절 차 를 참조 하여 라 이 센 스 파일 을 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 에 추가 하면 됩 니 다.  https://help.github.com/en/articles/adding-a-license-to-a-repository
STEP 1:코드 준비 완료
프로젝트 를 포장 하려 면 예비 작업 을 해 야 합 니 다.
  • 당신 의 프로젝트 구 조 를 정확하게 자리 에 놓 으 세 요.일반적으로 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 는 프로젝트 이름 을 가 진 폴 더 를 포함 하고 프로젝트 의 핵심 코드 는 이 폴 더 에 있어 야 합 니 다.이 폴 더 외 에 패키지(테스트,문서 등)를 실행 하고 구축 하 는 데 필요 한 다른 코드 입 니 다.
  • 핵심 폴 더 는 하나의(또는 여러 개)모듈 과 하나의 를 포함해 야 합 니 다.init__.py 파일,이 파일 은 터미널 사용자 가 접근 하 기 를 원 하 는 클래스/함 수 를 포함 합 니 다.이 파일 은 터미널 사용자 가 접근 할 수 있 도록 패키지 버 전도 포함 할 수 있 습 니 다.
  • 이상 적 인 상황 에서 logging 패 키 지 를 사용 하여 합 리 적 인 로그 기록 시스템 을 설정 해 야 합 니 다(prints 로 출력 하 는 것 이 아 닙 니 다).
  • 이상 적 인 상황 에서 당신 의 핵심 코드 를 하나 이상 의 클래스 에 분배 해 야 합 니 다.
  • from .estimate import Estimator이init__.py 의 경우 Estimator 가 터미널 사용자 가 방문 할 클래스 라면(이 종 류 는 estimate.py 파일 에서 정의)
    
    import logging
    class LogMixin(object):
     @property
     def logger(self):
     name = '.'.join([self.__module__, self.__class__.__name__])
     FORMAT = '%(name)s:%(levelname)s:%(message)s'
     logging.basicConfig(format=FORMAT, level=logging.DEBUG)
     logger = logging.getLogger(name)
     return logger
    로그 시스템 의 예:LogMixin 클래스 는 다른 모든 클래스 에서 사용 할 수 있 습 니 다.
    STEP 2:패키지 도구 로 setup.py 만 들 기
    프로젝트 에 구조 가 생 긴 후에 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 에 setup.py 파일 을 추가 해 야 합 니 다.이것 은 모든 발표 와 버 전 유지보수 과정의 자동화 에 도움 이 된다.다음은 setup.py 의 예(소스 코드:https://github.com/nathan-toubiana/scitime/blob/master/setup.py)입 니 다.
    
    from setuptools import setup
    from os import path
    DIR = path.dirname(path.abspath(__file__))
    INSTALL_PACKAGES = open(path.join(DIR, 'requirements.txt')).read().splitlines()
    with open(path.join(DIR, 'README.md')) as f:
     README = f.read()
    setup(
     name='scitime',
     packages=['scitime'],
     description="Training time estimator for scikit-learn algorithms",
     long_description=README,
     long_description_content_type='text/markdown',
     install_requires=INSTALL_PACKAGES,
     version='0.0.2',
     url='http://github.com/nathan-toubiana/scitime',
     author='Gabriel Lerner & Nathan Toubiana',
     author_email='[email protected]',
     keywords=['machine-learning', 'scikit-learn', 'training-time'],
     tests_require=[
     'pytest',
     'pytest-cov',
     'pytest-sugar'
     ],
     package_data={
     # include json and pkl files
     '': ['*.json', 'models/*.pkl', 'models/*.json'],
     },
     include_package_data=True,
     python_requires='>=3'
    )
    setup.py 파일 의 예제
    몇 가지 주의사항:
  • 가방 에 의존 항목 이 있다 면 이 의존 항목 을 처리 하 는 간단 한 방법 은 설정 파일 에서 install 을 통 해requires 매개 변 수 는 의존 항목 을 추가 합 니 다(목록 이 길 면 이전 처럼 requirement.txt 파일 을 가리 킬 수 있 습 니 다).
  • 누군가가 가방 을 설치 할 때(프로젝트 라 이브 러 리 에서)메타 데 이 터 를 다운로드 하려 면 package 를 통 해data 매개 변 수 는 이 메타 데 이 터 를 추가 합 니 다.
  • setup()함수 에 대한 더 많은 정보,참조:https://setuptools.readthedocs.io/en/latest/setuptools.html
  • 주의:3 단계 부터 6 단계 까지 는 선택 할 수 있 습 니 다(단,강력 추천).하지만 지금 당장 가방 을 발표 하고 싶다 면 7 단계 로 바로 뛰 어 내 릴 수 있 습 니 다.
    3 단계:로 컬 테스트 와 테스트 보급률 을 설정 합 니 다.
    이때 아직 완성 되 지 않 았 으 니,너의 프로젝트 는 아직 단원 테스트 가 있어 야 한다.비록 많은 프레임 워 크 가 당신 을 도 울 수 있 지만,간단 한 방법 은 pytest 를 사용 하 는 것 입 니 다.모든 테스트 는 하나의 전용 폴 더 에 넣 어야 합 니 다(예 를 들 어 tests/또는 testing 이라는 폴 더).가능 한 한 핵심 코드 를 많이 포함 할 수 있 도록 이 폴 더 에 필요 한 모든 테스트 파일 을 설치 하 십시오.다음은 유닛 테스트 를 어떻게 작성 하 는 지 에 대한 예제 입 니 다.여기 SciTime 테스트 파일 도 있 습 니 다.
    자리 에 앉 으 면 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 에서 python-m pytest 를 실행 하여 로 컬 에서 테스트 할 수 있 습 니 다.
    테스트 를 만 든 후에 도 도달 율 을 추산 할 수 있 을 것 입 니 다.이 점 은 매우 중요 합 니 다.프로젝트 의 코드 량 을 가능 한 한 많이 테스트 하고 싶 기 때 문 입 니 다.
    많은 프레임 워 크 도 도달 율 을 계산 하 는 데 사용 할 수 있 습 니 다.SciTime 에 대해 서 는 codecov 를 사 용 했 습 니 다..codecov.yml 파일 을 만들어 서 허용 하 는 최소 도달 율 한도 값 을 결정 할 수 있 으 며,.coveragerc 파일 을 만들어 서 도달 율 분석 에 어떤 파일 을 포함 할 지 결정 할 수 있 습 니 다.
    
    comment: false
    coverage:
     status:
     project:
     default:
     target: auto
     threshold: 10%
     patch:
     default:
     target: auto
     threshold: 10%
    .codecov.yml 파일 예제
    
    [run]
    branch = True
    source = scitime
    include = */scitime/*
    omit =
     */_data.py
     */setup.py
    coveragerc 파일 예제
    STEP 4:표준화 문법 과 코드 스타일
    코드 가 PEP 8 준칙(즉,표준 양식 이 있 고 문법 이 정확 하 다)을 따 르 도록 확보 해 야 합 니 다.마찬가지 로 당신 이 해결 하 는 데 도움 을 줄 수 있 는 도구 가 많 습 니 다.여기 우 리 는 flake 8 을 썼 다.
    STEP 5:합 리 적 인 문 서 를 만 듭 니 다.
    현재 당신 의 프로젝트 는 이미 테스트 를 했 고 구조 도 좋아 졌 으 니 합 리 적 인 문 서 를 추가 할 때 가 되 었 습 니 다.우선 Github 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 에 좋 은 readme 파일 이 있어 야 합 니 다.완성 후 다음 과 같은 몇 가 지 를 더 하면 더욱 좋 습 니 다.
  • Pull 요청 과 issue 템 플 릿:새로운 Pull 요청 이나 issue 를 만 들 때 이 파일 들 은 원 하 는 설명 에 따라 템 플 릿 을 제공 할 수 있 습 니 다.
  • Pull 요청 생 성 절차:https://help.github.com/en/articles/creating-a-pull-request-template-for-your-repository
  • issue 생 성 절차:https://help.github.com/en/articles/manually-creating-a-single-issue-template-for-your-repository
  • Pull 요청 템 플 릿:https://github.com/nathan-toubiana/scitime/blob/master/.github/PULL_REQUEST_TEMPLATE.md
  • issue 템 플 릿:https://github.com/nathan-toubiana/scitime/tree/master/.github/ISSUE_TEMPLATE
  • 공헌 가이드(contribution guide).공헌 안내서 에서 외부 사용자 가 이 가방 을 개선 하 는 데 어떻게 협조 하 기 를 원 하 는 지 간단하게 설명해 야 한다.Scitime 의 공헌 지침 참조:https://github.com/nathan-toubiana/scitime/blob/master/.github/CONTRIBUTING.md.
  • 준칙,Scitime 의 준칙 참조:https://github.com/nathan-toubiana/scitime/blob/master/.github/CODE_OF_CONDUCT.md
  • 태그 와 설명(아래 캡 처 참조)
  • readme 파일 의 탭(탭 을 어떻게 사용 하 는 지 추천 하 는 좋 은 글:https://medium.freecodecamp.org/how-to-use-badges-to-stop-feeling-like-a-noob-d4e6600d37d2).
  • readme 파일 은 상당히 종합 적 이 어야 하기 때문에 보통 더 자세 한 문서 가 있 습 니 다.sphinx 로 완성 하고 readthedocs 에서 문 서 를 관리 할 수 있 습 니 다.문서 와 관련 된 파일 은 보통 docs/폴 더 에 놓 여 있 습 니 다.sphinx 와 readthedocs 관련 튜 토리 얼:
    https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html

    태그 와 설명 을 포함 하 는 프로젝트 라 이브 러 리 예제
    STEP 6:지속 통합 생 성
    이때 당신 의 프로젝트 는 발표 준비 가 얼마 남지 않 았 습 니 다.그러나 제출 할 때마다 문 서 를 업데이트 하고 테스트 를 실행 하 며 스타일 과 보급률 을 검사 해 야 하 는 것 은 어 려 운 것 같 습 니 다.다행히도 지속 적 인 통합(CI)이 당신 의 완성 을 도 울 수 있 습 니 다.제출 할 때마다 GitHub 의 webhook 을 사용 하여 모든 작업 을 자동 으로 수행 할 수 있 습 니 다.다음은 우리 가 SciTime 에서 사용 하 는 CI 도구 입 니 다.
  • 실행 테스트 에 대해 저 희 는 travis ci 와 appveyor(Windows 플랫폼 의 테스트 에 사용)를 사 용 했 습 니 다.Travis CI 에 대해 서 는 프로젝트 라 이브 러 리 에 webhook 을 설정 하 는 것 외 에 도'travis.yml 파일'을 만들어 야 합 니 다.이 파일 에 서 는 테스트 를 실행 할 수 있 을 뿐만 아니 라 업 데 이 트 된 보급률 출력 과 스타일 과 형식 을 검사 할 수 있 습 니 다.app veyor.yml 파일 을 만 들 면 app veyor 도 이렇게 할 수 있 습 니 다.
  • codecov 와 readthdocs 에 도 전용 webhook
  • 이 있 습 니 다.
    
    language: python
    python:
     - "3.6"
    # command to install dependencies
    install:
     - pip install -r requirements.txt
     - pip install flake8
     - pip install pytest-cov
     - pip install codecov
    # command to run tests
    script:
     - python -m pytest --cov=scitime
     - ./build_tools/flake_diff.sh
    after_success:
     - codecov
    .travis.yml 파일 의 예제:제출 할 때마다 테스트 는 검사 테스트 보급률 과 함께 진행 되 어야 합 니 다.하지만 또 하나의 flake 8 검사(논 리 는 flakediff.sh 파일 의 정의:https://github.com/nathan-toubiana/scitime/blob/master/build_tools/flake_diff.sh)
    
    environment:
     matrix:
     - PYTHON: "C:Python36-x64"
    install:
     # We need wheel installed to build wheels
     - "%PYTHON%python.exe -m pip install -r requirements.txt"
     - "%PYTHON%python.exe -m pip install pytest==3.2.1"
    build: off
    test_script:
     - "%PYTHON%python.exe -m pytest"
    app veyor.yml 파일 예제:여기 서 테스트 만 실행 합 니 다.
    이것 은 프로젝트 라 이브 러 리 를 업데이트 하 는 전체 과정 을 더욱 쉽게 할 것 이다.

    웹 훅 의 제출 기록 예제 통합
    STEP 7:첫 번 째 release 와 Publication 만 들 기
    이때,당신 이 발표 할 가방 은 다음 과 유사 해 야 합 니 다.
    
    your_package/
     __init__.py
     your_module.py
    docs/
    tests/
    setup.py
    travis.yml
    appveyor.yml
    .coveragerc
    .codecov.yml
    README.md
    LICENSE
    .github/
     CODE_OF_CONDUCT.md
     CONTRIBUTING.md
     PULL_REQUEST_TEMPLATE.md
     ISSUE_TEMPLATE/
    이제 발표 해도 돼 요!우선 GitHub 에 첫 번 째 release 를 만 드 는 것 입 니 다.주어진 시간 에 항목 의 상 태 를 추적 하기 위해 서 입 니 다.버 전이 바 뀔 때마다 새로운 release 를 만들어 야 합 니 다.
    완성 되면 유일 하 게 해 야 할 일 은 가방 을 발표 하 는 것 이다.python 가방 을 발표 하 는 가장 흔 한 플랫폼 은 PyPI 와 Conda 입 니 다.다음 에 우 리 는 어떻게 두 가지 로 발표 하 는 지 설명 할 것 이다.
  • PyPI 에 대해 먼저 계 정 을 만 든 다음 에 twine 으로 절 차 를 실행 해 야 합 니 다.https://realpython.com/pypi-publish-python-package/。이 는 상당히 간단 할 것 이 며,Pypi 는 실제 배치 전에 사용 할 수 있 는 테스트 환경 도 제공 했다.PyPI 는 전체적으로 소스 코드(python setup.py sdist)를 만 들 고 twine(twine upload dist/*)을 사용 하여 업로드 합 니 다.완료 되면 가방 에 대응 하 는 PyPI 페이지 가 있 고 누구나 pip 명령 을 실행 하여 가방 을 설치 할 수 있어 야 합 니 다.
  • Conda 에 대해 저 희 는 conda forge 를 통 해 가방 을 발표 하 는 것 을 추천 합 니 다.conda forge 는 지역 사회 로 conda 채널 을 통 해 가방 을 발표 하고 유지 하 는 데 도움 을 줍 니 다.당신 은 다음 절차 에 따라 가방 을 지역 사회 에 추가 할 수 있 습 니 다.https://conda-forge.org/#add_recipe,그리고 conda forge Github 조직 에 추가 되 고 가방 을 쉽게 지 킬 수 있 습 니 다.그리고 누구나 conda 명령 을 실행 하여 가방 을 설치 할 수 있 습 니 다.
  • 완성!
    지금 당신 의 가방 은 이미 발송 되 었 고 누구나 사용 할 수 있 을 것 입 니 다!대부분의 작업 이 완료 되 었 지만 프로젝트 를 유지 해 야 합 니 다.업 데 이 트 를 해 야 합 니 다.이것 은 대체적으로 중대 한 변경 을 할 때마다 버 전 을 변경 하고 새로운 release 를 만 들 고 7 단 계 를 다시 실행 해 야 한 다 는 것 을 의미 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기