运行

由于pygeapi的核心是一个PythonAPI,因此它可以通过许多Web服务器场景提供服务。到目前为止,比利亚皮可以通过烧瓶提供 WSGI 、Starlette ASGI ,以及 Django

本节介绍如何在开发环境和生产环境中运行pygeapi。有关使用docker运行pygeapi的信息,请参阅 Docker 一节。

在开发中运行

这个 pygeoapi serve 是在您自己的计算机上运行Pourgeapi的最简单方法。此命令启动一个pygeapi服务器实例。默认情况下,会启动一个Flask服务器,但Starlette和Django也可以使用。

使用 --starlette--django FLAGS将使用指定的服务器技术启动pygeapi。

还建议安装开发依赖项(包含在Requirements-dev.txt文件中),以便运行pygeapi进行开发。为此,请运行以下命令:

pip3 install -r requirements-dev.txt

备注

  • 更改pygeapi或OpenAPI的配置文件需要重新启动服务器(为了提高性能,在服务器启动时加载一次配置)。

  • 对代码库的更改需要重新生成(即重新运行 python3 setup.py install 命令)。有关如何在热重新加载的情况下运行pygeapi的说明,请参阅“热重新加载”部分。

Flask WSGI

Web服务器网关接口(WSGI)是Web服务器如何与Python应用程序通信的标准。通过使用WSGI服务器,HTTP请求被处理成线程/进程以获得更好的性能。Flask是一个WSGI实现,pygeoapi使用它与核心API通信。

HTTP request <--> Flask (pygeoapi/flask_app.py) <--> pygeoapi API (pygeoapi/api.py)

Flask WSGI服务器的运行方式如下:

pygeoapi serve --flask
pygeoapi serve  # uses Flask by default

要将pygeoapi集成为另一个Flask应用程序的一部分,请使用Flask蓝图:

from flask import Flask
from pygeoapi.flask_app import BLUEPRINT as pygeoapi_blueprint

app = Flask(__name__)

app.register_blueprint(pygeoapi_blueprint, url_prefix='/oapi')


@app.route('/')
def hello_world():
    return 'Hello, World!'

因此,您的申请将在http://localhost:5000/和pygeoapi将在http://localhost:5000/oapi

Starlette ASGI

异步服务器网关接口(ASGI)是支持异步的web服务器、框架和用Python编写的应用程序之间的标准接口。ASGI提供了WSGI的优点以及异步功能。Starlette是一个ASGI实现,pygeoapi使用它以异步模式与核心API通信。

HTTP request <--> Starlette (pygeoapi/starlette_app.py) <--> pygeoapi API (pygeoapi/api.py)

要将Starlette用作Web服务器,必须运行以下命令安装其依赖项:

pip3 install -r requirements-starlette.txt

然后,Starlette ASGI服务器可以按如下方式运行:

pygeoapi serve --starlette

要将pygeoapi作为另一个Starlette应用程序的一部分进行集成,请执行以下操作:

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
from starlette.routing import Route
from pygeoapi.starlette_app import app as pygeoapi_app


async def homepage(request):
    return PlainTextResponse('Hello, World!')

app = Starlette(debug=True, routes=[
    Route('/', homepage),
])

app.mount('/oapi', pygeoapi_app)

因此,您的申请将在http://localhost:5000/和pygeoapi将在http://localhost:5000/oapi

姜戈

Django 是一个鼓励快速开发和干净、实用的设计的PythonWeb框架。

与FlASK和Starlette类似,Django可以被pygeapi用来与核心API通信。

HTTP request <--> Django (pygeoapi/django_app.py) <--> pygeoapi API (pygeoapi/api.py)

要将Django用作Web服务器,必须运行以下命令安装其依赖项:

pip3 install -r requirements-django.txt

在安装了Django Repallies之后,可以按如下方式运行pygeapi:

pygeoapi serve --django

因此,您的Django应用程序将在http://localhost:5000/.上提供

要将pygeapi作为另一个Django项目的一部分集成到可插拔组件中,需要将pygeapi URL添加到主Django应用程序URL中:

from django.contrib import admin
from django.urls import path, include

from pygeoapi.django_pygeoapi import urls as pygeoapi_urls

urlpatterns = [
   path('admin/', admin.site.urls),
   path('sample-project/', include(pygeoapi_urls)),
]

这种集成可以在提供的示例Django项目中看到。参考 examples/django/sample_project/README.md 用于将pygeapi与已经存在的Django应用程序集成。

热重装

这个 pygeoapi serve 使用当前的pygeapi安装。中提供的安装命令执行安装 安装 部分 (python3 setup.py install ),在重新构建(即重新运行)之前,对pygeapi代码库所做的更改不会反映在应用程序中 python3 setup.py install )。

通过热重新加载,我们的意思是能够直接看到应用程序中反映的更改,而无需重新安装pygeapi包或重置服务器。这对开发很有用,因为开发人员所做的更改可以轻松而快速地反映出来,并且他们可以利用提供每个可用的Web服务器的热重新加载功能。

要启用热重载,请使用pip(而不是setup.py脚本)安装pygeapi包,并使用以下命令:

pip3 install -e .

备注

此命令必须从pyGeoapi的根目录运行。

生成本地包后,可以使用 pygeoapi serve 同样,代码库上的更改将直接反映在运行的实例上。

在生产环境运行

运行 pygeoapi serve 不建议或不建议在生产中使用。首选方案如下所述。

参见

Docker 用于集装箱生产装置。

Apache和modwsgi

通过部署pygeoapi mod_wsgi 提供了在Apache中启用的简单方法。

要使用mod_wsgi进行部署,您的Apache实例必须在Apache中启用mod_wsgi。此时,设置以下Python WSGI脚本:

import os

os.environ['PYGEOAPI_CONFIG'] = '/path/to/my-pygeoapi-config.yml'
os.environ['PYGEOAPI_OPENAPI'] = '/path/to/my-pygeoapi-openapi.yml'

from pygeoapi.flask_app import APP as application

现在在Apache中配置:

WSGIDaemonProcess pygeoapi processes=1 threads=1
WSGIScriptAlias /pygeoapi /path/to/pygeoapi.wsgi process-group=pygeoapi application-group=%{GLOBAL}

<Location /pygeoapi>
  Header set Access-Control-Allow-Origin "*"
</Location>

在Python虚拟环境中运行pygeapi时,请使用类似于以下内容的指令:

WSGIDaemonProcess pygeoapi processes=1 threads=1 python-home=/path/to/venv/pygeoapi
WSGIScriptAlias /pygeoapi /path/to/pygeoapi.wsgi process-group=pygeoapi application-group=%{RESOURCE}

Gunicorn

Gunicorn (对于UNIX)是可用于生产环境的几个pythonwsgihttp服务器之一。

HTTP request --> WSGI or ASGI server (gunicorn) <--> Flask or Starlette (pygeoapi/flask_app.py or pygeoapi/starlette_app.py) <--> pygeoapi API

备注

Gunicorn安装起来就像 pip3 install gunicorn

备注

有关WSGI服务器实现的完整列表,请参见 WSGI server list .

Gunicorn 和 Flask

Gunicorn和Flask操作简单:

gunicorn pygeoapi.flask_app:APP

备注

有关端口绑定、工作线程和日志记录等其他配置参数,请参阅 Gunicorn settings .

Gunicorn 和 Starlette

使用Starlette运行Gunicorn需要 Uvicorn 库,它与Gunicorn一起提供异步功能。Uvicorn包括一个Gunicorn Worker类,允许您运行ASGI应用程序,具有Uvicorn的所有性能优势,同时还为您提供Gunicorn功能齐全的进程管理。

使用以下命令即可轻松运行:

gunicorn pygeoapi.starlette_app:app -w 4 -k uvicorn.workers.UvicornWorker

备注

Uvicorn安装起来就像 pip3 install uvicorn

总结

根据您的需求,pygeoapi有许多部署方法。选择一个适合您的,并相应地进行修改。

备注

欢迎并鼓励采用其他方法;见 贡献 有关如何帮助和改进文档的更多信息