저는 프로그래머가 아닌 학문적이며, 연구를 뒷받침 할 목적으로 파이썬 프로그램을 직접 작성해 온 경험이 있습니다. 내 최신 프로젝트는 나뿐만 아니라 다른 많은 사람들에게도 유용 할 것 같으며 오픈 소스 Python 라이브러리로 출시하려고 생각합니다.
그러나 제대로 작동하는 개인 프로젝트에서 다른 사람이 쉽게 설치하고 사용할 수있는 라이브러리로 넘어가는 데 약간의 장애물이있는 것 같습니다. 이 질문은 공개 릴리스를 시작하기 위해 취해야 할 첫 번째 단계에 관한 것입니다.
현재 라이브러리와 라이브러리 자체를 사용하는 코드가 포함 된 단일 git 저장소가 있으며, git을 비상 실행 취소 버튼으로 사용합니다. 이 모든 것이 단일 사용자에게는 잘 작동하지만 릴리스하려는 경우에는 적절하지 않습니다. 내가 끝내고 싶은 곳은 내 라이브러리가 별도의 저장소에 있고를 사용하여 다른 사람이 설치할 수 있고 pip
안정적인 API를 가지고 있다는 것입니다.
setuptools 등을 사용하는 법을 배우는 것은 일단 게시하고 싶은 시점에 그렇게 어렵지 않을 것입니다. 제 문제는 그 시점에 도달하기 위해 어떻게 작업 해야하는지 아는 것입니다.
그래서 내 질문은, 공공 소비를 위해 파이썬 라이브러리 프로젝트를 준비하기 위해 취해야 할 첫 단계는 무엇입니까? 라이브러리 릴리스 공개를 위해 작업하기 위해 디렉토리 구조, 자식 저장소 등을 어떻게 재구성해야합니까?
더 일반적으로, 처음 시도 할 때 도움이되는 것으로 알려진 리소스가 있으면 매우 유용합니다. 모범 사례 및 피해야 할 실수 등에 대한 포인터도 매우 유용합니다.
몇 가지 설명 : 현재 답변은 "파이썬 라이브러리를 다른 사람들이 사용하기 좋은 라이브러리로 만들려면 어떻게해야합니까?" 이것은 유용하지만 내가 묻고 자하는 질문과 다릅니다.
저는 현재 프로젝트를 출시하기위한 긴 여정을 시작 하고 있습니다. 내 구현의 핵심은 효과가 있으며 실제로 잘 작동하지만 나보다 앞선 작업량에 압도되는 느낌이 들며 프로세스 탐색 방법에 대한 지침을 찾고 있습니다. 예를 들면 다음과 같습니다.
내 라이브러리 코드는 현재이를 사용하는 도메인 고유 코드와 연결되어 있습니다. 하위 폴더에 있으며 동일한 git 저장소를 공유합니다. 결국 독립형 라이브러리로 만들어 자체 저장소에 저장해야하지만 어떻게 해야할지 모릅니다. (여전히 편집 할 수 있도록 '개발 모드'로 라이브러리를 설치하는 방법이나 두 git repos를 동기화 상태로 유지하는 방법도 없습니다.)
나는 결국 스핑크스 또는 다른 도구를 사용해야한다는 것을 알고 있기 때문에 내 문서 문자열은 간결합니다. 그러나이 도구는 배우기 쉽지 않은 것처럼 보이므로 이것이 주요 하위 프로젝트가되어 계속 계속 사용합니다.
어떤 시점에서 setuptools 또는 다른 도구를 사용하여 패키지화하고 종속성을 추적하는 방법을 배워야합니다. 지금이 작업을 수행해야하는지 여부가 확실하지 않으며 설명서는 새로운 사용자에게는 절대적인 미로이므로 나중에 계속하기로 결정합니다.
나는 체계적인 테스트를 수행 할 필요는 없었지만,이 프로젝트를 위해 확실히 할 것이므로, (i) 프로젝트에 적합한 방법론을 알기 위해 테스트에 대해 충분히 배워야합니다. (ii) 내가 선택한 방법론에 어떤 도구를 사용할 수 있는지 배우십시오. (iii) 내가 선택한 도구를 사용하는 법을 배우십시오. (iv) 내 프로젝트에 테스트 스위트 등을 구현합니다. 이것은 그 자체로 프로젝트입니다.
내가해야 할 다른 일이있을 수도 있습니다. 예를 들어, jonrsharpe 는 git-flow, tox, TravisCI, virtualenv 및 CookieCutter를 언급 한 유용한 링크 를 게시했습니다 . (게시물은 2013 년부터 였으므로 현재 얼마나 많은지 확인하기 위해 몇 가지 작업을 수행해야합니다.)
이 모든 것을 종합하면 엄청난 양의 작업이지만, 계속 연결해두면 모든 작업을 수행 할 수있을 것입니다. 서두르지 않습니다. 내 문제는 그것을 한 번에 하나씩 수행 할 수있는 관리 가능한 단계로 나누는 방법을 아는 것입니다.
다시 말해, 결국 출시 가능한 제품에 도달하기 위해 지금 취할 수있는 가장 중요한 구체적인 단계를 묻습니다. 무료 주말이 있다면이 중 어떤 것에 집중해야합니까? 어느 것이라도 다른 것들과 분리하여 수행 할 수 있으므로 적어도 전체 단계를 수행하지 않고도 한 단계를 완료 할 수 있습니까? 프로젝트 자체에 계속 집중할 시간을 갖도록 이러한 것들을 배우는 가장 효율적인 방법은 무엇입니까? (이 모든 것이 본질적으로 취미가 아니라 취미 프로젝트라는 점을 명심하십시오.) 실제로 수행 할 필요가없는 프로젝트가 있습니까?
모든 답변에 큰 감사를 표하지만 특히 현대적인 Python 개발을 참조하여 이러한 프로젝트 관리 측면에 중점을 둔 답변을 환영합니다.