为 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 脚本是以开发模式还是安装模式运行,在安装单个模块或所有模块时,它都会执行相同的步骤。
-
setup 生命周期开始时会检测当前环境。操作系统、是 Intel x64 还是 arm64 架构、已知 GPU 的存在、系统类型(例如 Jetson 或 Raspberry Pi,或者只是普通的 Windows)、以及环境(例如 Docker、WSL 或原生)。
-
然后会读取模块的
modulesettings.json
文件来确定模块的运行时。如果模块使用 Python,那么将安装由runtime
设置指定的 Python 版本,并设置虚拟环境。 -
如果没有发生错误,将运行模块的
install
脚本。 -
如果没有发生错误,并且如果模块使用 Python 并有一个适当的 requirements.txt 文件,那么 requirements.txt 文件中的包将被安装。
-
如果没有发生错误,并且如果模块有一个
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 messagestorageUrl - 存储要下载的压缩存档的 URLfilename - 要下载的压缩存档的名称downloadDirPath - 要下载压缩存档的路径dirNameToSave - 相对于 downloadDirPath 的目录名称,其中将解压并保存存档的内容message - 下载期间要显示的消息 |
下载 |
storageUrl downloadDirPath filename moduleDirName message - storageUrl 存储要下载的压缩存档的 URL<- downloadDirPath 要下载压缩存档的路径- filename 要下载的压缩存档的名称- dirNameToSave 相对于 downloadDirPath 的目录名称,其中将解压并保存存档的内容- message 下载期间要显示的消息 |
getFromServer |
folder filename moduleAssetDir messagefolder - 文件所在的 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!")。