Q100465:如何为不同版本的 Nuke 加载插件

概括

本文将概述两种不同的方法,用于为多个版本的Nuke加载不同的插件目录。

如果您同时使用多个不同版本的Nuke ,这可能会有所帮助,因为您可能会发现某些第三方插件与您正在使用的所有Nuke版本都不兼容。

Nuke 13.0v1 开始,不再支持 Python 2。 因此,当您将 Python 脚本更新为与 Python 3.7 兼容时,这可能也会有所帮助;同样的原理也适用于在Nuke 16.0v1 中将 Python 代码从 PySide2 更改为 PySide6 的情况。

更多信息

首先,你需要将插件保存到每个Nuke版本对应的不同目录中。然后,你可以添加这些额外的目录,以便Nuke在启动时加载它们。

任何你希望只针对特定版本的Nuke加载的插件都不应该添加到本地~/.nuke 文件夹的顶层,因为该目录始终会被加载(除非你在安全模式下运行)。

您可以使用两种方法来加载适用于不同Nuke版本的插件:

  1. 创建 Python 启动脚本 

    可以通过 Python 使用NukepluginAddPath()方法或Nuke StudioHieroaddPluginPath()方法添加插件目录。

  2. 创建环境变量包装脚本

    或者,可以使用自定义包装脚本来启动特定版本的NukeNuke StudioHiero ,并设置环境变量指向所需的插件。

这两种方法的主要区别在于它们的执行顺序使用pluginAddPath()会将目录添加到Nuke插件路径的开头,而使用环境变量则会将目录添加到~/.nuke目录之后。以下示例展示了如何在脚本编辑器中运行nuke ()` ,其中两个目录已添加到Nuke的插件路径中,一个是通过 Python 添加的,另一个是通过环境变量设置的:

您决定使用哪种方法取决于您当前的管道环境以及您的插件可能依赖的任何依赖项。


创建 Python 启动脚本

通过使用 init.py 文件您可以为给定的Nuke版本定义在启动时加载哪个插件路径。

以下 Python 代码示例将检查您是否已启动Nuke 13 或Nuke 16,并相应地加载插件路径:

import nuke 

if nuke .NUKE_VERSION_MAJOR==16:
nuke .pluginAddPath(" /path/to/plugins/folder/ nuke 16 ")

if nuke .NUKE_VERSION_MAJOR==13:
nuke .pluginAddPath(" /path/to/plugins/folder/ nuke 13 ")


上述代码只会检查你正在运行的Nuke的主版本号(Nuke 13、 Nuke 16 等),但通过使用and语句和NUKE _MINOR_VERSION参数,你可以更精确地指定哪些Nuke版本会启动特定的插件。例如,以下代码会在加载插件路径之前检查Nuke版本是否为 15.1(如果版本匹配):

import nuke 

if nuke .NUKE_VERSION_MAJOR==15 and nuke .NUKE_VERSION_MINOR==1:
nuke .pluginAddPath(" /path/to/plugins/folder/ nuke 151 ")


您还可以使用NUKE _VERSION_STRING来检查完整的Nuke版本,如下所示:

import nuke 

if nuke .NUKE_VERSION_STRING=="16.0v4":
nuke .pluginAddPath(" /path/to/plugins/folder/ nuke 160v4 ")

Nuke StudioHiero

与创建Nuke的插件路径类似,对于Nuke StudioHiero您可以通过编写if语句来检查已启动的Nuke Studio / Hiero版本,并相应地加载插件路径。

但是,这段代码不是添加到~/.nuke/init.py文件中,而是需要保存到~/.nuke/Python/Startup~/.nuke/Python/StartupUI目录下的一个.py文件中。您可以在以下文章中找到有关向Nuke StudioHiero添加插件路径的更多信息: Q100373:如何向Nuke StudioHiero添加额外的插件路径

注意:您加载的其他目录也需要包含与您的~/.nuke文件夹相同的/Python/Startup/Python/StartupUI文件夹结构。

以下示例展示了如何为Nuke Studio / Hiero 13 或 16 设置不同的插件加载路径:

import hiero 
from hiero .core import env

if env["VersionMajor"]==16:
# scripts saved in /path/to/plugins/folder/ hiero 16/Python/Startup
hiero .core.addPluginPath("/path/to/plugins/folder/ hiero 16")

if env["VersionMajor"]==13:
# scripts saved in /path/to/plugins/folder/ hiero 13/Python/Startup
hiero .core.addPluginPath("/path/to/plugins/folder/ hiero 13")


Nuke类似,您可以使用env["VersionMinor"]and语句来定义主版本号和次版本号对应的插件路径。例如,以下代码将加载所有Nuke Studio / Hiero 15.1 版本的插件路径:

import hiero 
from hiero .core import env

if env["VersionMajor"]==15 and env["VersionMinor"]==1:
# scripts saved in /path/to/plugins/folder/ hiero 151/Python/Startup
hiero .core.addPluginPath(" /path/to/plugins/folder/ hiero 151 ")

您还可以使用env["VersionString"]根据确切版本加载插件。但是请注意, env["VersionString"]的结果也包含产品名称(例如"Hiero 16.0v4""NukeStudio 16.0v4" ):

import hiero 
from hiero .core import env

if env["VersionString"].endswith("16.0v4"):
# scripts saved in /path/to/plugins/folder/ hiero 160v4/Python/Startup
hiero .core.addPluginPath("/path/to/plugins/folder/ hiero 160v4")

创建环境变量包装脚本

包装脚本将系统命令或实用程序嵌入到可执行文件中,这样您就可以重复调用这些命令,而无需在命令行中重新输入。在本例中,您可以设置NUKE _PATH环境变量并启动应用程序。通过包装脚本设置环境变量意味着这些命令仅在当前活动的命令行会话中生效,而不会永久保存在您的系统中。

这些包装脚本可以保存在电脑上的任何位置,并可通过在终端中运行它们来执行。您还可以将这些文件设置为默认在终端中打开,这样只需双击即可执行它们。

macOS 和 Linux 的封装脚本包含非常相似的命令,两者之间最大的区别在于Nuke应用程序目录。以下提供了适用于各操作系统的Nuke 16.0v4 示例脚本:

提示:同样的原理也适用于Nuke StudioHiero ,可以通过向这些脚本添加--hiero--studio 启动标志来启动它们。

macOS:

#! /bin/bash
export NUKE _PATH=/path/to/some/folder/
/Applications/ Nuke 16.0v4/ Nuke 16.0v4.app/Contents/MacOS/ Nuke 16.0

Linux:

#! /bin/sh
export NUKE _PATH=/path/to/some/folder/
/usr/local/ Nuke 16.0v4/ Nuke 16.0

这与 Windows 系统截然不同,在 Windows 系统中,你需要创建一个脚本来运行 Windows 命令提示符中的命令。而在这里,你可以创建一个批处理文件( .bat ),其中包含以下命令:

视窗:

set NUKE _PATH=\path\to\some\folder
"C:\Program Files\Nuke16.0v4\Nuke16.0.exe"

注:本文还附有适用于每个操作系统的示例包装脚本。

延伸阅读

有关在Nuke中加载插件的更多信息,请参阅我们文档的以下页面:


示例文件

我们很遗憾听到

请告诉我们