|
Metadata-Version: 2.4 |
|
Name: uvicorn |
|
Version: 0.34.3 |
|
Summary: The lightning-fast ASGI server. |
|
Project-URL: Changelog, https://www.uvicorn.org/release-notes |
|
Project-URL: Funding, https://github.com/sponsors/encode |
|
Project-URL: Homepage, https://www.uvicorn.org/ |
|
Project-URL: Source, https://github.com/encode/uvicorn |
|
Author-email: Tom Christie <tom@tomchristie.com>, Marcelo Trylesinski <marcelotryle@gmail.com> |
|
License-Expression: BSD-3-Clause |
|
License-File: LICENSE.md |
|
Classifier: Development Status :: 4 - Beta |
|
Classifier: Environment :: Web Environment |
|
Classifier: Intended Audience :: Developers |
|
Classifier: License :: OSI Approved :: BSD License |
|
Classifier: Operating System :: OS Independent |
|
Classifier: Programming Language :: Python :: 3 |
|
Classifier: Programming Language :: Python :: 3.9 |
|
Classifier: Programming Language :: Python :: 3.10 |
|
Classifier: Programming Language :: Python :: 3.11 |
|
Classifier: Programming Language :: Python :: 3.12 |
|
Classifier: Programming Language :: Python :: 3.13 |
|
Classifier: Programming Language :: Python :: Implementation :: CPython |
|
Classifier: Programming Language :: Python :: Implementation :: PyPy |
|
Classifier: Topic :: Internet :: WWW/HTTP |
|
Requires-Python: >=3.9 |
|
Requires-Dist: click>=7.0 |
|
Requires-Dist: h11>=0.8 |
|
Requires-Dist: typing-extensions>=4.0; python_version < '3.11' |
|
Provides-Extra: standard |
|
Requires-Dist: colorama>=0.4; (sys_platform == 'win32') and extra == 'standard' |
|
Requires-Dist: httptools>=0.6.3; extra == 'standard' |
|
Requires-Dist: python-dotenv>=0.13; extra == 'standard' |
|
Requires-Dist: pyyaml>=5.1; extra == 'standard' |
|
Requires-Dist: uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard' |
|
Requires-Dist: watchfiles>=0.13; extra == 'standard' |
|
Requires-Dist: websockets>=10.4; extra == 'standard' |
|
Description-Content-Type: text/markdown |
|
|
|
<p align="center"> |
|
<img width="320" height="320" src="https://raw.githubusercontent.com/tomchristie/uvicorn/master/docs/uvicorn.png" alt='uvicorn'> |
|
</p> |
|
|
|
<p align="center"> |
|
<em>An ASGI web server, for Python.</em> |
|
</p> |
|
|
|
--- |
|
|
|
[](https://github.com/encode/uvicorn/actions) |
|
[](https://pypi.python.org/pypi/uvicorn) |
|
[](https://pypi.org/project/uvicorn) |
|
|
|
**Documentation**: [https://www.uvicorn.org](https://www.uvicorn.org) |
|
|
|
--- |
|
|
|
Uvicorn is an ASGI web server implementation for Python. |
|
|
|
Until recently Python has lacked a minimal low-level server/application interface for |
|
async frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to |
|
start building a common set of tooling usable across all async frameworks. |
|
|
|
Uvicorn supports HTTP/1.1 and WebSockets. |
|
|
|
## Quickstart |
|
|
|
Install using `pip`: |
|
|
|
```shell |
|
$ pip install uvicorn |
|
``` |
|
|
|
This will install uvicorn with minimal (pure Python) dependencies. |
|
|
|
```shell |
|
$ pip install 'uvicorn[standard]' |
|
``` |
|
|
|
This will install uvicorn with "Cython-based" dependencies (where possible) and other "optional extras". |
|
|
|
In this context, "Cython-based" means the following: |
|
|
|
- the event loop `uvloop` will be installed and used if possible. |
|
- the http protocol will be handled by `httptools` if possible. |
|
|
|
Moreover, "optional extras" means that: |
|
|
|
- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible. |
|
- the `--reload` flag in development mode will use `watchfiles`. |
|
- windows users will have `colorama` installed for the colored logs. |
|
- `python-dotenv` will be installed should you want to use the `--env-file` option. |
|
- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired. |
|
|
|
Create an application, in `example.py`: |
|
|
|
```python |
|
async def app(scope, receive, send): |
|
assert scope['type'] == 'http' |
|
|
|
await send({ |
|
'type': 'http.response.start', |
|
'status': 200, |
|
'headers': [ |
|
(b'content-type', b'text/plain'), |
|
], |
|
}) |
|
await send({ |
|
'type': 'http.response.body', |
|
'body': b'Hello, world!', |
|
}) |
|
``` |
|
|
|
Run the server: |
|
|
|
```shell |
|
$ uvicorn example:app |
|
``` |
|
|
|
--- |
|
|
|
## Why ASGI? |
|
|
|
Most well established Python Web frameworks started out as WSGI-based frameworks. |
|
|
|
WSGI applications are a single, synchronous callable that takes a request and returns a response. |
|
This doesnβt allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections, |
|
which WSGI doesn't support well. |
|
|
|
Having an async concurrency model also allows for options such as lightweight background tasks, |
|
and can be less of a limiting factor for endpoints that have long periods being blocked on network |
|
I/O such as dealing with slow HTTP requests. |
|
|
|
--- |
|
|
|
## Alternative ASGI servers |
|
|
|
A strength of the ASGI protocol is that it decouples the server implementation |
|
from the application framework. This allows for an ecosystem of interoperating |
|
webservers and application frameworks. |
|
|
|
### Daphne |
|
|
|
The first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne]. |
|
|
|
It is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets. |
|
|
|
Any of the example applications given here can equally well be run using `daphne` instead. |
|
|
|
``` |
|
$ pip install daphne |
|
$ daphne app:App |
|
``` |
|
|
|
### Hypercorn |
|
|
|
[Hypercorn][hypercorn] was initially part of the Quart web framework, before |
|
being separated out into a standalone ASGI server. |
|
|
|
Hypercorn supports HTTP/1.1, HTTP/2, and WebSockets. |
|
|
|
It also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`. |
|
|
|
``` |
|
$ pip install hypercorn |
|
$ hypercorn app:App |
|
``` |
|
|
|
### Mangum |
|
|
|
[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway. |
|
|
|
### Granian |
|
|
|
[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets. |
|
|
|
--- |
|
|
|
<p align="center"><i>Uvicorn is <a href="https://github.com/encode/uvicorn/blob/master/LICENSE.md">BSD licensed</a> code.<br/>Designed & crafted with care.</i><br/>— π¦ —</p> |
|
|
|
[asgi]: https://asgi.readthedocs.io/en/latest/ |
|
[daphne]: https://github.com/django/daphne |
|
[hypercorn]: https://github.com/pgjones/hypercorn |
|
[trio]: https://trio.readthedocs.io |
|
[mangum]: https://github.com/jordaneremieff/mangum |
|
[granian]: https://github.com/emmett-framework/granian |
|
|