以可执行应用程序形式分发流#

我们将以 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 入口脚本作为捆绑应用程序的入口点,它使您能够将流文件夹作为端点提供服务。

spec 文件的模板脚本#

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

为了简化此过程,我们提供了一个 app.spec.jinja2 spec 模板文件,它将应用程序捆绑到一个文件中。有关 spec 文件的更多信息,您可以参考 使用 spec 文件。请将 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

开发服务器有一个内置的网页,他们可以通过在浏览器中打开“https://:8501”来测试流。预期结果如下:如果流成功提供服务,该进程将保持活动状态,直到手动终止。

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

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

已知问题#

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

后续步骤#

  • 在此处尝试示例 here