LibreOffice Python已装pymodbus但APSO中导入失败求助
问题描述
- 系统环境:Win7/64位
- LibreOffice版本:7.4(内置Python-core-3.8.14)
- 已安装APSO扩展
操作流程:
- 将
get-pip.py放入LibreOffice程序目录,完成pip安装 - 使用该pip安装pymodbus,执行
pip list确认模块已安装,且文件存在于site-packages目录
异常情况:在APSO中运行脚本from pymodbus.client.sync import ModbusTcpClient时,触发ImportError:
<class 'ImportError'>: No module named 'pymodbus.client.sync' (or 'pymodbus.client.sync.ModbusTcpClient' is unknown) File "C:\Program Files (x86)\misc\LibreOffice\program\pythonscript.py", line 1057, in getScript mod = self.provCtx.getModuleByUrl( fileUri ) File "C:\Program Files (x86)\misc\LibreOffice\program\pythonscript.py", line 494, in getModuleByUrl exec(code, entry.module.__dict__) File "C:\Program Files (x86)\misc\LibreOffice\share\Scripts\python\MyTestScript.py", line 8, in <module> from pymodbus.client.sync import ModbusTcpClient File "C:\Program Files (x86)\misc\LibreOffice\program\uno.py", line 425, in _uno_import raise uno_import_exc File "C:\Program Files (x86)\misc\LibreOffice\program\uno.py", line 346, in _uno_import return _builtin_import(name, *optargs, **kwargs)
用户在其他Python 3.8环境中可正常使用该模块,首次在LibreOffice环境遇到此问题。
原因分析
- 路径识别问题:LibreOffice内置Python的
sys.path未包含pymodbus所在的site-packages目录,导致解释器无法定位模块 - pip环境混淆:安装时可能误使用了系统全局pip,而非LibreOffice内置Python对应的pip,导致模块安装到了错误的路径
- 版本兼容问题:pymodbus v2.0及以上版本已重构模块结构,同步客户端路径从
pymodbus.client.sync调整为pymodbus.client,若LibreOffice中安装的是新版本,旧导入语句会失效
解决办法
方法1:手动添加模块搜索路径
- 在APSO中运行以下脚本,查看当前Python的模块搜索路径:
import sys print(sys.path)
- 找到pymodbus所在的site-packages目录(例如
C:\Program Files (x86)\misc\LibreOffice\program\Lib\site-packages),若该路径不在输出列表中,在导入pymodbus前手动添加:
import sys sys.path.append("你的site-packages实际路径") from pymodbus.client.sync import ModbusTcpClient
方法2:用LibreOffice内置Python重新安装模块
- 打开命令提示符,切换到LibreOffice的program目录:
cd "C:\Program Files (x86)\misc\LibreOffice\program"
- 使用内置Python执行pip安装pymodbus,确保模块安装到正确路径:
python.exe -m pip install pymodbus
方法3:适配新版本pymodbus的导入语句
若LibreOffice中安装的是pymodbus v2.0及以上版本,修改导入语句为:
from pymodbus.client import ModbusTcpClient
(同步客户端已整合到主client模块,无需指定.sync子路径)
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

