Python

The Python Runtime is used by Vercel to compile Python Serverless Functions, that defines a singular HTTP handler variable, inheritting from the BaseHTTPRequestHandler class, from a .py file within an /api directory at your project’s root.

Python 平台被用作 vercel 的 Python 云函数编译器,它定义了一个单一的 HTTP handler 变量,继承自 BaseHTTPRequestHandler 类,并且来自于 /api 目录下以 .py 结尾的文件

For example, define an index.py file inside a /api directory as follows:

示例:这是一个 /api 目录下以 .py 结尾的文件

An example index.py file inside an /api directory.

Inside requirements.txt define:

requirements.txt 中这样定义

An example requirements.txt file that defines cowpy as a dependency.

requirements.txt 定义了需要 cowpy 这个依赖项

For advanced usage, such as using WSGI or ASGI for your Python projects, see the Advanced Python Usage section.

有关高级用法,例如在 Python 项目中使用 WSGI 或 ASGI,请参阅 高级 Python 用法部分。(本文的后半部分)

Python Version

Python projects deployed with Vercel use Python version 3.9.

使用 Vercel 部署的 Python 项目使用 Python 3.9 版。

You can specify the version of Python by defining python_version in Pipfile, like so:

您可以通过在 Pipfile 中定义 python_version 来指定 Python 的版本,如下所示:

An example Pipfile generated withpipenv install flask.

Currently, the following Python versions are available:

目前,有如下版本可用

Note: The python_version must exactly match one of the options above or it will be ignored.

注意:python_version 必须与上述选项之一 完全匹配 ,否则将被忽略。

Python Dependencies

Python 的依赖项

You can install dependencies for your Python projects by defining them in requirements.txt or a Pipfile with corresponding Pipfile.lock.

您可以通过在 requirements.txt 或具有相应 Pipfile.lockPipfile 中定义 Python 项目的依赖项来安装依赖项。




Advanced Python Usage

高级 Python 用法

In order to use this Runtime, no configuration is needed. You only need to create a file inside the api directory.

要使用这个云函数,您不需要过多配置。只需要创建在 api 目录下创建一个文件。

The entry point of this Runtime is a glob matching .py source files with one of the following variables defined:

这个运行的入口函数要以 .py 结尾,并且具备以下两种特征中的一种。

  • handler that inherits from the BaseHTTPRequestHandler class.

    handler class 属性并且继承于 BaseHTTPRequestHandler

  • app that exposes a WSGI or ASGI Application.

    WSGI 或者 ASGI 应用并且有 app 的入口。

Reading Relative Files in Python

在 Python 中读取相关文件

Python uses the current working directory when a relative file is passed to open().

当一个文件被由 open() 打开时。

The current working directory is the base of your project, not the api/ directory.

工作目录是以根目录为基础的,而不是 api/

For example, the following directory structure:

例如,若有如下目录结构

With the above directory structure, your function in api/user.py can read the contents of data/file.txt in a couple different ways.

有了上面的结构, api/user.py 中的函数可以通过几种不同的方式读取 data/file.txt 的内容。

You can use the path relative to the project’s base directory.

您可以使用 绝对路径

Or you can use the path relative to the current file’s directory.

或者使用相对路径

Web Server Gateway Interface

Web服务器网关接口

The Web Server Gateway Interface (WSGI) is a calling convention for web servers to forward requests to web applications written in Python. You can use WSGI with frameworks such as Flask or Django.

Web 服务器网关接口 (WSGI) 是 Web 服务器将请求转发到用 Python 编写的 Web 应用程序的调用约定。 您可以将 WSGI 与 Flask 或 Django 等框架一起使用。

Instead of defining a handler, define an app variable in your Python file, when using vercel.json config. For example, define a index.py file inside your project as follows:

使用 vercel.json 配置时,不要定义 handler,而是在 Python 文件中定义 app 变量。 例如,在您的项目中定义一个 index.py 文件,如下所示:

An example index.py file, using Flask for a WSGI application.

一个示例 index.py 文件,将 Flask 用于 WSGI 应用程序。

Inside requirements.txt define:

requirements.txt 中定义:

An example requirements.txt file, listing flask as a dependency.

一个示例 requirements.txt 文件,将 flask 列为依赖项。

Asynchronous Server Gateway Interface

异步服务器网关接口

The Asynchronous Server Gateway Interface (ASGI) is a calling convention for web servers to forward requests to asynchronous web applications written in Python. You can use ASGI with frameworks such as Sanic.

异步服务器网关接口 (ASGI) 是 Web 服务器将请求转发到用 Python 编写的异步 Web 应用程序的调用约定。 您可以将 ASGI 与 Sanic 等框架一起使用。

Instead of defining a handler, define an app variable in your Python file.

不要定义一个 handler,而是在你的 Python 文件中定义一个 app 变量。

For example, define a index.py file inside a folder as follows:

例如,在文件夹中定义一个 index.py 文件,如下所示:

An example index.py file, using Sanic for a ASGI application.

一个示例 index.py 文件,将 Sanic 用于 ASGI 应用程序。

Inside requirements.txt define:

requirements.txt 中定义:

An example requirements.txt file, listing sanic as a dependency.

一个示例 requirements.txt 文件,将 sanic 列为依赖项。