تكرار السؤال: …
الإجابة المختصرة
هو الملف القياسي لوصف نظام البناء [build-system] وبيانات المشروع [project] (الاسم والإصدار والاعتماديات وإصدار Python المطلوب)، وإعدادات الأدوات تحت [tool.*].
الشرح
حل pyproject.toml محل setup.py و setup.cfg في المشاريع الحديثة، ويسمح لأدوات بناء مختلفة (hatchling و setuptools و flit و uv_build) بالعمل بنفس الطريقة. وضع الاعتماديات الأساسية في dependencies والاختيارية في optional-dependencies، وإعدادات أدوات مثل pytest و ruff و mypy في نفس الملف يقلل الملفات المتفرقة. لا تضع فيه أي أسرار أو إعدادات تشغيل خاصة بالبيئة.
مثال بالكود
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "billing-service"
version = "1.4.0"
requires-python = ">=3.12"
dependencies = ["httpx>=0.27", "pydantic>=2.7"]
[project.optional-dependencies]
dev = ["pytest", "ruff", "mypy"]
[tool.ruff]
line-length = 100أخطاء شائعة
- تكرار الاعتماديات بين requirements.txt و pyproject.toml فتتباعد مع الوقت.
- تثبيت إصدارات دقيقة (==) في مكتبة منشورة مما يسبب تعارضات لدى مستخدميها.