{"id":45161789,"url":"https://github.com/dksmiffs/import-ready","last_synced_at":"2026-02-20T06:03:16.351Z","repository":{"id":52702606,"uuid":"165778315","full_name":"dksmiffs/import-ready","owner":"dksmiffs","description":"Demonstrate publishing a basic importable Python package to TestPyPI and PyPI.","archived":false,"fork":false,"pushed_at":"2021-04-20T18:13:57.000Z","size":50,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-04-01T11:47:04.165Z","etag":null,"topics":["codacy","codecov","pip-tools","pypi","pytest","pytest-cov","python3","testpypi","travis-ci"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dksmiffs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-15T03:23:23.000Z","updated_at":"2019-07-17T00:46:54.000Z","dependencies_parsed_at":"2022-08-22T08:51:04.607Z","dependency_job_id":null,"html_url":"https://github.com/dksmiffs/import-ready","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/dksmiffs/import-ready","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dksmiffs%2Fimport-ready","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dksmiffs%2Fimport-ready/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dksmiffs%2Fimport-ready/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dksmiffs%2Fimport-ready/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dksmiffs","download_url":"https://codeload.github.com/dksmiffs/import-ready/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dksmiffs%2Fimport-ready/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29642907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T05:21:04.652Z","status":"ssl_error","status_checked_at":"2026-02-20T05:21:04.238Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"keywords":["codacy","codecov","pip-tools","pypi","pytest","pytest-cov","python3","testpypi","travis-ci"],"created_at":"2026-02-20T06:03:11.931Z","updated_at":"2026-02-20T06:03:16.342Z","avatar_url":"https://github.com/dksmiffs.png","language":"Python","readme":"# import-ready\n[![image](https://img.shields.io/github/license/dksmiffs/import-ready.svg)](https://github.com/dksmiffs/import-ready)\n[![image](https://img.shields.io/github/release/dksmiffs/import-ready.svg)](https://github.com/dksmiffs/import-ready/releases)\n[![image](https://img.shields.io/pypi/v/import-ready.svg)](https://pypi.org/project/import-ready/)\n[![image](https://img.shields.io/travis/dksmiffs/import-ready.svg)](https://travis-ci.org/dksmiffs/import-ready)\n[![image](https://img.shields.io/codecov/c/github/dksmiffs/import-ready.svg)](https://codecov.io/gh/dksmiffs/import-ready)\n[![image](https://img.shields.io/codacy/grade/d02f4f80df0445738821c692f4bbe16f.svg)](https://app.codacy.com/project/dksmiffs/import-ready/dashboard)\n\nThis repository demonstrates steps needed to publish an importable Python package first to [TestPyPI][1], and second to [PyPI][7].  If this demonstration deviates from best practice in any way, please submit an [issue][8] on GitHub.\n\nInside _import-ready_ is a package called `huntsville_havoc` that divulges a couple of bona fide secrets that most diehard SPHL [Huntsville Havoc][6] fans don't know.\n\n## Prepare the Package\n1.  [Prepare your environment][2] before installing Python packages.\n2.  Update version in setup.py per [semantic versioning][3] guidance.\n\n## Test in Development Environment\nRun as follows from the top level directory in a clean venv with [pip-tools][12] installed:\n\u003cpre\u003epython -m piptools compile --upgrade --generate-hashes dev-requirements.in\npython -m piptools sync dev-requirements.txt\npython -m pytest -s tests\u003c/pre\u003e\n\n## Publish to TestPyPI\n1.  Git commit, tag, \u0026 push all desired edits for release.\n2.  Create a new release in GitHub to mirror your new version.\n3.  [Generate distribution archives][4] for your package.\n4.  [Upload your package][5] to TestPyPI.\n\n## Test the TestPyPI-Published Package\nRun as follows from the `tests` directory in another clean venv with [pip-tools][12] installed:\n\u003cpre\u003eTEST_PYPI_FLAG='--extra-index-url https://test.pypi.org/simple/'\npython -m piptools compile --upgrade --generate-hashes $TEST_PYPI_FLAG \\\n      --output-file testpypi-requirements.txt pub-requirements.in\npython -m piptools sync $TEST_PYPI_FLAG testpypi-requirements.txt\npython -m pytest -s\u003c/pre\u003e\n\n## Publish to PyPI\nAfter passing the above tests, [upload your package][9] to PyPI.\n\n## Test the PyPI-Published Package\nRun as follows from the `tests` directory in _yet another_ clean venv with [pip-tools][12] installed:\n\u003cpre\u003epython -m piptools compile --upgrade --generate-hashes \\\n      --output-file pypi-requirements.txt pub-requirements.in\npython -m piptools sync pypi-requirements.txt\npython -m pytest -s\u003c/pre\u003e\n\n## [Thanks][11]\n\n## License\n[MIT][10]\n\n[1]: https://test.pypi.org/\n[2]: https://packaging.python.org/tutorials/installing-packages/#requirements-for-installing-packages\n[3]: https://semver.org/\n[4]: https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives\n[5]: https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives\n[6]: http://huntsvillehavoc.com/view/huntsvillehavoc\n[7]: https://pypi.org/\n[8]: https://github.com/dksmiffs/import-ready/issues\n[9]: https://packaging.python.org/tutorials/packaging-projects/#next-steps\n[10]: https://gitlab.com/dave.k.smith/import-ready/raw/master/LICENSE\n[11]: https://github.com/dksmiffs/import-ready/blob/master/THANKS.md\n[12]: https://github.com/jazzband/pip-tools\n[13]: https://github.com/jazzband/pip-tools/issues/638\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdksmiffs%2Fimport-ready","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdksmiffs%2Fimport-ready","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdksmiffs%2Fimport-ready/lists"}