Natron 在 GNU/Linux 上从源码编译安装完整指南:qmake 与 CMake 双构建路径详解
音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载本篇技术指南面向需要在 GNU/LinuxArch、Debian/Ubuntu、Fedora/RHEL 等上从源码构建 Natron 的开发者与打包者完整覆盖 Docker 一键构建、Natron SDK 依赖构建、手动依赖安装、config.pri配置、qmake/CMake 两种构建流程以及 Python 绑定的生成方法。读完本文你将掌握从克隆仓库到产出可运行二进制、再到运行单元测试的全链路实操方案并能依据仓库内脚本与配置理解每一步的底层原理。构建方式总览Natron 是一个基于节点图的开源视频合成软件其 Linux 版源码编译有三种主流路径官方文档INSTALL_LINUX.md给出的取舍建议如下Docker 一键构建最省事、最hands-off的方式适合只想快速拿到可运行二进制、不想折腾依赖的用户完整 Natron SDK官方二进制所用的构建环境脚本会从零编译全部第三方依赖并安装到/opt/Natron-sdk适合打包维护者发行版包管理器 手动构建利用 Arch / Debian / Fedora 等发行版提供的 Qt、Boost、Expat、Cairo、PySide2 等软件包配合config.pri指向这些库适合大多数开发者日常编译调试。无论走哪条路仓库本身都提供了大量现成脚本作为支撑下文将逐一给出对应文件路径便于你对照源码理解每一步的实际行为。Docker 一键构建如果你已经安装了 DockerNatron 的官方 SDK 镜像natrongithub/natron-sdk可以直接用于构建完整的 Natron 二进制包。步骤非常简单先创建一个用于承载构建产物的目录例如builds然后执行docker run -it --rm --mount src$(pwd)/builds,target/home/builds_archive,typebind natrongithub/natron-sdk:latestDocker 会自动完成其余所有工作构建结束后你会在./builds目录下得到一个完整的 Natron 二进制归档tgz 格式。--rm表示容器退出后自动清理--mount src...,target/home/builds_archive,typebind把宿主机的builds目录绑定挂载到容器内的/home/builds_archive从而把产物带出容器。镜像的构建与运行细节记录在 tools/docker/README.md 中你可以据此做更精细的控制限制并行编译任务数例如--env MKJOBS2指定源码分支或提交例如--env GIT_BRANCHRB-2.4、--env GIT_URL...、--env GIT_COMMIT...发布构建需在 Natron 与各插件仓库打上对应 tag并设置RELEASE_TAG如2.4.4与NATRON_BUILD_NUMBER1等环境变量如果构建中途失败可以改用docker run -it --rm ... natrongithub/natron-sdk:latest bash进入交互式 shell手动执行launchBuildMain.sh排查问题。SDK 镜像本身正是由 tools/jenkins/include/scripts/build-Linux-sdk.sh 生成的该脚本支持GEN_DOCKERFILE1直接输出 Dockerfile而不是真去编译并基于 CentOS / Rocky Linux / Ubuntu 生成对应的中间构建镜像这正是官方二进制能在较老发行版上兼容运行的原因。依赖的两种来源构建 Natron 所需的依赖要么专门为 Natron 编译Natron SDK要么直接使用发行版软件包。从仓库结构看Natron 还自带一批随源码编译的第三方库libs/目录下的 gflags、glog、ceres、libmv、openMVG、qhttpserver、hoedown、libtess 等它们由根级 Project.pro 以 subdirs 模板统一编排依赖关系为glog.depends gflags、ceres.depends glog gflags、libmv.depends gflags ceres、openMVG.depends ceres、Engine.depends libmv openMVG HostSupport libtess ceres、Renderer.depends Engine、Gui.depends Engine qhttpserver、Tests.depends Gui Engine、App.depends Gui Engine。构建完整的 Natron SDK官方二进制使用 Natron SDK 构建。构建脚本位于仓库的tools/jenkins目录下执行cd tools/jenkins include/scripts/build-Linux-sdk.sh脚本将 SDK 安装到默认位置/opt/Natron-sdk该目录必须对当前用户可写并把构建日志与每个软件包安装的文件清单存放在/opt/Natron-sdk/var/log/Natron-Linux-x86_64-SDK或/opt/Natron-sdk/var/log/Natron-Linux-i686-SDK。部分软件包尤其是 Qt 4.8.7带有 Natron 专属补丁具体打了哪些补丁、用了什么配置选项都可以在 SDK 脚本中查到。从源码看该脚本还提供若干实用的环境变量开关环境变量作用GEN_DOCKERFILE1不实际构建只输出 Dockerfile用于生成 SDK 镜像LIST_STEPS1输出构建步骤的有序清单LAST_STEPstep_name只构建到指定步骤为止FORCE_BUILD1强制重建即使已是最新DOWNLOAD1只下载源码包不编译TAR_SDK1构建完成后把 SDK 打成 tar 归档UPLOAD_SDK1与TAR_SDK1配合把归档上传到远端仓库MKJOBS并行编译线程数默认 4脚本内部会依次build大量软件包链路清晰可见先自举 GCC然后是 bzip2、xz、expat、pkg-config、zlib 等基础工具再到 python2/python3、Boost、OpenColorIO、OpenImageIO、SeExpr、ffmpeg 全家桶最后是qt4、qt4webkit、shiboken、pyside、qt5、pyside2。其中每个软件包对应一个独立的构建脚本全部位于 tools/jenkins/include/scripts/pkg/如boost.sh、cairo.sh、qt5.sh、pyside2.sh等你需要调整某个依赖的版本或补丁时改的就是这些文件。SDK 的更新方式很简单拉取脚本的最新修改后重新执行一遍即可脚本默认只重建需要更新的软件包并自动处理依赖例如软件包 B 依赖 AA 重建后 B 也会被重建。使用 SDK 的环境设置SDK 构建完成后在你打算编译或运行 Natron 的每个 shell 中都必须先执行 SDK 的环境设置脚本确保 Natron 优先使用 SDK 内的库而不是系统库. path_to_Natron_sources/tools/utils/natron-sdk-setup-linux.sh该脚本位于 tools/utils/natron-sdk-setup-linux.sh它会设置PATH、LD_LIBRARY_PATH、LD_RUN_PATH、CPATH、PKG_CONFIG_PATH、PYTHONPATH、QTDIR等环境变量并额外导出NATRON_PLUGIN_PATH、OFX_PLUGIN_PATH、OCIO方便后续编译 OpenFX 插件、运行 Natron 与单元测试。注意这个 source 操作必须在每一个打算编译/运行 Natron 的终端里重复执行。参照 Travis 脚本安装 Ubuntu 依赖仓库中的tools/travis/install_dependencies.sh与tools/travis/build.sh分别负责在 Ubuntu 18.04 (Bionic Beaver) 上安装依赖、构建 Natron 及标准插件集用于官方 Travis CI 构建。你可以把它们当作一份可参考的 Ubuntu 依赖清单与config.pri生成示例但文档明确提示其产出的二进制不能保证完全可用仅作参照。手动安装依赖如果不使用 SDK则需要手工准备以下依赖多数可通过发行版包管理器获取。Qt 5.15Qt5 构建只需 qtbase 库一般直接用发行版包管理器安装具体包名因发行版而异。也可以从 Qt 官方归档的 5.15.4 子模块 tarball 或 KDE fork 自行从源码构建。Qt 4.8如果更倾向 Qt4由于许多发行版已废弃 Qt 4通常必须从源码构建。Qt 官方下载站的 4.8.7 源码归档是可用来源。注意Natron 对 Qt 4.8.7 打了 Natron 专属补丁SDK 脚本里有补丁细节可查。BoostNatron 编译需要boost serialization。可以用包管理器安装注意还需boost_thread、boost_system等运行时库也可以从 Boost 官网下载源码安装。从根级 CMakeLists.txt 可以看到 CMake 构建路径要求find_package(Boost COMPONENTS headers serialization CONFIG)即至少需要 Boost 的 headers 与 serialization 组件。ExpatXML 解析库直接用包管理器安装即可包名因发行版而异。CairoNatron 的旋转描边rotoscoping等功能依赖 Cairo同样用包管理器安装。Travis 脚本注释中提到 cairo 1.12 是 rotoscoping 的硬性要求可用 xorg-edgers PPA 获取更新版本。PySide2 / Shiboken2PySide2Natron 在 Python 3 Qt5 组合下使用 PySide2。Shiboken2Python 3 Qt5 组合下的绑定生成器生成器二进制shiboken2和头文件都必须安装因为构建期要用它从 typesystem 描述文件生成 Python 绑定代码。PySide / ShibokenQt4 组合PySideNatron 在 Python 2 Qt4 组合下使用 PySide注意许多发行版已将其废弃。ShibokenPython 2 Qt4 组合下的绑定生成器同样已废弃。QtPyQtPy 是 PyQt5/PyQt4/PySide2/PySide 的抽象层尽量用发行版包管理器安装或用 pippip install qtpy配置阶段构建前的配置是整个过程中最容易困惑的部分主要包括三件事OpenFX 子模块、OpenColorIO-Configs 配置包、以及config.pri依赖定位文件。OpenFX 子模块Natron 基于 OpenFX API 构建构建前请确保其子模块是最新的git submodule update -i --recursive仓库中的 OpenFX 相关代码位于 libs/OpenFX此外还有 OpenFX 扩展定义在 libs/OpenFX_extensions。下载 OpenColorIO-Configs过去 OCIO 配置以子模块方式引入但由于仓库体积过大现在改为 tarball 发布。下载后请把它放到 Natron 仓库根目录wget https://github.com/NatronGitHub/OpenColorIO-Configs/archive/Natron-v2.4.tar.gz tar -xvzf Natron-v2.4.tar.gz mv OpenColorIO-Configs-Natron-v2.4 OpenColorIO-Configs注意如果解压出的目录名形如OpenColorIO-Configs-Natron-v2.4必须重命名为OpenColorIO-Configs。为了节省磁盘空间可以只保留以下子目录blender*、natron、nuke-default其余全部删除cd OpenColorIO-Configs rm -v !(blender|blender-cycles|natron|nuke-default) -R为什么必须有它从 OpenColorIO-Configs.pri 可以看到qmake 构建会把OpenColorIO-Configs/blender、natron、nuke-default等目录作为OCIO.files安装到$PREFIX/share/OpenColorIO-ConfigsmacOS 下则打入 app bundle 的Contents/Resources/OpenColorIO-Configs并且 tools/jenkins/build-natron.sh 在构建时也会自动下载对应版本的 OCIO 配置并软链接为OpenColorIO-Configs。Debian 系的 CMake 构建示例则使用Natron-v2.5版本包说明该 tarball 的版本号会随主线演进实际操作时以构建脚本中OCIO_CONFIGS_VERSION的推导逻辑为准。config.pri定位依赖的核心文件config.pri用来告诉 .pro 工程文件各依赖库的位置是整个构建流程中最容易让人困惑的部分。创建方法在Project.pro同级的仓库根目录下创建config.pri文件内容指向你系统上真实的库路径。三个变量的含义INCLUDEPATH—— 头文件include路径LIBS—— 库文件路径/链接参数PKGCONFIG—— pkg-config 模块名。一个典型的 Qt4 构建示例可直接复制到终端执行----- copy and paste the following in a terminal ----- cat config.pri EOF boost-serialization-lib: LIBS -lboost_serialization boost: LIBS -lboost_thread -lboost_system expat: LIBS -lexpat expat: PKGCONFIG - expat pyside: PYSIDE_PKG_CONFIG_PATH $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) pyside: PKGCONFIG pyside pyside: INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtCore pyside: INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtGui EOF ----- end -----这里的CONFIG 特性名: 指令语法是 qmake 的条件作用域仅当该特性被启用例如pyside特性开启时才追加对应链接/包含参数。$$system(...)则在 qmake 解析期动态执行 shell 命令来探测 pkg-config 给出的真实路径。各发行版的具体示例在下面发行版专项一节给出仓库中也提供了 Arch Linux 的现成模板见 build-configs/arch-linux/config.pri。另外构建脚本 tools/travis/install_dependencies.sh 里也演示了如何根据 Ubuntu 版本动态生成config.pri例如对没有 expat.pc 的 Ubuntu 12.04 用expat: PKGCONFIG - expat关闭 pkg-config 探测、改用-lexpat直连可作为理解config.pri写法的第二份实例。Nodes默认节点插件仓库Natron 的节点存放在独立仓库中要使用默认节点集必须额外构建以下仓库openfx-misc默认的通用节点集合openfx-ioI/O 相关节点集合两者的安装说明见各自仓库的 README且它们自身也带有子模块openfx-io、openfx-misc都有 submodules构建前需同步。插件安装位置有两种选择系统级Linux 下安装到/usr/OFX/Plugins应用目录级安装在可执行文件所在目录的父目录下名为Plugins的目录中例如bin/ Natron Plugins/ IO.ofx.bundle运行时插件搜索路径由OFX_PLUGIN_PATH等环境变量控制见 tools/utils/natron-sdk-setup-linux.sh构建产物中的 OFX 插件以.ofx.bundle目录形式出现。构建使用 qmake 构建进入 Natron 目录后执行qmake -r make如果依赖安装与配置都正确应当能无错误地构建完成。如果系统里装了多个版本的 Qtqmake 可能报错此时 Qt5 构建可以改用QT_SELECT5 qmake -r make需要 DEBUG 构建时把 qmake 调用改成qmake -r CONFIGdebug需要 Clang 编译时qmake -r -spec linux-clang从 Project.pro 可以看出qmake -r会递归处理HostSupport、gflags、glog、ceres、libmv、openMVG、qhttpserver、hoedown、libtess、Engine、Renderer、Gui、Tests、PythonBin、App这些子工程如果启用CONFIG(enable-breakpad)还会额外包含breakpadpro.pri。调试选项来自 global.pri面向 Natron 开发者global.pri 中定义了一组可用CONFIGoption开启的调试选项CONFIG 选项作用以源码注释/实现为准snapshot/alpha/beta/RC/stable设置构建版本形态分别定义NATRON_CONFIG_SNAPSHOT等宏构建农场专用custombuild自定义构建需配合BUILD_USER_NAME在 Natron 中显示自定义用户名见 Project.pro 中isEmpty(CONFIG_SET)的提示openmp为 GCC 添加-fopenmp编译/链接参数openMVG、ceres 等库会相应定义OPENMVG_USE_OPENMP、CERES_USE_OPENMP见 libs.prienable-breakpad启用 Breakpad 崩溃报告支持Project.pro 据此包含 breakpadpro.priaddresssanitizer启用 AddressSanitizer-fsanitizeaddress自动附带 debug 配置threadsanitizer启用 ThreadSanitizer-fsanitizethread面向 clangcoverage启用代码覆盖率-fprofile-arcs -ftest-coverage -O0enforce-gcc8即使检测到 GCC 8.1/8.2 也强制继续构建该版本在 release 构建下有已知 bugnopch禁用预编译头debug 构建默认启用nopch例如qmake -r CONFIGdebug CONFIGopenmp CONFIGcustombuild BUILD_USER_NAMEMyName此外 tools/jenkins/build-natron.sh 展示了官方构建农场使用的完整 qmake 参数形态qmake -r CONFIGrelease ... QMAKE_CC... QMAKE_CXX...并自动附加CONFIGenable-osmesa、CONFIGenable-cairo、CONFIGnoassertions CONFIGfastrelease 下等选项可作为自定义构建参数的风向标。使用 CMake 构建除了 qmake 外仓库也支持 CMake 构建Debian 系文档示例即采用该方式。根级 CMakeLists.txt 声明的关键选项包括NATRON_QT6默认 OFF设为 ON 时使用 Qt6 6.3 Shiboken6 PySide6 构建NATRON_SYSTEM_LIBS默认 OFF设为 ON 时改用系统版本的 glog、Ceres 等依赖而非仓库内置库NATRON_BUILD_TESTS默认 ON构建 Natron 测试套件。CMake 构建路径要求 Qt5 5.15find_package(Qt5 5.15 CONFIG REQUIRED ...)、Shiboken2 5.15 与 PySide2 5.15并要求find_package(Boost ... serialization)、find_package(Python3 ...)Linux 上还需 X11 与 Waylandfind_package(X11 REQUIRED)、find_package(Wayland COMPONENTS Client Egl)。典型流程mkdir ../build-Natron cd ../build-Natron cmake ../Natron make -j8 make testmake test会运行 Tests 下的测试套件CMake 顶层开启了enable_testing()仓库中已有Curve_Test、Hash64_Test、Image_Test、Lut_Test、Tracker_Test、OSGLContext_Test、FileSystemModel_Test、KnobFile_Test等测试源文件可对照。发行版专项Arch LinuxArch 系含 Manjaro有两种经过验证的编译方式AUR 或手动编译。方式一AURyay -S natron-compositor方式二手动编译先安装构建依赖。GCC、Expat、Boost 可直接从官方仓库安装sudo pacman -S expat boost-libs gcc还需要额外的 Boost 库、cairo 与 Qt5由 PySide2 提供sudo pacman -S boost cairo pyside2 python-pyqt然后克隆仓库并同步子模块git clone https://github.com/NatronGitHub/Natron cd Natron git submodule init git submodule update -i --recursive创建构建目录mkdir build cd build创建空的config.pri放在仓库根目录即../config.pri用编辑器按需修改。例如可以传入这类选项CONFIG custombuild CONFIG openmp DEFINES QT_NO_DEBUG_OUTPUTQt4 场景下把以下内容粘贴进空白的config.pri仓库中已有模板见 build-configs/arch-linux/config.pri其头部注释注明适用于 Arch、Manjaro、ArcoLinux、Hyperbola 等发行版# These are the lines you should paste into your empty config.pri boost: LIBS -lboost_serialization expat: LIBS -lexpat expat: PKGCONFIG - expat cairo { PKGCONFIG cairo LIBS - $$system(pkg-config --variablelibdir cairo)/libcairo.a } pyside { PKGCONFIG - pyside INCLUDEPATH $$system(pkg-config --variableincludedir pyside-py2) INCLUDEPATH $$system(pkg-config --variableincludedir pyside-py2)/QtCore INCLUDEPATH $$system(pkg-config --variableincludedir pyside-py2)/QtGui INCLUDEPATH $$system(pkg-config --variableincludedir QtGui) LIBS -lpyside-python2.7 } shiboken { PKGCONFIG - shiboken INCLUDEPATH $$system(pkg-config --variableincludedir shiboken-py2) LIBS -lshiboken-python2.7 }然后生成 Makefile 并编译。PREFIX/usr指定安装前缀BUILD_USER_NAME用于自定义构建${CFLAGS}等透传发行版的编译优化参数qmake -r ../Project.pro PREFIX/usr BUILD_USER_NAMEArch Linux CONFIGcustombuild CONFIGopenmp DEFINESQT_NO_DEBUG_OUTPUT QMAKE_CFLAGS_RELEASE${CFLAGS} QMAKE_CXXFLAGS_RELEASE${CXXFLAGS} QMAKE_LFLAGS_RELEASE${LDFLAGS}或改用 Clangqmake -r ../Project.pro -spec linux-clang PREFIX/usr BUILD_USER_NAMEArch Linux CONFIGcustombuild CONFIGopenmp DEFINESQT_NO_DEBUG_OUTPUT QMAKE_CFLAGS_RELEASE${CFLAGS} QMAKE_CXXFLAGS_RELEASE${CXXFLAGS} QMAKE_LFLAGS_RELEASE${LDFLAGS}最后编译make二进制位于build/App目录下启动方式./App/NatronDebian 系Ubuntu / Linux Mint / KDE Neon / ElementaryOS 等用apt-get或apt安装依赖在多数 Debian 系发行版上都能工作。Ubuntu 22.04Python 3.10 Qt 5.15sudo apt install build-essential libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev qt5-qmake qtbase5-dev python3-dev libshiboken2-dev libpyside2-dev python3-pyside2.qtwidgets python3-qtpyDebian 12sudo apt install qtbase5-dev libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev python3-dev python3-pyside2.qtcore libpyside2-dev libshiboken2-dev大多数 Debian/Ubuntu 系通用sudo apt install qt5base-dev libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev python3-dev python3-pyside2 libpyside2-dev libshiboken2-devQt4 场景下使用的config.priboost-serialization-lib: LIBS -lboost_serialization boost: LIBS -lboost_thread -lboost_system expat: LIBS -lexpat expat: PKGCONFIG - expat cairo: PKGCONFIG - cairo pyside: PYSIDE_PKG_CONFIG_PATH $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) pyside: PKGCONFIG pyside pyside: INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtCore pyside: INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtGui对于 Linux Mint还需要额外添加pyside { PYSIDE_PKG_CONFIG_PATH $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) PKGCONFIG pyside INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtCore INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtGui }获取源码与配置包注意此处示例使用Natron-v2.5的 OCIO 配置包git clone https://github.com/NatronGitHub/Natron cd Natron git submodule update -i --recursive wget https://github.com/NatronGitHub/OpenColorIO-Configs/archive/Natron-v2.5.tar.gz tar xzf Natron-v2.5.tar.gz mv OpenColorIO-Configs-Natron-v2.5 OpenColorIO-Configs使用 CMake 构建mkdir ../build-Natron cd ../build-Natron cmake ../Natron make -j8 make testFedora / RHEL 系适用于 Fedora、Red Hat Enterprise Linux 及其衍生版可用dnf或yum。RHEL 及衍生版需要先启用 EPEL 仓库yum install epel-release或dnf install epel-release安装所需软件包yum install fontconfig-devel gcc-c expat-devel python-pyside2-devel shiboken2-devel qt5-qtbase-devel boost-devel pixman-devel cairo-devel或dnf install fontconfig-devel gcc-c expat-devel python-pyside2-devel shiboken2-devel qt5-qtbase-devel boost-devel pixman-devel cairo-develQt4 场景下的config.priboost-serialization-lib: LIBS -lboost_serialization boost: LIBS -lboost_thread -lboost_system PKGCONFIG expat PKGCONFIG fontconfig cairo { PKGCONFIG cairo LIBS - $$system(pkg-config --variablelibdir cairo)/libcairo.a } pyside { PYSIDE_PKG_CONFIG_PATH $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) PKGCONFIG pyside INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtCore INCLUDEPATH $$system(env PKG_CONFIG_PATH$$PYSIDE_PKG_CONFIG_PATH pkg-config --variableincludedir pyside)/QtGui } shiboken { PKGCONFIG - shiboken INCLUDEPATH $$system(pkg-config --variableincludedir shiboken) LIBS -lshiboken-python2.7 }注意fontconfig与pixman也在依赖之列对应fontconfig-devel、pixman-devel软件包这正是 Fedora/RHEL 系与 Debian 系依赖清单的主要差异点。生成 Python 绑定一般情况下不需要手动生成 Python 绑定Qt5 构建时绑定文件会在编译过程中自动生成Qt4 构建所需的生成文件也已随仓库提交。只有在 Qt4 下需要扩展或修改Python 绑定时修改typesystem.xml文件才需要手动运行 shiboken。如果使用 Qt4 的 PySide命令行如下SDK_PREFIX/usr # /opt/Natron-sdk if using the Natron SDK PYSIDE_PREFIX/usr # /opt/Natron-sdk/qt4 if using the Natron SDK QT4 rm Engine/NatronEngine/* Gui/NatronGui/* shiboken --avoid-protected-hack --enable-pyside-extensions --include-paths../Engine:../Global:$SDK_PREFIX/include:$PYSIDE_PREFIX/include/PySide --typesystem-paths$PYSIDE_PREFIX/share/PySide/typesystems --output-directoryEngine/Qt${QT} Engine/Pyside_Engine_Python.h Engine/typesystem_engine.xml shiboken --avoid-protected-hack --enable-pyside-extensions --include-paths../Engine:../Gui:../Global:$SDK_PREFIX/include:$PYSIDE_PREFIX/include/PySide --typesystem-paths$PYSIDE_PREFIX/share/PySide/typesystems:Engine:Shiboken --output-directoryGui/Qt${QT} Gui/Pyside_Gui_Python.h Gui/typesystem_natronGui.xml tools/utils/runPostShiboken.sh Engine/Qt${QT}/NatronEngine natronengine tools/utils/runPostShiboken.sh Gui/Qt${QT}/NatronGui natrongui注意shiboken 有一些小瑕疵需要若干 sed 命令修复Qt4 下调用完 shiboken 后运行tools/utils/runPostShiboken.sh即可。两个 typesystem 描述文件分别是 Engine/typesystem_engine.xml引擎层绑定与 Gui/typesystem_natronGui.xmlGUI 层绑定对应的绑定入口头文件是 Engine/Pyside_Engine_Python.h 与 Gui/Pyside_Gui_Python.h。Qt5/PySide2 场景下tools/jenkins/build-natron.sh 中演示了等价的shiboken2 -stdc17 --avoid-protected-hack --enable-pyside-extensions ...调用链并随后用python3 tools/utils/sourceCleanup.py ...清理生成代码可作为对照参考。收尾与运行验证构建完成后参照 SDK 环境脚本tools/utils/natron-sdk-setup-linux.sh给出的运行姿势在启动前设置好运行时环境env FONTCONFIG_FILE$NATRON/Gui/Resources/etc/fonts/fonts.conf \ OCIO$NATRON/OpenColorIO-Configs/blender/config.ocio \ OFX_PLUGIN_PATH$HOME/OFX/Plugins \ NATRON_PLUGIN_PATH$NATRON/Gui/Resources/PyPlugs \ App/Natron其中OCIO指向 OpenColorIO-Configs 中的 blender 色彩管理配置即第 2 步下载并重命名到仓库根目录的目录OFX_PLUGIN_PATH指向编译好的 OFX 插件位置NATRON_PLUGIN_PATH指向仓库内置的 PyPlugs 目录Gui/Resources/PyPlugs。如需运行单元测试仓库已在 Tests 中提供了多个针对曲线、哈希、图像、LUT、跟踪器等模块的测试用例make test/make -C Tests即可直接验证构建产物的正确性。赞分享音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载相关推荐SuperCollider 在 Linux 上的完整构建与运行指南从 Flatpak 安装到 CMake 源码编译SuperCollider 在 Linux 上的完整构建与运行指南从 Flatpak 安装到 CMake 源码编译 导读 本文围绕 SuperCollider音频处理编程语言LuantiMinetest在 GNU/Linux 下从源码编译完整指南依赖、CMake 配置与构建运行LuantiMinetest在 GNU/Linux 下从源码编译完整指南依赖、CMake 配置与构建运行 本指南基于仓库 doc/compiling/li游戏开发图形学mlpack 在 Windows 上的源码构建指南CMake 与 Visual Studio 双路径详解mlpack 在 Windows 上的源码构建指南CMake 与 Visual Studio 双路径详解 本文面向希望在 Windows 上从源码构建 mlp人工智能机器学习深度学习上一篇完全掌握Balena Etcher从零开始的跨平台镜像烧录专业指南下一篇Elvish高级编程技巧闭包、高阶函数和函数式编程实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MCP协议实战:从零构建大模型工具调用标准化方案

MCP协议实战:从零构建大模型工具调用标准化方案

大模型再聪明,也有一件事干不了:它不知道你公司数据库里昨天新增了多少订单,不知道你本地那台服务器上某个服务的实时状态,更没法直接帮你把一条消息发到团队协作工具里。这不是模型能力不行,而是它的“活动范围”被锁…

2026/10/15 6:15:42 阅读更多 →
TensorFlow实用指南:从模型训练到生产部署的全链路解析

TensorFlow实用指南:从模型训练到生产部署的全链路解析

前阵子有个朋友问我,PyTorch 现在这么火,还有没有必要认真学 TensorFlow?我没直接回答,反问了他一个问题:你训练出来的模型,最终要部署到哪里?他愣了一下,说还没想过。这就是我写这篇…

2026/10/15 6:15:42 阅读更多 →
微电网日前经济调度Matlab建模与求解实战指南

微电网日前经济调度Matlab建模与求解实战指南

微电网经济调度这个话题,这几年关注的人越来越多。一方面是多能互补和分布式能源并网的项目在增加,另一方面是"风光储需求响应"这个组合提出来之后,很多做研究或者做工程的朋友都想知道,日前调度计划到底怎么排、成本能…

2026/10/15 6:15:42 阅读更多 →

最新新闻

SpringBoot+Vue轻量级博客系统设计与实现

SpringBoot+Vue轻量级博客系统设计与实现

1. 项目概述:SpringBootVue轻量级博客系统设计去年帮学弟评审毕业设计时,发现市面上很多博客系统要么功能冗余,要么扩展性差。于是我们决定用SpringBootVue搭建一个轻量级但五脏俱全的在线创作社区。这个系统最核心的特点是采用前后端分离架构…

2026/10/15 6:55:51 阅读更多 →
正念与心流:10分钟呼吸练习,让专注成为生命底色

正念与心流:10分钟呼吸练习,让专注成为生命底色

1. 先说清楚:我们到底在谈什么你有没有过这样的时刻:明明手头有一件重要的事要做,却忍不住五分钟刷一次手机;开会时脑子飘到晚上吃什么;想读几页书,眼睛盯着一行字,心里却已经把明天的待办事项过…

2026/10/15 6:55:51 阅读更多 →
Oracle 数据实时入仓 Doris 和 StarRocks 怎么做?CDC、全量迁移与 5 种方案对比

Oracle 数据实时入仓 Doris 和 StarRocks 怎么做?CDC、全量迁移与 5 种方案对比

在很多企业系统中,Oracle 负责在线事务处理,Doris 或 StarRocks 负责报表、数据分析和实时数据服务。当订单、用户、支付和日志数据持续增长时,直接在 Oracle 上运行复杂统计 SQL,可能影响线上业务。因此,很多团队会建…

2026/10/15 6:55:51 阅读更多 →
SpringBoot+Vue+MyBatis构建企业级电商平台实战

SpringBoot+Vue+MyBatis构建企业级电商平台实战

1. 项目概述"企业级网购平台管理系统"是一个基于SpringBootVueMyBatis技术栈的完整电商解决方案。这套源码包含了电商平台的核心功能模块,采用前后端分离架构设计,数据库使用MySQL,适合快速构建中小型B2C或B2B电商平台。我在实际电…

2026/10/15 6:55:51 阅读更多 →
聚簇索引vs非聚簇索引:从底层原理到实战避坑全解析

聚簇索引vs非聚簇索引:从底层原理到实战避坑全解析

做后端开发这几年,索引相关的坑我踩过不少。面试被问过无数次“聚簇索引和非聚簇索引区别”,带新人的时候也发现,大部分同学对这两个词的理解停留在“一个有序一个无序”或者“聚簇索引就是主键”这种模糊层面。一旦落到实际业务,…

2026/10/15 6:55:51 阅读更多 →
盲盒商城软件开发案例:连接概率说明、微信支付、在线开赏与积分兑换

盲盒商城软件开发案例:连接概率说明、微信支付、在线开赏与积分兑换

盲盒商城的购买过程与普通商品商城有所不同。用户在付款前,需要了解盲盒价格、可抽取内容和相关规则;完成支付后,再进入开赏环节。商品展示、概率说明、支付结果和积分记录之间,需要形成清晰的操作顺序。 某公司的这套盲盒商城软件…

2026/10/15 6:54:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →