초보 자 는 어떻게 Python 프로젝트 의 오픈 소스 패키지 과정 에 대한 상세 한 설명 을 발표 합 니까?
STEP 0:프로젝트 라이선스 획득
다른 일 을 하기 전에 당신 의 프로젝트 가 시작 되 어야 하기 때문에 허가증 이 있어 야 합 니 다.어떤 허가증 을 얻 느 냐 는 프로젝트 패키지 의 사용 방식 에 달 려 있다.오픈 소스 항목 중 일부 흔 한 허가증 은 MIT 나 BSD 가 있다.
프로젝트 에 허가증 을 추가 하려 면 다음 링크 의 절 차 를 참조 하여 라 이 센 스 파일 을 프로젝트 라 이브 러 리 의 루트 디 렉 터 리 에 추가 하면 됩 니 다. https://help.github.com/en/articles/adding-a-license-to-a-repository
STEP 1:코드 준비 완료
프로젝트 를 포장 하려 면 예비 작업 을 해 야 합 니 다.
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 파일 의 예제몇 가지 주의사항:
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 파일 이 있어 야 합 니 다.완성 후 다음 과 같은 몇 가 지 를 더 하면 더욱 좋 습 니 다.
https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html 。
태그 와 설명 을 포함 하 는 프로젝트 라 이브 러 리 예제
STEP 6:지속 통합 생 성
이때 당신 의 프로젝트 는 발표 준비 가 얼마 남지 않 았 습 니 다.그러나 제출 할 때마다 문 서 를 업데이트 하고 테스트 를 실행 하 며 스타일 과 보급률 을 검사 해 야 하 는 것 은 어 려 운 것 같 습 니 다.다행히도 지속 적 인 통합(CI)이 당신 의 완성 을 도 울 수 있 습 니 다.제출 할 때마다 GitHub 의 webhook 을 사용 하여 모든 작업 을 자동 으로 수행 할 수 있 습 니 다.다음은 우리 가 SciTime 에서 사용 하 는 CI 도구 입 니 다.
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 입 니 다.다음 에 우 리 는 어떻게 두 가지 로 발표 하 는 지 설명 할 것 이다.
지금 당신 의 가방 은 이미 발송 되 었 고 누구나 사용 할 수 있 을 것 입 니 다!대부분의 작업 이 완료 되 었 지만 프로젝트 를 유지 해 야 합 니 다.업 데 이 트 를 해 야 합 니 다.이것 은 대체적으로 중대 한 변경 을 할 때마다 버 전 을 변경 하고 새로운 release 를 만 들 고 7 단 계 를 다시 실행 해 야 한 다 는 것 을 의미 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.