[ Python ] Cpython 컨트리뷰트 도전기 1. Getting Started

2018. 8. 28. 16:05공부 자료/오픈소스

[ Python ] Cpython 컨트리뷰트 도전기 1. Getting Started


* Cpython Github 을 참고하여 작성한 글입니다.

Dev Guide


    진행 할 때에는 파이썬 코드를 볼 수 있는 editor는 모두 사용 가능합니다. 실행하고, 테스트하고, 간단한 branch 설정 방법을 소개합니다.
* 아래에 더 자세하게 진행하며, 하단의 명령어는 간단하게 진행 가능한 정리 입니다.

# Make configure and make real file.
./configure --with-pydebug && make -j

# Run Test
./python -m test -j3

# If bug found,
git checkout -b fix-issue-12345 master

# If make patch..
make patchcheck

Getting Started

Get Setup


   git 등을 설치한 뒤, 파이썬을 내 repository로 fork 한 뒤, 내 repository에서 clone 해 온다. git remote 를 조절한다. upstream의 이름으로 원래의 파이썬을 지정한다.

git remote add upstream git@github.com:python/cpython.git

git remote -v 로 잘 설정 되었는지 확인하자.
[ 사진 1 : remote 설정은 위와 같이 진행하면 된다. ]

    내 컴퓨터는 우분투이므로, 우분투 기준으로 설명하겠다. 두가지 명령어만 실행시키면 된다.
# Make configure and make real file.
./configure --with-pydebug
 make -s -j2

    j 옵션은 core 갯수를 의미한다. 또한 -s 는 경고창 및 결과창을 제외하고 나오는 로그는 보여주지 않는 메시지이다. make 결과에 missing module이 있다고 뜨면 ( https://stackoverflow.com/questions/12023773/python-3-3-source-code-setup-modules-were-not-found-lzma-sqlite3-tkinter ) 를 참고해서 진행 해 보자.

Configure

    cofigure 파일은 cofigure.ac 파일을 autoconf를 실행하여 만들어집니다. 만일 POSIX 시스템 관련 함수, 즉 여러가지 system 관련 함수들에서  POSIX ( https://ko.wikipedia.org/wiki/POSIX ) system-specific functionality ) 관련된 변경이 있다면, configure.ac 파일을 변경하여 고쳐야 합니다. 홈페이지에서는 새로운 system-call 을 사용하거나 하는 것을 예시로 들었습니다. 

   또한 만약 configure 관련 변경이 있다면 configure을 직접 바꾸는 것이 아니라 configure.ac를 변경하고 autoconf를 실행해서 configure과 여러 추가 파일(pyconfig.h 같은)을 만들어야 한다고 합니다. autoreconf 와는 다른 명령어임을 유의하라고 하였습니다. 예상으로는 크게 다르지 않은 것 같습니다. 

Directory 구조

    Cpython 소스 트리에서 여러가지 폴더/디렉토리들이 있습니다. 다만 디렉토리의 규칙에는 예외도 있음에 유의하라고 하는데, 디렉토리의 역할이 꼭 정해진대로 진행되는 것은 아니라는 의미인 것 같습니다. 총 14가지의 홈페이지에 소개된 디렉토리들이 있는데, 각각은 다음과 같습니다. 개인적으로 중요하다고 생각 되는 것들은 굵게 표시 해 보았습니다.

Doc : 공식적인 문서들. https://docs.python.org/3/ 에 소개된 문서들과 동일하다. https://devguide.python.org/documenting/#building-doc 도 같이 확인하면 좋다.
Grammar : Python을 위한 EBNE( Extended Backus-Naur Form ) 형태의 문법 파일을 포함한다.
Include : 모든 interpreter 관련 헤더 파일들이 있다.
Lib : Python으로 작성된 Standard Library들이 포함되어 있다.
Mac : Mac 관련 특수 소스 코드들이 포함되어 있다.
Misc : 다른곳에 속하지 않는 개발자를 위한 문서등...
Modules : C 로 작성된 Standard Library들이 포함되어 있다.
Object : Built-in Type의 모든 코드들.
PC : 윈도우 관련 코드.
PCbuild : Python.org에서 제공하는 현재 윈도우에서 쓰이는 MSVC버전을 위한 빌드 파일들.
Parser : Parser 관련 코드들. Parser는 코드를 문법 단위로 조각내는 프로그램을 의미한다. AST nodes( Abstract Syntax Tree`s node )관련 정의도 여기에 있다. 
Programs : CPython interpreter의 main 함수를 포함하는 C로 구동 가능한 소스 코드들.
Python : CPython runtime의 Core를 구성하는 코드들. 컴파일러나 eval loops, 여러가지 built-in modules들이 포함된다.
Tools : Python을 유지하거나 유지하는데 사용 했었던 다양한 tools.