环境信息:我的Ubuntu版本是Ubuntu 22.04.1 LTS,安装的LibreOffice版本是7.3.7。
我到/usr/lib/libreoffice/program找不到LibreOffice自带的python解释器二进制文件(在windows下是能找到的)。
-
用各种命令查找没有查找到。其它目录中倒是有python解释器,但用dpkg -S <文件全路径>命令查看,也不是LibreOffice包引起的安装。
-
到Ubuntu包仓库中http://cn.archive.ubuntu.com/ubuntu/pool/universe/libr/libreoffice/查找,看看有哪些包中可能含有,就用sudo
apt install安装,尝试了一遍,没有。 -
用sudo apt install unoconv安装了unoconv这个包。unoconv是调用LibreOffice进行文档转换的。安装后尝试对一篇docx文档转换为pdf,可以正常转换。于是打开文件/usr/bin/unoconv查看别人的源代码,看别人到底使用的是哪边的python解释器。文件开头的一行代码如下:
#!/usr/bin/env python3
说明它调用的是Ubuntu系统自己安装的python解释器。我将unoconv保存为另外一个文件,方便我随便修改调试。我在代码的有些地方用print语句打印,确信它使用的就是Ubuntu自带的python解释器。再看它的代码,在import uno之前,使用sys.path.append修改导包搜索路径,防止找不到uno所在的路径,在我的机器上是/usr/lib/python3/dist-packages/uno.py
### Main entrance
if __name__ == '__main__':
exitcode = 0
#info(3, 'sysname=%s, platform=%s, python=%s, python-version=%s' % (os.name, sys.platform, sys.executable, sys.version))
for of in find_offices():
print("basepath:",of.basepath)
print("urepath:",of.urepath)
print("unopath:",of.unopath)
print("officelibrary:",of.pyuno)
print("officebinary:",of.binary)
print("python:",of.python)
print("pythonhome:",of.pythonhome)
- 我于是单独执行python3,启动Ubuntu自带的python解释器,将sys.path的执行结果打印出来,里边有UNO的路径:
经过一顿折腾,总算明白了Ubuntu下原来是可以调用系统的python解释器来访问LibreOffice的,只不过要关注UNO的所在路径是否在导包搜索路径中。