跳到内容


为 CodeProject.AI Server 编写安装脚本

安装脚本说明

左键单击 gadget 并拖动以移动它。左键单击 gadget 的右下角并拖动以调整其大小。右键单击 gadget 以访问其属性。

每个模块的安装脚本将包含在 Linux/macOS 的 install.sh 中,以及 Windows 的 install.bat 中。这两个脚本在形式和变量命名上是相互镜像的。

安装脚本是通过主 setup.sh/setup.bat 脚本调用的。

如果 setup 脚本是从 /src 文件夹调用的,那么它将以“开发环境设置”模式运行,这意味着它将设置整个环境,为编码和调试做准备。.NET 会被安装,文件夹会被创建,并且 /src/modules 文件夹中的每个模块都会通过依次调用每个模块的 install 脚本来设置。然后,/demos 中的演示模块也将被设置。

如果 setup 脚本是从模块的根目录中调用的(通过 bash ../../setup.sh..\..\setup.bat),那么 setup 脚本将以“安装模块”模式运行,这意味着它将只运行设置当前模块所需的命令。

模块设置生命周期

无论 setup 脚本是以开发模式还是安装模式运行,在安装单个模块或所有模块时,它都会执行相同的步骤。

  1. setup 生命周期开始时会检测当前环境。操作系统、是 Intel x64 还是 arm64 架构、已知 GPU 的存在、系统类型(例如 Jetson 或 Raspberry Pi,或者只是普通的 Windows)、以及环境(例如 Docker、WSL 或原生)。

  2. 然后会读取模块的 modulesettings.json 文件来确定模块的运行时。如果模块使用 Python,那么将安装由 runtime 设置指定的 Python 版本,并设置虚拟环境。

  3. 如果没有发生错误,将运行模块的 install 脚本。

  4. 如果没有发生错误,并且如果模块使用 Python 并有一个适当的 requirements.txt 文件,那么 requirements.txt 文件中的包将被安装。

  5. 如果没有发生错误,并且如果模块有一个 post_install.sh / postinstall.bat 文件,那么这个脚本将被运行。

可用变量

变量 描述
os "linux", "macos" 或 "windows"
架构 "x86_64" 或 "arm64"
platform "linux", "linux-arm64", "macos" 或 "macos-arm64", "windows" 或 "windows-arm64"
systemName 系统的通用名称。值可以是以下之一:Windows, Linux, macOS, WSL, Raspberry Pi, Orange Pi, Jetson, 或 Docker
rootDirPath 安装的根路径(例如:~/CodeProject/AI)
sdkScriptsDirPath 安装实用脚本的路径 ($rootDirPath/SDK/Scripts)
downloadDirPath 下载文件将存储的路径 ($sdkScriptsDirPath/downloads)
runtimesDirPath 已安装的运行时的路径 ($rootDirPath/src/runtimes)
modulesDirPath 所有 AI 模块的路径 ($rootDirPath/src/modules)
moduleName 当前模块的名称
moduleVersion 当前模块的版本
moduleDirName 包含此模块的目录的名称
moduleDirPath 此模块的路径 ($modulesDirPath/$moduleDirName)
runtime 此模块使用的运行时。可以是 dotnet,也可以是 pythonX.Y
runtimeLocation 此模块虚拟环境的位置。可以是 'Local'(表示它在模块内部沙盒化),也可以是 'Shared'(表示使用的 venv 将被其他模块使用)
pythonVersion 当前系统中此模块使用的 Python 版本
virtualEnvDirPath 此模块的虚拟环境的路径
venvPythonCmdPath 此模块 venv 的 Python 可执行文件的路径
packagesDirPath 此模块安装的 Python 包的路径
verbosity quiet, info 或 loud。用于确定输出的详细程度。
forceOverwrite 如果为 true,则确保强制重新下载和重新复制下载文件。getFromServer 将遵守此值。如果您直接调用 downloadAndExtract,请务必遵守此值。

可用方法

方法 Params
write text [foreground [background]] (例如 write "Hi" "green")
writeLine text [foreground [background]]
installAptPackages "要安装的包列表"
安装一个 apt 包列表。
例如 installAptPackages "libjpeg-dev zlib1g-dev libpython3-dev"
installPythonPackagesByName PIP 模块名称,用空格分隔Wheel 文件路径, 模块名称
- PIP 模块名称 - 要安装的 Python 模块的名称,例如 'torch'
- Wheel 文件路径 - 可以提供 wheel 文件路径而不是模块名称进行安装
- 模块描述 - (可选)正在安装的模块的名称或描述
例如 installPythonPackagesByName "torch"
installPythonPackagesByName "my-torch-wheel.whl" "torch"
- PIP options - (可选)任何你想传递给 PIP 的选项(例如 --index-url)
downloadAndExtract storageUrl filename downloadDirPath dirNameToSave message
storageUrl - 存储要下载的压缩存档的 URL
filename - 要下载的压缩存档的名称
downloadDirPath - 要下载压缩存档的路径
dirNameToSave - 相对于 downloadDirPath 的目录名称,其中将解压并保存存档的内容
message - 下载期间要显示的消息
下载 storageUrl downloadDirPath filename moduleDirName message
- storageUrl 存储要下载的压缩存档的 URL<
- downloadDirPath 要下载压缩存档的路径
- filename 要下载的压缩存档的名称
- dirNameToSave 相对于 downloadDirPath 的目录名称,其中将解压并保存存档的内容
- message 下载期间要显示的消息
getFromServer folder filename moduleAssetDir message
folder - 文件所在的 S3 存储桶中的文件夹名称
filename - 要下载的压缩存档的名称
moduleAssetDir- 模块目录中将解压存档的文件夹名称
message - 下载期间要显示的消息

此方法将从当前 CodeProject 云存储中拉取一个存档。此存储是只读的,并且可能会更改。
setupPython (从不直接调用) 安装 pythonVersion 中指定的 Python 版本,并在 runtimeLocation 设置的位置设置虚拟环境。
installRequiredPythonPackages (从不直接调用) 将当前模块中包含在适当的 requirements.txt 文件中的 Python 包安装到当前模块的当前虚拟环境中。
requirements-file-directory - 一个可选参数,指定包含 requirements.txt 文件的目录。

要在 Linux/macOS 安装脚本中调用方法,请使用 method parameters (例如 writeLine "Hello, World!")。要在 Windows 安装脚本中调用方法,请使用 call "%sdkScriptsDirPath%\utils.bat" method params (例如 %sdkScriptsDirPath%\utils.bat WriteLine "Hello, World!")。


© . All rights reserved.