FlyPython maintains bilingual Python engineering guides, task playbooks, runnable examples, templates, and a reviewed source catalog used by flypython.com. Contributions should help a visitor complete a real Python task or improve factual accuracy and maintainability. General Python questions belong in GitHub Discussions.
Read the curation policy before contributing.
This repository currently does not grant a general license to reuse its content or code. Public visibility is not permission to copy, redistribute, or relicense repository material. Contributors must submit only material they have the right to submit and retain required third-party notices.
Use the matching issue form before a larger change:
- Resource proposal for a new official source.
- Project proposal for a current Python project that should receive human review for Project Radar.
- Broken link for an unreachable or replaced resource.
- Security report for a vulnerability; follow SECURITY.md instead of opening a public issue.
Small typo, metadata, or tooling fixes may go directly to a focused pull request.
First-party guides and playbooks must remain practical, testable, and aligned
in English and Chinese. A content change must update both language files with
the same content version and review date, then regenerate
content-manifest.json. Do not present generated code, a passing test, or a
deployment command as proof of user value or production readiness.
The canonical source is the catalog/ directory:
catalog/catalog.ymlcontains catalog-level review state.catalog/paths.ymldefines the four bilingual learning paths.catalog/resources/<id>.ymlcontains one reviewed resource.catalog.jsonis generated output and must not be edited by hand.
Every resource file must include:
id,path,order,title, andurlsource_type,level, andlanguagewhy_enandwhy_zhreviewed_onandstatusrequires_key,risk, andfeatured
The filename must match the stable resource ID. Resource order values must be
unique and consecutive within each path.
Descriptions and classifications require human review. Do not use an LLM or a web-search API to generate them. Prefer official documentation, official standards, and official project pages.
A 403, 429, timeout, or transient 5xx response is not enough to delete a resource. Mark it for human review and provide repeatable evidence.
Install the exact Python version from .python-version and the locked
development dependencies:
python -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-dev.lock.txtAfter changing catalog sources, regenerate the public export:
python tools/export_catalog.py
python tools/render_readmes.py
python tools/build_content_manifest.pyRun the same deterministic checks as CI:
python -m pytest
python tools/validate_catalog.py
python tools/export_catalog.py --check
python tools/render_readmes.py --check
python tools/build_content_manifest.py --check
python tools/verify_examples.pyMaintainers can run the networked link audit through GitHub Actions. For a deliberate local audit of every catalog entry:
python tools/check_links.py --mode all --output reports/link-check.jsonNetwork fetching is excluded from pull-request CI. Any review-needed result fails the scheduled audit for maintainer inspection, but does not by itself justify removing a resource.
- Keep source content and generated JSON exports consistent.
- Preserve English and Chinese meaning.
- Include evidence for maintenance, ownership, access, and safety claims.
- Do not call a project production-ready without current evidence.
- Do not commit secrets, generated reports, caches, or local environments.
- Explain consumer-visible changes and list the validation results.
Passing automation does not replace editorial review. After merge, a website consumer must deliberately update its pinned catalog commit before the new data appears on flypython.com.