diff --git a/README.md b/README.md index 05f2d0c4..80951eeb 100644 --- a/README.md +++ b/README.md @@ -136,10 +136,10 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - Agent Skills - [django-ai-plugins](https://github.com/vintasoftware/django-ai-plugins) - Django backend agent skills for Django, DRF, Celery, and Django-specific code review. - - [sentry-skills](https://github.com/getsentry/skills) - Python-focused engineering skills for code review, debugging, and backend workflows. - - [trailofbits-skills](https://github.com/trailofbits/skills) - Python-friendly security skills for auditing, testing, and safer backend development. + - [sentry-skills](https://github.com/getsentry/skills) - Agent skills the Sentry team uses for code review, pull requests, and Django reviews. + - [trailofbits-skills](https://github.com/trailofbits/skills) - Security skills for vulnerability detection, auditing, and testing. - Orchestration - - [langchain](https://github.com/langchain-ai/langchain) - Building applications with LLMs through composability. + - [langchain](https://github.com/langchain-ai/langchain) - A framework for building agents and LLM-powered applications. - [langgraph](https://github.com/langchain-ai/langgraph) - Low-level orchestration framework for building stateful, long-running LLM agents. - [crewai](https://github.com/crewAIInc/crewAI) - A framework for orchestrating role-playing autonomous AI agents for collaborative task solving. - [pydantic-ai](https://github.com/pydantic/pydantic-ai) - A Python agent framework for building generative AI applications with structured schemas. @@ -158,7 +158,7 @@ _Libraries for building AI applications, LLM integrations, and autonomous agents - [openviking](https://github.com/volcengine/OpenViking) - A context database for AI agents that unifies memory, resources, and skills. - [semantica](https://github.com/semantica-agi/semantica) - A graph-native context and knowledge layer for AI agents with reasoning, provenance, and governance. - Pre-trained Models - - [transformers](https://github.com/huggingface/transformers) - A framework that lets you easily use pre-trained transformer models for NLP, vision, and audio tasks. + - [transformers](https://github.com/huggingface/transformers) - The model-definition framework for pretrained models in text, computer vision, audio, video, and multimodal tasks, for inference and training. - LLM Inference and Serving - [sglang](https://github.com/sgl-project/sglang) - A high-performance serving framework for large language models and multimodal models. - [vllm](https://github.com/vllm-project/vllm) - A high-throughput and memory-efficient inference and serving engine for LLMs. @@ -198,14 +198,14 @@ _Libraries for Machine Learning. Also see [awesome-machine-learning](https://git - General - [scikit-learn](https://github.com/scikit-learn/scikit-learn) - The most popular Python library for Machine Learning with extensive documentation and community support. - - [pgmpy](https://github.com/pgmpy/pgmpy) - A Python library for probabilistic graphical models and Bayesian networks. + - [pgmpy](https://github.com/pgmpy/pgmpy) - A Python library for causal and probabilistic reasoning with graphical models. - [feature-engine](https://github.com/feature-engine/feature_engine) - sklearn compatible API with the widest toolset for feature engineering and selection. - Gradient Boosting - [xgboost](https://github.com/dmlc/xgboost) - A scalable, portable, and distributed gradient boosting library. - [lightgbm](https://github.com/lightgbm-org/LightGBM) - A fast, distributed, high performance gradient boosting framework. - [catboost](https://github.com/catboost/catboost) - A fast, scalable, high performance gradient boosting on decision trees library. - Time Series Forecasting - - [timesfm](https://github.com/google-research/timesfm) - A pretrained foundation model from Google Research for time-series forecasting. + - [timesfm](https://github.com/google-research/timesfm) - A pretrained foundation model from Google Research for time-series forecasting, with non-commercial default weights. ### Natural Language Processing @@ -223,15 +223,15 @@ _Libraries for working with human languages._ ### Computer Vision -_Libraries for Computer Vision._ +_Libraries for image and video analysis, object detection, and OCR._ - General - [opencv-python](https://github.com/opencv/opencv-python) - Open Source Computer Vision Library. - - [ultralytics](https://github.com/ultralytics/ultralytics) - Ultralytics YOLO for object detection, segmentation, pose estimation, and classification with state-of-the-art accuracy and speed. + - [ultralytics](https://github.com/ultralytics/ultralytics) - Ultralytics YOLO for object detection, segmentation, pose estimation, classification, and tracking. - [kornia](https://github.com/kornia/kornia/) - Open Source Differentiable Computer Vision Library for PyTorch. - [fiftyone](https://github.com/voxel51/fiftyone) - The open-source tool for building high-quality datasets and computer vision models. - OCR - - [pytesseract](https://github.com/madmaze/pytesseract) - A wrapper for [Google Tesseract OCR](https://github.com/tesseract-ocr). + - [pytesseract](https://github.com/madmaze/pytesseract) - A wrapper for the [Tesseract OCR](https://github.com/tesseract-ocr) engine. - [easyocr](https://github.com/JaidedAI/EasyOCR) - Ready-to-use OCR with 80+ languages supported. ### Recommender Systems @@ -251,13 +251,11 @@ _Traditional full stack web frameworks. Also see [Web APIs](#web-apis)._ - Synchronous - [flask](https://github.com/pallets/flask) - A microframework for Python. - [awesome-flask](https://github.com/humiaozuzu/awesome-flask) - - [django](https://github.com/django/django) - The most popular web framework in Python. + - [django](https://github.com/django/django) - A high-level web framework that encourages rapid development and clean, pragmatic design. - [awesome-django](https://github.com/wsvincent/awesome-django) - [bottle](https://github.com/bottlepy/bottle) - A fast and simple micro-framework distributed as a single file with no dependencies. - [pyramid](https://github.com/Pylons/pyramid) - A small, fast, down-to-earth, open source Python web framework. - - [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) - [fasthtml](https://github.com/AnswerDotAI/fasthtml) - The fastest way to create an HTML app. - - [awesome-fasthtml](https://github.com/amosgyamfi/awesome-fasthtml) - Asynchronous - [starlette](https://github.com/Kludex/starlette) - A lightweight ASGI framework and toolkit for building high-performance async services. - [tornado](https://github.com/tornadoweb/tornado) - A web framework and asynchronous networking library. @@ -287,7 +285,7 @@ _Libraries for building RESTful, GraphQL, and RPC APIs._ _ASGI and WSGI compatible web servers._ - ASGI - - [uvicorn](https://github.com/Kludex/uvicorn) - A lightning-fast ASGI server implementation, using uvloop and httptools. + - [uvicorn](https://github.com/Kludex/uvicorn) - A lightning-fast ASGI server implementation. - [granian](https://github.com/emmett-framework/granian) - A Rust HTTP server for Python applications built on top of Hyper and Tokio, supporting WSGI/ASGI/RSGI. - [hypercorn](https://github.com/pgjones/hypercorn) - An ASGI and WSGI Server based on Hyper libraries and inspired by Gunicorn. - WSGI @@ -299,13 +297,13 @@ _ASGI and WSGI compatible web servers._ _Libraries for working with WebSocket._ - [websockets](https://github.com/python-websockets/websockets) - A library for building WebSocket servers and clients with a focus on correctness and simplicity. -- [channels](https://github.com/django/channels) - Developer-friendly asynchrony for Django. +- [channels](https://github.com/django/channels) - Brings WebSocket, long-poll HTTP, and other async support to Django. - [flask-socketio](https://github.com/miguelgrinberg/Flask-SocketIO) - Socket.IO integration for Flask applications. - [autobahn-python](https://github.com/crossbario/autobahn-python) - WebSocket & WAMP for Python on Twisted and [asyncio](https://docs.python.org/3/library/asyncio.html). ### Template Engines -_Libraries and tools for templating and lexing._ +_Libraries for rendering text and HTML from templates._ - [jinja](https://github.com/pallets/jinja) - A modern and designer friendly templating language. - [mako](https://github.com/sqlalchemy/mako) - Hyperfast and lightweight templating for the Python platform. @@ -325,7 +323,7 @@ _Libraries for implementing authentication schemes._ - [oauthlib](https://github.com/oauthlib/oauthlib) - A generic and thorough implementation of the OAuth request-signing logic. - [authlib](https://github.com/authlib/authlib) - A comprehensive library for building OAuth, OpenID Connect, and JWT/JWS/JWE/JWK/JWA. - [django-allauth](https://github.com/pennersr/django-allauth) - Authentication app for Django that "just works." - - [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) - OAuth 2 goodies for Django. + - [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) - An OAuth 2.0 authorization server for Django. - JWT - [pyjwt](https://github.com/jpadilla/pyjwt) - JSON Web Token implementation in Python. - Permissions @@ -337,7 +335,7 @@ _Libraries for implementing authentication schemes._ _Libraries for administrative interfaces._ - [flask-admin](https://github.com/pallets-eco/flask-admin) - Simple and extensible administrative interface framework for Flask. -- [django-unfold](https://github.com/unfoldadmin/django-unfold) - Elevate your Django admin with a stunning modern interface, powerful features, and seamless user experience. +- [django-unfold](https://github.com/unfoldadmin/django-unfold) - A modern Django admin theme for building dashboards, internal tools, and business applications. - [django-grappelli](https://github.com/sehmaschine/django-grappelli) - A jazzy skin for the Django Admin-Interface. ### CMS @@ -392,7 +390,7 @@ _Libraries to automate web scraping and extract web content._ ### Email -_Libraries for sending and parsing email, and mail server management._ +_Libraries for sending email._ - [yagmail](https://github.com/kootenpv/yagmail) - Yet another Gmail/SMTP client. @@ -419,7 +417,7 @@ _Libraries for connecting and operating databases._ - MySQL - [awesome-mysql](https://github.com/shlomi-noach/awesome-mysql) - [pymysql](https://github.com/PyMySQL/PyMySQL) - A pure-Python MySQL and MariaDB client library, based on PEP 249. - - [mysqlclient](https://github.com/PyMySQL/mysqlclient) - MySQL connector with Python 3 support ([mysql-python](https://sourceforge.net/projects/mysql-python/) fork). + - [mysqlclient](https://github.com/PyMySQL/mysqlclient) - MySQL and MariaDB connector ([MySQLdb1](https://github.com/farcepest/MySQLdb1) fork). - PostgreSQL - [awesome-postgres](https://github.com/dhamaniasad/awesome-postgres) - [psycopg](https://github.com/psycopg/psycopg) - The most popular PostgreSQL adapter for Python. - [asyncpg](https://github.com/MagicStack/asyncpg) - A fast PostgreSQL Database Client Library for Python/asyncio. @@ -432,7 +430,7 @@ _Libraries for connecting and operating databases._ - Other Relational Databases - [pyodbc](https://github.com/mkleehammer/pyodbc) - An ODBC bridge for connecting to SQL Server and any other ODBC-accessible database. - [oracledb](https://github.com/oracle/python-oracledb) - The official Python driver for Oracle Database, successor to cx_Oracle. - - [mssql-python](https://github.com/microsoft/mssql-python) - Official Microsoft driver for SQL Server and Azure SQL, built on ODBC for high performance and low memory usage. + - [mssql-python](https://github.com/microsoft/mssql-python) - Official Microsoft driver for SQL Server and Azure SQL, built on ODBC for high performance. - NoSQL Databases - [redis](https://github.com/redis/redis-py) - The Python client for Redis. - [pymongo](https://github.com/mongodb/mongo-python-driver) - The official Python client for MongoDB. @@ -459,8 +457,8 @@ _In-process databases usable directly from Python._ _Libraries for caching data._ - [cachetools](https://github.com/tkem/cachetools) - Extensible memoizing collections and decorators. -- [diskcache](https://github.com/grantjenks/python-diskcache) - SQLite and file backed cache backend with faster lookups than memcached and redis. -- [hishel](https://github.com/karpetrosyan/hishel) - RFC 9111 compliant HTTP caching for httpx and requests, with sync and async support. +- [diskcache](https://github.com/grantjenks/python-diskcache) - SQLite and file backed cache backend, compatible with Django. +- [hishel](https://github.com/karpetrosyan/hishel) - RFC 9111 compliant HTTP caching for clients like httpx and requests and servers like FastAPI, with sync and async support. - [dogpile.cache](https://github.com/sqlalchemy/dogpile.cache) - dogpile.cache is a next generation replacement for Beaker made by the same authors. - [django-cacheops](https://github.com/Suor/django-cacheops) - A slick ORM cache with automatic granular event-driven invalidation. @@ -502,7 +500,7 @@ _Libraries for data extraction, transformation, and loading pipelines across mul - [pathway](https://github.com/pathwaycom/pathway) - Python ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG. - Financial Data - [yfinance](https://github.com/ranaroussi/yfinance) - Easy Pythonic way to download market and financial data from Yahoo Finance. - - [akshare](https://github.com/akfamily/akshare) - A financial data interface library, built for human beings! + - [akshare](https://github.com/akfamily/akshare) - A financial data interface library, with data provided for academic research only. - [edgartools](https://github.com/dgunning/edgartools) - Library for downloading structured data from SEC EDGAR filings and XBRL financial statements. - [openbb](https://github.com/OpenBB-finance/OpenBB) - A financial data platform for analysts, quants and AI agents. @@ -512,7 +510,7 @@ _Libraries for validating data. Used for forms in many cases._ - [pydantic](https://github.com/pydantic/pydantic) - Data validation using Python type hints. - [jsonschema](https://github.com/python-jsonschema/jsonschema) - An implementation of [JSON Schema](https://json-schema.org/) for Python. -- [pandera](https://github.com/unionai-oss/pandera) - A data validation library for dataframes, with support for pandas, polars, and Spark. +- [pandera](https://github.com/unionai-oss/pandera) - A data validation library for dataframes, with support for pandas, polars, PySpark, and more. ### Data Visualization @@ -548,7 +546,7 @@ _Libraries for scientific computing. Also see [Python-for-Scientists](https://gi - Core - [numpy](https://github.com/numpy/numpy) - A fundamental package for scientific computing with Python. - [scipy](https://github.com/scipy/scipy) - Fundamental algorithms for scientific computing in Python. - - [numba](https://github.com/numba/numba) - Python JIT compiler to LLVM aimed at scientific Python. + - [numba](https://github.com/numba/numba) - A NumPy-aware JIT compiler for Python, using LLVM. - Symbolic Mathematics - [sympy](https://github.com/sympy/sympy) - A Python library for symbolic mathematics. - Statistics @@ -578,7 +576,7 @@ _Libraries for quantum computing._ - [qiskit](https://github.com/Qiskit/qiskit) - An IBM-backed quantum SDK for building, simulating, and running circuits on real quantum hardware. - [qutip](https://github.com/qutip/qutip) - Quantum Toolbox in Python. -- [pennylane](https://github.com/PennyLaneAI/pennylane) - A hybrid quantum-classical machine learning library with automatic differentiation support. +- [pennylane](https://github.com/PennyLaneAI/pennylane) - A cross-platform library for quantum computing, quantum machine learning, and quantum chemistry. - [cirq](https://github.com/quantumlib/Cirq) - A Google-developed framework focused on hardware-aware quantum circuit design for NISQ devices. **Developer Tools** @@ -601,7 +599,7 @@ _Python implementation of data structures, algorithms and design patterns. Also _Interactive Python interpreters (REPL)._ - [ipython](https://github.com/ipython/ipython) - A powerful interactive Python shell, and the kernel behind Jupyter notebooks. -- [jupyter](https://github.com/jupyter/notebook) - A rich toolkit to help you make the most out of using Python interactively. +- [jupyter](https://github.com/jupyter/notebook) - A web-based notebook environment for interactive computing. - [awesome-jupyter](https://github.com/markusschanta/awesome-jupyter) - [marimo](https://github.com/marimo-team/marimo) - Transform data and train models, feels like a next-gen notebook, stored as Git-friendly Python. - [ptpython](https://github.com/prompt-toolkit/ptpython) - Advanced Python REPL built on top of the [python-prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit). @@ -692,7 +690,7 @@ _Libraries for debugging code._ ### Build Tools -_Compile software from source code. If you're looking for Python packaging/build tools, see [Package Management](#package-management)._ +_Task runners and software build tools. If you're looking for Python packaging/build tools, see [Package Management](#package-management)._ - [invoke](https://github.com/pyinvoke/invoke) - A tool for managing shell-oriented subprocesses and organizing executable Python code into CLI-invokable tasks. - [scons](https://github.com/SCons/scons) - A software construction tool. @@ -742,10 +740,10 @@ _Software and libraries for DevOps._ _Frameworks and libraries for Distributed Computing._ -- [ray](https://github.com/ray-project/ray/) - A system for parallel and distributed Python that unifies the machine learning ecosystem. +- [ray](https://github.com/ray-project/ray/) - A unified framework for scaling AI and Python applications. - [pyspark](https://github.com/apache/spark) - [Apache Spark](https://spark.apache.org/) Python API. - [dask](https://github.com/dask/dask) - A flexible parallel computing library for analytic computing. -- [joblib](https://github.com/joblib/joblib) - A set of tools to provide lightweight pipelining in Python. +- [joblib](https://github.com/joblib/joblib) - Parallel computing and disk-based caching for Python functions. - [mpi4py](https://github.com/mpi4py/mpi4py) - Python bindings for MPI. ### Task Queues @@ -755,7 +753,7 @@ _Libraries for working with task queues._ - [celery](https://github.com/celery/celery) - An asynchronous task queue/job queue based on distributed message passing. - [rq](https://github.com/rq/rq) - Simple job queues for Python. - [dramatiq](https://github.com/Bogdanp/dramatiq) - A fast and reliable background task processing library for Python 3. -- [huey](https://github.com/coleifer/huey) - Little multi-threaded task queue. +- [huey](https://github.com/coleifer/huey) - A little task queue with multi-process, multi-thread, or greenlet workers. - [taskiq](https://github.com/taskiq-python/taskiq) - Distributed task queue with native asyncio support and pluggable brokers. ### Messaging @@ -843,8 +841,8 @@ _Libraries for working with graphical user interface applications._ - Desktop - [pygobject](https://github.com/GNOME/pygobject) - Python Bindings for GLib/GObject/GIO/GTK. - - [wxPython](https://github.com/wxWidgets/Phoenix) - A blending of the wxWidgets C++ class library with the Python. - - [kivy](https://github.com/kivy/kivy) - A library for creating NUI applications, running on Windows, Linux, Mac OS X, Android and iOS. + - [wxPython](https://github.com/wxWidgets/Phoenix) - A cross-platform GUI toolkit that wraps the wxWidgets C++ library. + - [kivy](https://github.com/kivy/kivy) - An open-source framework for cross-platform GUI apps on desktop, mobile, and embedded platforms. - [dearpygui](https://github.com/hoffstadt/DearPyGui) - A simple GPU-accelerated Python GUI framework. - [toga](https://github.com/beeware/toga) - A Python native, OS native GUI toolkit. - Qt @@ -868,7 +866,7 @@ _Libraries for working with graphical user interface applications._ _Libraries for parsing and manipulating plain texts._ - Encoding and Unicode - - [charset-normalizer](https://github.com/jawah/charset_normalizer) - Universal character encoding detector, the default of the requests ecosystem. + - [charset-normalizer](https://github.com/jawah/charset_normalizer) - Universal character encoding detector, and a dependency of requests. - [chardet](https://github.com/chardet/chardet) - Python character encoding detector. - [ftfy](https://github.com/rspeer/python-ftfy) - Makes Unicode text less broken and more consistent automagically. - Fuzzy Matching @@ -880,7 +878,7 @@ _Libraries for parsing and manipulating plain texts._ - [babel](https://github.com/python-babel/babel) - An internationalization library for Python. - Parser - [pygments](https://github.com/pygments/pygments) - A generic syntax highlighter. - - [pyparsing](https://github.com/pyparsing/pyparsing) - A general purpose framework for generating parsers. + - [pyparsing](https://github.com/pyparsing/pyparsing) - A Python library for creating PEG parsers. - [sqlparse](https://github.com/andialbrecht/sqlparse) - A non-validating SQL parser. - [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers) - Parsing, formatting, storing and validating international phone numbers. - [parsy](https://github.com/python-parsy/parsy) - Easy, generic parser combinator library for creating parsers. @@ -899,11 +897,11 @@ _Libraries for working with HTML and XML._ - [lxml](https://github.com/lxml/lxml) - A very fast, easy-to-use and versatile library for handling HTML and XML. - [xmltodict](https://github.com/martinblech/xmltodict) - Working with XML feel like you are working with JSON. - [markupsafe](https://github.com/pallets/markupsafe) - Safely adds untrusted strings to HTML/XML markup. -- [justhtml](https://github.com/EmilStenstrom/justhtml/) - A pure Python HTML5 parser that just works. +- [justhtml](https://github.com/EmilStenstrom/justhtml/) - A pure Python HTML5 parser that sanitizes untrusted HTML by default. ### File Format Processing -_Libraries for parsing and manipulating specific text formats._ +_Libraries for parsing and manipulating specific file formats._ - General - [pyelftools](https://github.com/eliben/pyelftools) - Parsing and analyzing ELF files and DWARF debugging information. @@ -921,7 +919,7 @@ _Libraries for parsing and manipulating specific text formats._ - PDF - [pypdf](https://github.com/py-pdf/pypdf) - A library capable of splitting, merging, cropping, and transforming PDF pages. - [reportlab](https://www.reportlab.com/opensource/) - Allowing Rapid creation of rich PDF documents. - - [pdfminer.six](https://github.com/pdfminer/pdfminer.six) - Pdfminer.six is a community maintained fork of the original PDFMiner. + - [pdfminer.six](https://github.com/pdfminer/pdfminer.six) - A community-maintained fork of PDFMiner for extracting information from PDF documents. - HTML-to-PDF - [weasyprint](https://github.com/Kozea/WeasyPrint) - A visual rendering engine for HTML and CSS that can export to PDF. - Markdown @@ -930,7 +928,7 @@ _Libraries for parsing and manipulating specific text formats._ - [mistune](https://github.com/lepture/mistune) - A fast yet powerful Python Markdown parser with renderers and plugins. - Data Formats - [tomllib](https://docs.python.org/3/library/tomllib.html) - (Python standard library) Parse TOML files. - - [pyyaml](https://github.com/yaml/pyyaml) - YAML implementations for Python. + - [pyyaml](https://github.com/yaml/pyyaml) - A full-featured YAML framework for Python. ### File Manipulation @@ -956,7 +954,7 @@ _Libraries for manipulating images._ - [scikit-image](https://github.com/scikit-image/scikit-image) - A Python library for (scientific) image processing. - [rembg](https://github.com/danielgatis/rembg) - A tool to remove image backgrounds. - [wand](https://github.com/emcconville/wand) - Python bindings for [MagickWand](https://imagemagick.org/magick-wand/), C API for ImageMagick. - - [pyvips](https://github.com/libvips/pyvips) - A fast image processing library with low memory needs. + - [pyvips](https://github.com/libvips/pyvips) - A binding for libvips, a fast image processing library with low memory needs. - Image Serving - [thumbor](https://github.com/thumbor/thumbor) - A smart imaging service. It enables on-demand crop, re-sizing and flipping of images. @@ -1044,7 +1042,7 @@ _Libraries for working with dates and times._ - [python-dateutil](https://github.com/dateutil/dateutil) - Extensions to the standard Python [datetime](https://docs.python.org/3/library/datetime.html) module. - [dateparser](https://github.com/scrapinghub/dateparser) - A Python parser for human-readable dates in over 200 language locales. - [pendulum](https://github.com/python-pendulum/pendulum) - Python datetimes made easy. -- [whenever](https://github.com/ariebovenberg/whenever) - A modern datetime library, type-safe and DST-safe, backed by Rust. +- [whenever](https://github.com/ariebovenberg/whenever) - A modern datetime library, type-safe and DST-safe, in Rust or pure Python. **Python Toolchain** @@ -1074,7 +1072,7 @@ _Libraries for package and dependency management._ ### Package Repositories -_Local PyPI repository server and proxies._ +_Local PyPI repository servers, proxies, and mirrors._ - [bandersnatch](https://github.com/pypa/bandersnatch/) - PyPI mirroring tool provided by Python Packaging Authority (PyPA). - [devpi](https://github.com/devpi/devpi) - PyPI server and packaging/testing/release tool. @@ -1109,9 +1107,9 @@ _Libraries for storing and parsing configuration options._ _Libraries for cryptographic primitives and secure protocols._ - [cryptography](https://github.com/pyca/cryptography) - A package designed to expose cryptographic primitives and recipes to Python developers. -- [pynacl](https://github.com/pyca/pynacl) - Python binding to the Networking and Cryptography (NaCl) library. +- [pynacl](https://github.com/pyca/pynacl) - Python binding to libsodium, a fork of the Networking and Cryptography (NaCl) library. - [paramiko](https://github.com/paramiko/paramiko) - The leading native Python SSHv2 protocol library. -- [itsdangerous](https://github.com/pallets/itsdangerous) - Various helpers to pass trusted data to untrusted environments. +- [itsdangerous](https://github.com/pallets/itsdangerous) - Safely pass trusted data to untrusted environments and back. ### Penetration Testing @@ -1152,7 +1150,7 @@ _Python programming on Microsoft Windows._ - [pythonnet](https://github.com/pythonnet/pythonnet) - Python Integration with the .NET Common Language Runtime (CLR). - [pywin32](https://github.com/mhammond/pywin32) - Python Extensions for Windows. - [pyenv-win](https://github.com/pyenv-win/pyenv-win) - A Python version manager for Windows ([rbenv-win](https://github.com/nak1114/rbenv-win) fork). -- [winpython](https://github.com/winpython/winpython) - Portable development environment for Windows 10/11. +- [winpython](https://github.com/winpython/winpython) - Portable Python distribution for Windows. ### Miscellaneous diff --git a/website/build.py b/website/build.py index 27b9adc0..0f299340 100644 --- a/website/build.py +++ b/website/build.py @@ -755,8 +755,9 @@ def build(repo_root: Path) -> None: if parent_category: breadcrumbs.append((parent_category["name"], category_public_url(parent_category))) breadcrumbs.append((category["name"], category_url)) + page_entries = [entry for group in entry_groups for entry in group["entries"]] if entry_groups else entries category_json_ld = json.dumps( - build_category_json_ld(category_title.removesuffix(" - Awesome Python"), category_url, category_description, entries, breadcrumbs), + build_category_json_ld(category_title.removesuffix(" - Awesome Python"), category_url, category_description, page_entries, breadcrumbs), ensure_ascii=False, ).replace("", "<\\/") (page_dir / "index.html").write_text( diff --git a/website/data/category_intros/data-validation.md b/website/data/category_intros/data-validation.md index f5bd96ea..c2e7b863 100644 --- a/website/data/category_intros/data-validation.md +++ b/website/data/category_intros/data-validation.md @@ -1,4 +1,4 @@ -Validate API input and config with Pydantic, the Python data validation library built on type hints. Use Pandera for dataframes, jsonschema for JSON Schema. +Declare API input and config as type hints, and Pydantic validates them. Pandera brings Python data validation to dataframes, and jsonschema covers JSON Schema. How to choose: diff --git a/website/data/category_intros/date-and-time.md b/website/data/category_intros/date-and-time.md index eeda6507..fcaf5a8c 100644 --- a/website/data/category_intros/date-and-time.md +++ b/website/data/category_intros/date-and-time.md @@ -1,4 +1,4 @@ -Most code should handle time zones with zoneinfo and pick python-dateutil, the Python date library for parsing date strings and adding months. +Handle time zones with the built-in zoneinfo. Parsing date strings and adding months is where a Python date library earns its install: python-dateutil. How to choose: diff --git a/website/data/category_intros/file-format-processing.md b/website/data/category_intros/file-format-processing.md index 069f0bec..57e0328c 100644 --- a/website/data/category_intros/file-format-processing.md +++ b/website/data/category_intros/file-format-processing.md @@ -1,4 +1,4 @@ -PDF, Word, and Excel files open with pypdf, python-docx, and openpyxl, a Python file format library for each. MarkItDown turns all three into Markdown. +pypdf reads PDFs, python-docx Word files, and openpyxl Excel sheets: one Python file format library per format. MarkItDown turns any of them into Markdown. How to choose: diff --git a/website/data/category_intros/game-development.md b/website/data/category_intros/game-development.md index 60c4a8c2..275c4f9b 100644 --- a/website/data/category_intros/game-development.md +++ b/website/data/category_intros/game-development.md @@ -1,4 +1,4 @@ -A 2D game needs a loop: write your own with pygame-ce, the Python game development library, or let Arcade run it. Panda3D does 3D, and Ren'Py visual novels. +pygame-ce leaves the 2D game loop to you, while Arcade runs it for you. For 3D, Panda3D covers Python game development, and Ren'Py builds visual novels. How to choose: diff --git a/website/data/category_intros/template-engines.md b/website/data/category_intros/template-engines.md index b59f345d..c2d9eedc 100644 --- a/website/data/category_intros/template-engines.md +++ b/website/data/category_intros/template-engines.md @@ -1,4 +1,4 @@ -If your templates should hold no Python code, Jinja fits: a Python template engine whose sandbox also renders untrusted templates. Mako embeds plain Python. +Whether templates may hold Python code splits the Python template engines: Jinja keeps code out and sandboxes untrusted templates, Mako embeds plain Python. How to choose: diff --git a/website/data/category_intros/web-apis.md b/website/data/category_intros/web-apis.md index 87bc81c7..aee66d97 100644 --- a/website/data/category_intros/web-apis.md +++ b/website/data/category_intros/web-apis.md @@ -1,4 +1,4 @@ -For a Django project, pick Django REST framework or Django Ninja. Outside Django, build on FastAPI, a Python API framework based on type hints. +Outside Django, declare each FastAPI endpoint with type hints. Django projects add a Python API framework on top instead: Django REST framework or Django Ninja. How to choose: diff --git a/website/data/category_intros/web-frameworks.md b/website/data/category_intros/web-frameworks.md index 653d607d..395deeea 100644 --- a/website/data/category_intros/web-frameworks.md +++ b/website/data/category_intros/web-frameworks.md @@ -1,4 +1,4 @@ -When you want an ORM, an admin, and auth built in, use Django. Flask, a smaller Python web framework, gives you a core you extend. +How much should a Python web framework build in? Django comes with an ORM, an admin, and auth; Flask gives you a small core to extend. How to choose: diff --git a/website/data/category_intros/web-servers.md b/website/data/category_intros/web-servers.md index 68fa6400..e20b7a25 100644 --- a/website/data/category_intros/web-servers.md +++ b/website/data/category_intros/web-servers.md @@ -1,4 +1,4 @@ -In production, Gunicorn serves WSGI apps like Django, and Uvicorn serves ASGI apps like FastAPI. Waitress, a pure-Python web server, runs WSGI apps on Windows. +In production, Gunicorn serves WSGI apps like Django, and Uvicorn ASGI apps like FastAPI. Need a Python web server on Windows? Waitress runs WSGI there. How to choose: diff --git a/website/data/category_intros/websocket.md b/website/data/category_intros/websocket.md index 163e4eb7..ed95128c 100644 --- a/website/data/category_intros/websocket.md +++ b/website/data/category_intros/websocket.md @@ -1,4 +1,4 @@ -With Django, Channels is the pick; with Flask and Socket.IO clients, Flask-SocketIO. Standalone apps run on websockets, a Python WebSocket library. +Your Python WebSocket library follows your framework: Channels on Django, Flask-SocketIO on Flask with Socket.IO clients. websockets needs no framework. How to choose: diff --git a/website/fetch_pypi_downloads_via_clickpy.py b/website/fetch_pypi_downloads_via_clickpy.py index a708a6c6..0cbc89d3 100644 --- a/website/fetch_pypi_downloads_via_clickpy.py +++ b/website/fetch_pypi_downloads_via_clickpy.py @@ -84,12 +84,7 @@ def collect_names(readme_text: str) -> list[str]: def fetch_clickpy(names: list[str]) -> dict[str, int]: in_list = ", ".join(f"'{name}'" for name in names) - query = ( - "SELECT project, sum(count) AS downloads " - "FROM pypi.pypi_downloads_per_day " - f"WHERE project IN ({in_list}) AND date >= today() - 30 " - "GROUP BY project FORMAT JSON" - ) + query = f"SELECT project, sum(count) AS downloads FROM pypi.pypi_downloads_per_day WHERE project IN ({in_list}) AND date >= today() - 30 GROUP BY project FORMAT JSON" resp = httpx.post(CLICKPY_URL, content=query, timeout=60) resp.raise_for_status() return {row["project"]: int(row["downloads"]) for row in resp.json()["data"]} diff --git a/website/static/main.js b/website/static/main.js index 93eac711..5314aca9 100644 --- a/website/static/main.js +++ b/website/static/main.js @@ -145,7 +145,9 @@ function applyFilters() { collapseAll(); - rows.forEach(function (row) { + // Number rows in their sorted DOM order, not the load order `rows` keeps + const orderedRows = tbody ? tbody.querySelectorAll("tr.row") : rows; + orderedRows.forEach(function (row) { let show = true; if (query) { diff --git a/website/templates/index.html b/website/templates/index.html index e4d95d10..4cb99d4c 100644 --- a/website/templates/index.html +++ b/website/templates/index.html @@ -241,7 +241,7 @@