Python 现代开发学习笔记

(二)项目目录与第一条运行命令

两个项目都位于 综合项目与交付。它们有各自的 .venv 和锁定文件。先进入 catalog_project,后面的书目命令都在这个目录运行。

综合项目与交付/
├── catalog_project/
│   ├── pyproject.toml、uv.lock、pip-requirements.txt
│   ├── src/cataloghub/
│   │   ├── cleaning.py、collecting.py、pipeline.py
│   │   ├── storage.py、backup.py、config.py、telemetry.py
│   │   ├── web.py、source.py、cli.py、__main__.py
│   │   └── fixtures/、templates/、static/
│   ├── tests/、tools/
│   ├── Dockerfile、compose.yaml、.env.example
│   └── instance/                 运行后生成数据库与原始快照
├── model_project/
│   ├── src/modeldelivery/、data/、tests/、tools/
│   ├── pyproject.toml、uv.lock、pip-requirements.txt
│   ├── Dockerfile、compose.yaml、.env.example
│   └── models/                   运行后生成完整模型版本
└── .github/workflows/check.yml

先同步环境,启动本地来源。另开终端后执行采集和查询;最后打开 http://127.0.0.1:8781。

# 终端一:在 catalog_project 中安装锁定依赖,提供三页练习目录。
uv sync --locked
uv run catalog source
# 终端二:仍在 catalog_project 中,先完成采集,再启动查询页面。
uv run catalog collect
uv run catalog serve

这一轮已经经过了 HTTP、清洗、事务和页面。下面拆开每一步,弄清它们分别读写哪些状态。完整命令入口见 cli.py,它使用第三章的 argparse 将命令交给对应函数。

# 项目文件:catalog_project/pyproject.toml
# 采集、HTML 清洗、查询页面和命令行在同一独立项目中组合。
[build-system]
requires = ["setuptools>=80,<83"]
build-backend = "setuptools.build_meta"

[project]
name = "reading-catalog-delivery"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = ["httpx>=0.28,<1", "beautifulsoup4>=4.13,<5", "fastapi>=0.115,<1", "uvicorn>=0.34,<1", "jinja2>=3.1,<4"]

[project.scripts]
catalog = "cataloghub.cli:main"

[dependency-groups]
dev = ["pytest>=9.1,<10"]

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.package-data]
cataloghub = ["templates/*.html", "static/*.css", "fixtures/*.html"]

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --import-mode=importlib"

[project.scripts] 把 catalog 接到 main();package-data 列出随包安装的模板、样式和练习网页。否则从源码运行时能找到的文件,打成安装包后可能就找不到了。pip-requirements.txt 从随附锁定文件导出,后面会实际重建另一套环境。

笔记正文与全部题解 · Ctrl / ⌘ K