{"id":34246,"name":"python-package-guide","description":"Python packaging made simple. Recommendations \u0026 guidance curated by the pyOpenSci community","url":"https://github.com/pyopensci/python-package-guide","last_synced_at":"2025-09-05T06:08:47.776Z","repository":{"id":65029629,"uuid":"556814582","full_name":"pyOpenSci/python-package-guide","owner":"pyOpenSci","description":"Python packaging made simple. Recommendations \u0026 guidance curated by the pyOpenSci community","archived":false,"fork":false,"pushed_at":"2025-08-21T22:57:10.000Z","size":219683,"stargazers_count":131,"open_issues_count":70,"forks_count":72,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-08-28T22:59:45.833Z","etag":null,"topics":["data-science","open-science","open-source","python"],"latest_commit_sha":null,"homepage":"https://www.pyopensci.org/python-package-guide/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyOpenSci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":".zenodo.json"}},"created_at":"2022-10-24T15:06:05.000Z","updated_at":"2025-08-21T22:55:11.000Z","dependencies_parsed_at":"2024-01-20T03:23:21.623Z","dependency_job_id":"fd4c1b1a-fdd2-4684-a52e-d553f01879f6","html_url":"https://github.com/pyOpenSci/python-package-guide","commit_stats":{"total_commits":402,"total_committers":14,"mean_commits":"28.714285714285715","dds":"0.23631840796019898","last_synced_commit":"fad8407ddc02f7b3e15e9ef0438a6dac1fd928d1"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/pyOpenSci/python-package-guide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyOpenSci","download_url":"https://codeload.github.com/pyOpenSci/python-package-guide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273718589,"owners_count":25155543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"pyOpenSci","name":"pyOpenSci","uuid":"28938222","kind":"organization","description":"We build diverse community around the tools that drive open science through open peer review, mentorship and training.","email":null,"website":"www.pyopensci.org","location":null,"twitter":"pyOpenSci","company":null,"icon_url":"https://avatars.githubusercontent.com/u/28938222?v=4","repositories_count":7,"last_synced_at":"2023-03-25T11:45:29.324Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pyOpenSci","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-03-25T11:45:29.571Z","updated_at":"2023-03-25T11:45:29.571Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyOpenSci","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyOpenSci/repositories"},"packages":[],"commits":{"id":1362182,"full_name":"pyOpenSci/python-package-guide","default_branch":"main","committers":[{"name":"Leah Wasser","email":"leah@pyopensci.org","login":null,"count":307},{"name":"allcontributors[bot]","email":"46447321+allcontributors[bot]","login":"allcontributors[bot]","count":55},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":8},{"name":"Jeremy Paige","email":"ucodery@gmail.com","login":null,"count":7},{"name":"Daniel Possenriede","email":"possenriede@gmail.com","login":null,"count":4},{"name":"sneakers-the-rat","email":"JLSaunders987@gmail.com","login":null,"count":4},{"name":"Batalex","email":"alexandre.batisse","login":null,"count":3},{"name":"Simon","email":"31246246+SimonMolinsky","login":"SimonMolinsky","count":3},{"name":"Alex Batisse","email":"alexandre.batisse@hey.com","login":null,"count":2},{"name":"Henry Schreiner","email":"HenrySchreinerIII@gmail.com","login":null,"count":2},{"name":"ruoxi","email":"roxie@live.cn","login":null,"count":2},{"name":"Hugo van Kemenade","email":"hugovk","login":"hugovk","count":2},{"name":"Filipe Fernandes","email":"ocefpaf@gmail.com","login":"ocefpaf","count":2},{"name":"Matt Hall","email":"kwinkunks@gmail.com","login":null,"count":1}],"total_commits":402,"total_committers":14,"total_bot_commits":63,"total_bot_committers":2,"mean_commits":28.714285714285715,"dds":0.23631840796019898,"past_year_committers":[{"name":"Leah Wasser","email":"leah@pyopensci.org","login":null,"count":267},{"name":"allcontributors[bot]","email":"46447321+allcontributors[bot]","login":"allcontributors[bot]","count":46},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":8},{"name":"Jeremy Paige","email":"ucodery@gmail.com","login":null,"count":7},{"name":"Daniel Possenriede","email":"possenriede@gmail.com","login":null,"count":4},{"name":"sneakers-the-rat","email":"JLSaunders987@gmail.com","login":null,"count":4},{"name":"Batalex","email":"alexandre.batisse","login":null,"count":3},{"name":"Simon","email":"31246246+SimonMolinsky","login":"SimonMolinsky","count":3},{"name":"Alex Batisse","email":"alexandre.batisse@hey.com","login":null,"count":2},{"name":"Henry Schreiner","email":"HenrySchreinerIII@gmail.com","login":null,"count":2},{"name":"ruoxi","email":"roxie@live.cn","login":null,"count":2},{"name":"Hugo van Kemenade","email":"hugovk","login":"hugovk","count":2},{"name":"Filipe Fernandes","email":"ocefpaf@gmail.com","login":"ocefpaf","count":2},{"name":"Matt Hall","email":"kwinkunks@gmail.com","login":null,"count":1}],"past_year_total_commits":353,"past_year_total_committers":14,"past_year_total_bot_commits":54,"past_year_total_bot_committers":2,"past_year_mean_commits":25.214285714285715,"past_year_dds":0.24362606232294615,"last_synced_at":"2024-01-26T07:35:23.854Z","last_synced_commit":"fad8407ddc02f7b3e15e9ef0438a6dac1fd928d1","created_at":"2023-09-13T13:47:22.517Z","updated_at":"2024-01-26T07:35:23.854Z","commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-05T00:00:10.343Z","repositories_count":5480019,"commits_count":853389012,"contributors_count":31098138,"owners_count":906558,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"pyOpenSci/python-package-guide","html_url":"https://github.com/pyOpenSci/python-package-guide","last_synced_at":"2025-09-05T05:39:04.345Z","status":null,"issues_count":122,"pull_requests_count":428,"avg_time_to_close_issue":18266153.66,"avg_time_to_close_pull_request":1161910.1922077923,"issues_closed_count":50,"pull_requests_closed_count":385,"pull_request_authors_count":52,"issue_authors_count":32,"avg_comments_per_issue":2.0655737704918034,"avg_comments_per_pull_request":1.5327102803738317,"merged_pull_requests_count":351,"bot_issues_count":1,"bot_pull_requests_count":132,"past_year_issues_count":34,"past_year_pull_requests_count":106,"past_year_avg_time_to_close_issue":1680631.25,"past_year_avg_time_to_close_pull_request":571936.8089887641,"past_year_issues_closed_count":8,"past_year_pull_requests_closed_count":89,"past_year_pull_request_authors_count":23,"past_year_issue_authors_count":11,"past_year_avg_comments_per_issue":0.4117647058823529,"past_year_avg_comments_per_pull_request":1.3867924528301887,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":33,"past_year_merged_pull_requests_count":83,"created_at":"2023-09-13T13:47:57.672Z","updated_at":"2025-09-05T05:39:04.347Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyOpenSci%2Fpython-package-guide/issues","issue_labels_count":{"help wanted":21,"sprintable":19,"translations":6,"pyconus-24":6,"good first issue":3,"new-content":3,"documentation":2,"bug":2,"UX":2,"beginner-friendly":2,"bug-fix":1,"enhancement":1,"question":1,"lang-JA":1,"scipy-24":1,"lang-ES":1},"pull_request_labels_count":{"translations":16,"🚀 ready-for-review":14,"lang-ES":9,"documentation":8,"pyconus-24":8,"bug-bash":8,"new-content":7,"sprintable":7,"maintenance":6,"lang-JA":5,"enhancement-feature":5,"being-updated-dont-review":3,"bug":1,"enhancement":1,"draft":1,"ready-for-review":1,"bug-fix":1},"issue_author_associations_count":{"MEMBER":67,"CONTRIBUTOR":25,"NONE":20,"COLLABORATOR":10},"pull_request_author_associations_count":{"CONTRIBUTOR":209,"MEMBER":167,"NONE":38,"COLLABORATOR":14},"issue_authors":{"lwasser":58,"tkoyama010":8,"zackw":7,"ucodery":7,"flpm":5,"sneakers-the-rat":3,"BSuperbad":3,"pb-413":3,"NickleDave":3,"kwinkunks":2,"willingc":2,"yardasol":1,"yang-ruoxi":1,"hpodzorski-USGS":1,"abravalheri":1,"allcontributors[bot]":1,"RobPasMue":1,"wigging":1,"sosey":1,"kierisi":1,"stefmolin":1,"ayhanxian":1,"eriknw":1,"Tyler-Bonnell":1,"tomato-gits":1,"sn3hay":1,"tomalrussell":1,"calekochenour":1,"EricThomson":1,"akhilkrishnar0":1,"ncclementi":1,"MarieRoald":1},"pull_request_authors":{"lwasser":123,"allcontributors[bot]":113,"tkoyama010":40,"sneakers-the-rat":19,"flpm":16,"pre-commit-ci[bot]":16,"RobPasMue":14,"ucodery":8,"ptressel":5,"willingc":5,"Tyler-Bonnell":4,"pb-413":3,"dependabot[bot]":3,"miguelalizo":3,"hugovk":3,"jameslamb":3,"kierisi":3,"mihaimaruseac":2,"nyeshlur":2,"hpodzorski-USGS":2,"mrgah":2,"sosey":2,"stefmolin":2,"ncclementi":2,"Revathyvenugopal162":2,"eriknw":2,"MarieRoald":2,"henryiii":2,"brews":2,"NickleDave":1,"calekochenour":1,"Vaunty":1,"BSuperbad":1,"ocefpaf":1,"yang-ruoxi":1,"chenghlee":1,"Batalex":1,"aplozadab":1,"yardasol":1,"kwinkunks":1,"dpprdan":1,"jrrickerson":1,"santisoler":1,"tomalrussell":1,"georgp23":1,"SimonMolinsky":1,"ayhanxian":1,"jhkennedy":1,"ofek":1,"tomato-gits":1,"schwalbe10":1,"hfactor13":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-05T00:00:10.444Z","repositories_count":10087320,"issues_count":31306968,"pull_requests_count":96469683,"authors_count":10696025,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"translations":2,"bug":2,"sprintable":2,"lang-JA":1,"help wanted":1,"good first issue":1},"past_year_pull_request_labels_count":{"maintenance":4,"documentation":3,"lang-JA":1,"bug":1,"translations":1,"lang-ES":1,"draft":1},"past_year_issue_author_associations_count":{"MEMBER":21,"COLLABORATOR":6,"CONTRIBUTOR":5,"NONE":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":49,"MEMBER":44,"NONE":10,"COLLABORATOR":3},"past_year_issue_authors":{"lwasser":15,"tkoyama010":4,"ucodery":4,"flpm":2,"sneakers-the-rat":2,"willingc":2,"akhilkrishnar0":1,"MarieRoald":1,"stefmolin":1,"tomalrussell":1,"tomato-gits":1},"past_year_pull_request_authors":{"allcontributors[bot]":22,"tkoyama010":18,"lwasser":17,"pre-commit-ci[bot]":8,"flpm":8,"sneakers-the-rat":5,"RobPasMue":3,"willingc":3,"dependabot[bot]":3,"jameslamb":3,"MarieRoald":2,"mihaimaruseac":2,"mrgah":2,"eriknw":1,"aplozadab":1,"schwalbe10":1,"tomato-gits":1,"georgp23":1,"ncclementi":1,"hfactor13":1,"jrrickerson":1,"stefmolin":1,"Revathyvenugopal162":1},"maintainers":[{"login":"lwasser","count":181,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lwasser"},{"login":"tkoyama010","count":37,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tkoyama010"},{"login":"flpm","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/flpm"},{"login":"ucodery","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ucodery"},{"login":"willingc","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/willingc"},{"login":"kierisi","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/kierisi"},{"login":"Revathyvenugopal162","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Revathyvenugopal162"},{"login":"ocefpaf","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ocefpaf"},{"login":"santisoler","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/santisoler"},{"login":"Batalex","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Batalex"}],"active_maintainers":[{"login":"lwasser","count":32,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lwasser"},{"login":"tkoyama010","count":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tkoyama010"},{"login":"flpm","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/flpm"},{"login":"willingc","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/willingc"},{"login":"ucodery","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ucodery"},{"login":"Revathyvenugopal162","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Revathyvenugopal162"}]},"events":{"total":{"IssuesEvent":51,"WatchEvent":29,"DeleteEvent":53,"IssueCommentEvent":342,"PushEvent":381,"PullRequestReviewCommentEvent":153,"PullRequestReviewEvent":193,"PullRequestEvent":195,"ForkEvent":19,"CreateEvent":58},"last_year":{"IssuesEvent":51,"WatchEvent":29,"DeleteEvent":53,"IssueCommentEvent":342,"PushEvent":381,"PullRequestReviewCommentEvent":153,"PullRequestReviewEvent":193,"PullRequestEvent":195,"ForkEvent":19,"CreateEvent":58}},"keywords":["data-science","open-science","open-source","python"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/build-book.yml","sha":null,"kind":"manifest","created_at":"2023-01-01T04:21:31.985Z","updated_at":"2023-01-01T04:21:31.985Z","repository_link":"https://github.com/pyOpenSci/python-package-guide/blob/main/.github/workflows/build-book.yml","dependencies":[{"id":6854326534,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6854326540,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6854326543,"package_name":"actions/cache","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6854326546,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6854326549,"package_name":"peaceiris/actions-gh-pages","ecosystem":"actions","requirements":"v3.8.0","direct":true,"kind":"composite","optional":false},{"id":6854326551,"package_name":"chabad360/htmlproofer","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2023-01-01T04:21:31.998Z","updated_at":"2023-01-01T04:21:31.998Z","repository_link":"https://github.com/pyOpenSci/python-package-guide/blob/main/requirements.txt","dependencies":[{"id":6854326804,"package_name":"furo","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326805,"package_name":"myst-nb","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326806,"package_name":"sphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326807,"package_name":"sphinx-autobuild","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326808,"package_name":"sphinx-copybutton","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326809,"package_name":"sphinx-design","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326810,"package_name":"sphinx-sitemap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326811,"package_name":"sphinxext-opengraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326812,"package_name":"sphinx-inline-tabs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6854326813,"package_name":"sphinxcontrib-gtagjs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/artifact_redirect.yml","sha":null,"kind":"manifest","created_at":"2023-09-26T07:14:29.035Z","updated_at":"2023-09-26T07:14:29.035Z","repository_link":"https://github.com/pyOpenSci/python-package-guide/blob/main/.github/workflows/artifact_redirect.yml","dependencies":[{"id":13945358214,"package_name":"larsoner/circleci-artifacts-redirector-action","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-26T07:14:29.059Z","updated_at":"2023-09-26T07:14:29.059Z","repository_link":"https://github.com/pyOpenSci/python-package-guide/blob/main/pyproject.toml","dependencies":[]}],"score":7.942362237674335,"created_at":"2025-09-04T15:51:07.620Z","updated_at":"2025-10-07T08:14:21.000Z","avatar_url":"https://github.com/pyOpenSci.png","language":"Python","category":null,"sub_category":null,"monthly_downloads":0,"funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["closember","geoscience","prediction","autopep8","codeformatter","formatter","gofmt","pre-commit-hook","yapf","gtk"],"project_url":"https://science.ecosyste.ms/api/v1/projects/34246","html_url":"https://science.ecosyste.ms/projects/34246"}