{"id":34036047,"url":"https://github.com/huidbk/py-tools","last_synced_at":"2026-04-06T07:03:00.063Z","repository":{"id":159311211,"uuid":"628985484","full_name":"HuiDBK/py-tools","owner":"HuiDBK","description":"打造 Python 开发常用的工具，让Coding变得更简单","archived":false,"fork":false,"pushed_at":"2026-04-02T15:46:33.000Z","size":503,"stargazers_count":85,"open_issues_count":1,"forks_count":18,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-03T03:51:32.297Z","etag":null,"topics":["python","tools"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HuiDBK.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2023-04-17T11:43:42.000Z","updated_at":"2026-04-02T15:46:38.000Z","dependencies_parsed_at":"2024-07-23T14:59:47.838Z","dependency_job_id":null,"html_url":"https://github.com/HuiDBK/py-tools","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/HuiDBK/py-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuiDBK%2Fpy-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuiDBK%2Fpy-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuiDBK%2Fpy-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuiDBK%2Fpy-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HuiDBK","download_url":"https://codeload.github.com/HuiDBK/py-tools/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuiDBK%2Fpy-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31463016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"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"}},"keywords":["python","tools"],"created_at":"2025-12-13T20:09:14.927Z","updated_at":"2026-04-06T07:03:00.058Z","avatar_url":"https://github.com/HuiDBK.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Py-Tools\n\nPy-Tools 是一个面向 Python 开发者的实用工具集和可复用组件库，重点解决项目初始化和日常开发里高频、重复、容易写散的基础问题。\n\n适合需要统一配置、日志、HTTP 调用和数据库 CRUD 基础封装的 Python 项目。\n\n设计细节可参考掘金专栏：https://juejin.cn/column/7131286129713610766\n\n## 安装\n\n- Python 版本：`\u003e= 3.9`\n- 发布包名：`huidevkit`\n- 历史版本记录：https://pypi.org/project/huidevkit/#history\n\n\u003e 从 `0.6.0` 开始，包名由 `hui-tools` 调整为 `huidevkit`。历史包名仍可安装，但不再推荐继续使用。\n\n默认安装：\n\n```bash\npip install huidevkit\n```\n\n按需安装：\n\n```bash\npip install huidevkit[db-orm, db-redis, excel-tools]\n```\n\n全部能力：\n\n```bash\npip install huidevkit[all]\n```\n\n## 主要能力\n\n- `py_tools.logging`：基于 `loguru` 的日志初始化与默认配置\n- `py_tools.utils.ConfigUtil`：统一读取环境变量、`.env`、YAML 和 Settings\n- `py_tools.connections.http`：同步 / 异步 HTTP 客户端、上传文件、流式读取\n- `py_tools.connections.db.mysql`：基于 SQLAlchemy 的数据库管理与常见 CRUD 封装\n- `py_tools.utils.AsyncUtil`：同步异步互转、后台任务执行\n- `py_tools.utils`：时间、文件、JWT、编码、序列化、树结构等通用工具\n\n顶层 `py_tools` 包默认不聚合所有子模块，请从对应子模块导入。\n\n## 常用示例\n\nREADME 只保留最常用、最能体现封装价值的示例。\n\n### 1. 快速初始化项目日志\n\n```python\nfrom py_tools.constants import BASE_DIR\nfrom py_tools.logging import logger, setup_logging\n\n\nsetup_logging(log_dir=BASE_DIR / \"logs\")\nlogger.info(\"service started\")\nlogger.error(\"something happened\")\n```\n\n对应示例：[demo/logging/logging_demo.py](demo/logging/logging_demo.py)\n\n### 2. 统一读取配置\n\n```python\nfrom pydantic_settings import SettingsConfigDict\n\nfrom py_tools.utils import BaseConfigSettings, ConfigUtil\n\n\nclass AppSettings(BaseConfigSettings):\n    app_name: str = \"py-tools-demo\"\n    app_port: int = 8000\n    debug: bool = False\n\n    model_config = SettingsConfigDict(env_prefix=\"\", env_file=\".env\", extra=\"ignore\")\n\n\nsettings = ConfigUtil.load_merged_settings(\n    AppSettings,\n    yaml_file=\"config.yaml\",\n    env_file=\".env\",\n    app_name=\"runtime-app\",\n)\nprint(settings.model_dump())\n```\n\n默认优先级：\n\n`显式传参(kwargs) \u003e 环境变量 \u003e .env \u003e yaml \u003e 默认值`\n\n对应示例：[demo/utils/config_util_demo.py](demo/utils/config_util_demo.py)\n\n### 3. HTTP 客户端\n\n```python\nimport asyncio\n\nfrom py_tools.connections.http import AsyncHttpClient\n\n\nasync def main():\n    url = \"https://juejin.cn/\"\n\n    resp = await AsyncHttpClient().get(url).execute()\n    text_data = await AsyncHttpClient().get(url, params={\"test\": \"hui\"}).text()\n    json_data = await AsyncHttpClient().post(url, data={\"test\": \"hui\"}).json()\n    byte_data = await AsyncHttpClient().get(url).bytes()\n\n    print(text_data)\n    print(resp.status)\n    print(json_data)\n    print(byte_data[:10])\n\n    async for chunk in AsyncHttpClient().get(url).stream(chunk_size=512):\n        print(chunk)\n        break\n\n\nasyncio.run(main())\n```\n\n对应示例：[demo/connections/http_client_demo.py](demo/connections/http_client_demo.py)\n\n上传文件：\n\n```python\nimport asyncio\n\nfrom py_tools.connections.http import AsyncHttpClient\n\n\nasync def main():\n    upload_file_ret = await AsyncHttpClient().upload_file(\n        \"https://httpbin.org/post\",\n        file=\"test.txt\",\n    ).json()\n    print(upload_file_ret)\n\n\nasyncio.run(main())\n```\n\n### 4. 数据库 CRUD 封装\n\n```python\nimport asyncio\n\nfrom sqlalchemy import String\nfrom sqlalchemy.orm import Mapped, mapped_column\n\nfrom py_tools.connections.db.mysql import BaseOrmTable, DBManager, SQLAlchemyManager\n\n\nclass UserFileTable(BaseOrmTable):\n    __tablename__ = \"user_file\"\n\n    filename: Mapped[str] = mapped_column(String(100), default=\"\")\n    oss_key: Mapped[str] = mapped_column(String(100), default=\"\")\n\n\nclass UserFileManager(DBManager):\n    orm_table = UserFileTable\n\n\ndb_client = SQLAlchemyManager(\n    host=\"127.0.0.1\",\n    port=3306,\n    user=\"root\",\n    password=\"123456\",\n    db_name=\"db_demo\",\n)\n\n\nasync def main():\n    db_client.init_mysql_engine()\n    DBManager.init_db_client(db_client)\n\n    file_id = await UserFileManager().add({\"filename\": \"demo.txt\", \"oss_key\": \"demo-key\"})\n    file_obj = await UserFileManager().query_by_id(file_id)\n    file_list = await UserFileManager().query_all(cols=[\"id\", \"filename\", \"oss_key\"])\n\n    await UserFileManager().update(\n        values={\"filename\": \"demo-updated.txt\"},\n        conds=[UserFileTable.id == file_id],\n    )\n    await UserFileManager().delete_by_id(file_id)\n\n    print(file_obj)\n    print(file_list)\n\n\nasyncio.run(main())\n```\n\n对应示例：\n\n- [demo/connections/sqlalchemy_demo/demo.py](demo/connections/sqlalchemy_demo/demo.py)\n- [demo/connections/sqlalchemy_demo/manager.py](demo/connections/sqlalchemy_demo/manager.py)\n- [demo/connections/sqlalchemy_demo/table.py](demo/connections/sqlalchemy_demo/table.py)\n\n## 更多示例\n\n示例统一放在 `demo/` 目录，避免文档示例与代码示例重复维护。\n\n- 示例索引：[demo/README.md](demo/README.md)\n- Async 工具：[demo/utils/async_util_demo.py](demo/utils/async_util_demo.py)\n- WebSocket：[demo/connections/websocket_demo.py](demo/connections/websocket_demo.py)\n- FastAPI WebSocket：[demo/connections/fastapi_websocket_demo.py](demo/connections/fastapi_websocket_demo.py)\n- 编码工具：[demo/utils/encode_util_demo.py](demo/utils/encode_util_demo.py)\n\n## 开发与验证\n\n```bash\npip install -e .[test]\npython -m pytest -q\nruff check .\n```\n\n## 贡献\n\n1. Fork 并克隆仓库\n2. 安装依赖\n3. 运行测试与静态检查\n4. 提交 Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuidbk%2Fpy-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuidbk%2Fpy-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuidbk%2Fpy-tools/lists"}