将流程分发为可执行应用程序#

我们将使用web-classification作为示例,展示如何使用Pyinstaller将流程分发为可执行应用程序。

请确保您已安装所有必需的依赖项。您可以参考web-classification的README中的“先决条件”部分,以获取完整的先决条件列表和安装说明。我们建议您添加一个requirements.txt来指示每个流程所需的所有依赖项。

Pyinstaller 是一个流行的工具,用于将 Python 应用程序转换为独立的可执行文件。它允许你将 Python 脚本打包成一个单独的可执行文件,可以在目标机器上运行,而无需安装 Python 解释器。 Streamlit 是一个开源的 Python 库,用于快速轻松地创建 Web 应用程序。它专为数据科学家和工程师设计,他们希望以最少的努力将数据脚本转换为可共享的 Web 应用程序。 我们使用 Pyinstaller 来打包流程,并使用 Streamlit 来创建自定义的 Web 应用程序。在分发工作流之前,请确保你已经安装了它们。

构建一个可执行格式的流程#

请注意,所有依赖的连接必须在构建为可执行文件之前创建。

# create connection if not created before
pf connection create --file ../../../examples/connections/azure_openai.yml --set api_key=<your_api_key> api_base=<your_api_base> --name open_ai_connection

使用以下命令将流程构建为可执行格式:

pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format executable

可执行格式文件夹结构#

导出的文件及其依赖项位于同一文件夹中。结构如下:

  • flow: 该文件夹包含所有的流程文件。

  • connections: 该文件夹包含用于创建所有相关连接的yaml文件。

  • app.py: 入口文件被包含作为打包应用程序的入口点。

  • app.spec: spec 文件告诉 PyInstaller 如何处理你的脚本。

  • main.py: 它将启动streamlit服务并被入口文件调用。

  • settings.json: 一个用于存储可执行应用程序设置的json文件。

  • build: 一个包含各种日志和工作文件的文件夹。

  • dist: 一个包含可执行应用程序的文件夹。

  • README.md: 文件的简单介绍。

入口文件的模板脚本#

PyInstaller 读取由您编写的 spec 文件或 Python 脚本。它会分析您的代码,以发现执行脚本所需的所有其他模块和库。然后,它会收集所有这些文件的副本,包括活动的 Python 解释器,并将它们与您的脚本一起放入一个文件夹中,或者可以选择放入一个可执行文件中。

我们提供了一个名为app.py的Python入口脚本作为捆绑应用程序的入口点,它使您能够将流文件夹作为端点提供服务。

规范文件的模板脚本#

规范文件告诉PyInstaller如何处理你的脚本。它编码了脚本名称和你给pyinstaller命令的大部分选项。规范文件实际上是可执行的Python代码。PyInstaller通过执行规范文件的内容来构建应用程序。

为了简化这个过程,我们提供了一个app.spec.jinja2规范模板文件,将应用程序打包成一个文件。有关规范文件的更多信息,您可以参考使用规范文件。请将streamlit_runtime_interpreter_path替换为您环境中streamlit运行时解释器的路径。

使用 Pyinstaller 打包的应用程序#

一旦你按照构建可执行格式的流程构建了一个流程作为可执行格式。它将在你指定的输出目录中创建两个名为builddist的文件夹,表示为build文件夹包含各种日志和工作文件,而dist文件夹包含app可执行应用程序。

连接#

如果服务涉及连接,所有相关连接将作为yaml文件导出,并在可执行包中重新创建。 连接中的秘密不会直接导出。相反,我们将它们导出为对环境变量的引用:

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/OpenAIConnection.schema.json
type: open_ai
name: open_ai_connection
module: promptflow.connections
api_key: ${env:OPEN_AI_CONNECTION_API_KEY} # env reference

测试端点#

最后,您可以将打包的应用程序 app 分发给其他人。他们可以通过双击可执行文件来执行您的程序,例如在 Windows 系统中的 app.exe 或在 Linux 系统中运行二进制文件,例如 app

开发服务器内置了一个网页,他们可以通过在浏览器中打开‘http://localhost:8501’来测试流程。预期结果如下:如果流程成功运行,该进程将保持活动状态,直到手动终止。

对于您的用户来说,应用程序是自包含的。他们不需要安装任何特定版本的Python或任何模块。他们甚至根本不需要安装Python。

注意: 生成的可执行文件不是跨平台的。一个平台(例如Windows)打包的可执行文件无法在其他平台(Mac, Linux)上运行。

已知问题#

  1. 请注意,Python 3.10.0 包含一个错误,导致 PyInstaller 无法支持它。PyInstaller 也无法与 Python 3.13 的测试版一起使用。

下一步#