Github API v3에 가장 적합한 파이썬 라이브러리 [닫기]


86

나에게 적합한 Github APIv3 용 파이썬 라이브러리를 찾고 있습니다.

GH API 문서에 언급 된 하나의 라이브러리 (python-github3)를 찾았습니다 . ipython에서 한두 시간 동안 놀아 본 후 탐색 / 작업하는 것이 정말 직관적이지 않다는 것을 알았습니다. 나는 좀 더 살펴 보았고, 적어도 그런 도서관을 쓰려고 시도하는 사람들이 꽤 많다는 것을 알았다. 더 유망 해 보이는 (한눈에) PyGithub다른 python-github3 , 이는 분명히 첫 번째 것과 다릅니다.

다음 날 연속으로 도서관을 시험해보기 전에 SO 커뮤니티에 해당 도서관에 대해 허용되고 결정적이고 명백한 선택이 있는지 묻고 싶었습니다.

첫 번째 라이브러리에 대해 내가 싫어했던 것은 데이터를 얻는 직관적이지 않은 방법이었습니다. 어떤 것은 속성으로 얻거나, 어떤 것은 메서드의 반환 값으로 얻습니다. 반환 값은 복잡한 객체입니다. 페이징 및 반복 등

이와 관련하여 PyGithub는 언뜻보기에 더 매력적으로 보입니다. 객체 계층을 명확하게 드릴 다운 한 다음 원하는 속성을 포함하는 속성에 도달합니다.

for repo in g.get_user().get_repos(): print repo.name

그래서 공유 할 지혜의 진주가 있습니까? 라이브러리 품질을 신속하게 판단 할 수있는 기술이 부족하다는 것을 알고 있으므로 SO 커뮤니티로 전환하고 있습니다.

편집 : fwiw, 나는 PyGithub 을 사용하게 되었습니다 . 그것은 잘 작동하고 저자는 피드백과 버그 보고서를 정말로 수용합니다. :-)


github 팀에게 물어볼 가치가 있습니다.
Daenyth

6
fwiw, 나는 PyGithub를 사용하게되었습니다. 그것은 잘 작동하고 저자는 피드백과 버그 보고서를 정말로 수용합니다. :-)
Christoph

나는 GitHub의 별별로 모든 대안을 정렬하고 결과를이 답변과 비교하고 PyGithub를 선택했습니다. Python 3을 지원합니다. 잘 문서화되어있는 것 같습니다. 모두 시도 할 시간이 없으며 결정을 내릴 다른 방법도 없습니다.
astrojuanlu

답변:


77

당신이 초보자 파이썬 프로그래머라고 언급 했으므로 먼저 Github 라이브러리없이 JSON API를 사용하는 것이 좋습니다. 실제로 그렇게 어렵지 않으며 모든 JSON API에 동일한 접근 방식을 적용 할 수 있기 때문에 나중에 프로그래밍 생활에서 많은 도움이 될 것입니다. 특히 도서관을 시험 해보는 데 며칠이 걸릴 것 같다면.

일부 라이브러리가 사용하기 쉽지 않다는 것이 아니라 API를 직접 사용하려는 약간의 추가 노력이 장기적으로 가치가있을 수 있다고 말하는 것입니다. 적어도이 라이브러리 중 일부가 "직관적이지 않은"이유를 이해하는 데 도움이 될 것입니다 (말한대로).

django 저장소의 생성 시간을 가져 오는 간단한 예제 :

import requests
import json
r = requests.get('https://api.github.com/repos/django/django')
if(r.ok):
    repoItem = json.loads(r.text or r.content)
    print "Django repository created: " + repoItem['created_at']

이것은 인기있는 요청 라이브러리를 사용하고 있습니다 . 코드에서 당연히 오류 사례도 처리해야합니다.

인증을 통한 액세스가 필요한 경우 조금 더 복잡합니다.


11
을 (를) 언급하는 +1은 requests이전에 본 적이 없습니다. 멋지게 보입니다.
larsks

btw, 이것은이어야합니다 r.content. r.text( 'Response'객체에는 'text'속성이 없습니다.)
Christoph

r.text응답이 JSON이면 @Christoph 가 작동해야합니다. r.content디코딩하지 않고 바이트를 직접 반환합니다. 요청 라이브러리는 내부적으로 (r.text or r.content)구문을 사용하는 것 같습니다 . 아마도 그렇게해야합니다. 왜 text부동산을 볼 수 없는지 잘 모르겠습니다 .
Lycha

그럼 무슨 일인지 모르겠지만, (엉망 들여 쓰기를 수정 제외) 그대로 ipython에 원래 예를 넣어 가지고AttributeError: 'Response' object has no attribute 'text'
크리스토프

내가 json.loads(r.content or r.text)편집 한 것을 말하면 btw 작동합니다.
Christoph

32

결국 나는 PyGithub 를 사용하게 되었습니다 . 그것은 잘 작동하고 저자는 피드백과 버그 보고서를 정말로 수용합니다. :-)

(더 나은 가시성을 위해 내 편집에서 원래 질문으로 수정 됨)


15

PyGitHub에 대한 문서는 끔찍하지만 제품은 훌륭합니다. 다음은 실제로 파일을 검색하고 파일 시작 부분에 새 주석으로 변경 한 다음 다시 커밋하는 간단한 샘플입니다.

from github import Github
gh = Github(login_or_token='.....', base_url='...../api/v3')
user = gh.get_user()
repo = user.get_repo("RepoName")
file = repo.get_file_contents("/App/forms.py")
decoded_content = "# Test " + "\r\n" + file.decoded_content
repo.update_file("/"RepoName"/forms.py", "Commit Comments", decoded_content, file.sha)

2
맞나요? 나는 오랫동안 그것을 사용하지 않았지만 여전히 유지되고 있습니다-아마도 이것에 대한 문제 를 열 수 있습니까? Btw, PyGithub는 원래 제작자가 더 이상 시간이 없어 자원 봉사자를 요청한 성공적인 유지 관리 핸드 오버의 몇 안되는 예 중 하나입니다 .
Christoph

2
이 예제 덕분에 누군가가 프로젝트를 개발하는 데 몇 달을 소비 할 수 있는지 이해하지 못하고 사용 방법을 설명하는 몇 개의 단락을 작성하지 않아도됩니다.
serg

pygithub.readthedocs.io/en/latest 의 문서가 내가해야 할 일에 대해 잘 작동 한다는 것을 알았습니다. 문서는 최신 기능에 대해 잘 관리되지 않을 수 있으며 내가 원하는 모든 예제가 포함되어 있지 않을 수 있지만 (Google에서 나머지는 처리했지만) 괜찮 았습니다.
aschultz

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.