You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandoc-lua无法加载系统级Lua socket模块的问题排查求助

解决Pandoc内嵌Lua加载LuaSocket模块的问题

问题重现

在Debian测试版系统中:

  • 普通Lua 5.4.4可正常加载socket模块:
    Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
    > require('socket')
    table: 0x55edf33e82d0   /usr/share/lua/5.4/socket.lua
    
  • 但Pandoc 3.1.3内嵌的同版本Lua无法加载,报错模块未找到:
    Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
    Embedded in pandoc 3.1.3
    > require('socket')
    stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file '/usr/local/share/lua/5.4/socket.lua'
        no file '/usr/local/share/lua/5.4/socket/init.lua'
        no file '/usr/local/lib/lua/5.4/socket.lua'
        no file '/usr/local/lib/lua/5.4/socket/init.lua'
        no file './socket.lua'
        no file './socket/init.lua'
        no file '/usr/local/lib/lua/5.4/socket.so'
        no file '/usr/local/lib/lua/5.4/loadall.so'
        no file './socket.so'
    stack traceback:
        stdin:1: in main chunk
    
  • 修改package.path后,又出现socket.core(LuaSocket的C扩展模块)找不到的错误:
    > package.path = package.path .. ';/usr/share/lua/5.4/?.lua'
    > require('socket')
    /usr/share/lua/5.4/socket.lua:12: module 'socket.core' not found:
        no field package.preload['socket.core']
        no file '/usr/local/share/lua/5.4/socket/core.lua'
        no file '/usr/local/share/lua/5.4/socket/core/init.lua'
        no file '/usr/local/lib/lua/5.4/socket/core.lua'
        no file '/usr/local/lib/lua/5.4/socket/core/init.lua'
        no file './socket/core.lua'
        no file './socket/core/init.lua'
        no file '/usr/share/lua/5.4/socket/core.lua'
        no file '/usr/local/lib/lua/5.4/socket/core.so'
        no file '/usr/local/lib/lua/5.4/loadall.so'
        no file './socket/core.so'
        no file '/usr/local/lib/lua/5.4/socket.so'
        no file '/usr/local/lib/lua/5.4/loadall.so'
        no file './socket.so'
    stack traceback:
        /usr/share/lua/5.4/socket.lua:12: in main chunk
        [C]: in function 'require'
        stdin:1: in main chunk
    

问题原因

Pandoc内嵌Lua的默认package.path(Lua脚本搜索路径)和package.cpath(C扩展模块搜索路径)未包含Debian系统Lua库的标准安装路径,仅搜索/usr/local和当前目录,而LuaSocket的脚本存于/usr/share/lua/5.4/,C扩展存于/usr/lib/lua/5.4/。

解决方法

方法1:在Lua过滤器中直接配置路径

在过滤器代码开头添加路径设置,同时更新package.path和package.cpath:

-- 追加LuaSocket脚本路径
package.path = package.path .. ';/usr/share/lua/5.4/?.lua'
-- 追加LuaSocket C扩展路径
package.cpath = package.cpath .. ';/usr/lib/lua/5.4/?.so'

-- 正常加载socket模块
local socket = require('socket')

方法2:通过环境变量全局配置

在启动Pandoc前设置环境变量,避免在每个过滤器中重复配置:

export LUA_PATH="$LUA_PATH;/usr/share/lua/5.4/?.lua"
export LUA_CPATH="$LUA_CPATH;/usr/lib/lua/5.4/?.so"
# 运行Pandoc过滤器
pandoc --lua-filter your-filter.lua input.md -o output.pdf

验证路径正确性

如果不确定C扩展的具体路径,可在普通Lua中执行以下命令获取:

-- 查看系统Lua的C模块搜索路径
print(package.cpath)
-- 查看socket.core的实际位置
local core = require('socket.core')
print(core)

注意事项

  • 确保系统已安装lua-socket包,Debian下可通过sudo apt install lua-socket完成安装。
  • 若仍无法加载,需确认Pandoc的Lua编译时是否启用了动态链接支持(Debian官方包通常默认启用)。

内容的提问来源于stack exchange,提问作者lrtpzd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:40:03