【问题标题】:Execute makensis from python on linux在 Linux 上从 python 执行 makensis
【发布时间】:2025-12-16 20:05:02
【问题描述】:

我已经在 linux 上编译了 makensis。从这样的 bash shell 执行时效果很好。

makensis /path/to/setup.nsi

我想使用 python 脚本来执行它。我尝试了以下方法:

#using the symlink in /usr/bin
subprocess.call("makensis setup.nsi")

#absolute path to makensis executable
subprocess.call("/usr/share/makensis/makensis setup.nsi")

#Change directory
os.chdir("/usr/share/makensis")
subprocess.call("makensis setup.nsi")

我也尝试将 cwd arg 传递给 subprocess.call。

在所有这些情况下,makensis 都无法找到它的依赖项。它正在查看 /usr/bin/ 并抛出此错误:

Error: opening stub "/usr/bin/Stubs/zlib"

我不确定这是否是我的 python 脚本或 makensis 编译方式的问题。我倾向于认为它是 python 脚本,因为 makensis 在 bash shell 中可以正常工作。任何指针都非常感谢。

编辑: 这是我用来构建 nsis 的 scons 命令:

scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all NSIS_CONFIG_CONST_DATA_PATH=no PREFIX=/usr/share/ APPEND_CCFLAGS=-m32 APPEND_LINKFLAGS=-m32 install-compiler

【问题讨论】:

  • 如果您发布用于构建 NSIS 的 scons 命令会有所帮助...
  • 只是让您知道,现在可以在 Posix 上交叉编译存根和插件...
  • @Anders 感谢您的提醒。有文档链接吗?
  • 可能类似于 'scons XGCC_W32_PREFIX=i686-w64-mingw32-' (forums.winamp.com/showpost.php?p=2985008&postcount=5)

标签: python nsis


【解决方案1】:

我们广泛使用 NSIS,但我从未想过尝试在 posix/unix 平台上运行它。无论如何,我检查了一下(因为我总是对更多 NSIS 配置感兴趣),并找到了这个链接——它专门识别你的问题并包括解决方案

http://wiki.koshatul.com/Installing_Nullsoft_Scriptable_Installer_System_%28NSIS%29_on_BSD#Error:_opening_stub_.22.2Fusr.2Flocal.2Fbin.2FStubs.2Fzlib.22

删除 NSIS_CONFIG_CONST_DATA_PATH=no 如果你有它 scons 线,检查路径是否也适合建造。

【讨论】:

  • 感谢您的指点。我曾假设如果这是不正确的,它也不会从命令行工作。我会尝试用不同的路径选项重建它。
  • 使用该链接中的 scons 命令可以解决问题。谢谢。使用链接中的选项,您需要手动将 Contrib、Include、Plugins 和 Stubs 文件夹放入 /usr/local/share/nsis。