为私人Python构建安装pyuno(LibreOffice)

问题描述 投票:3回答:4

有一些与此主题herehere相关的主题,但看起来有些过时。

我刚刚下载了内置有Python 3.3.0的LibreOffice4。使用该Python,我可以很好地导入和使用UNO,并通过我的Python脚本控制Office。但是,该Python缺少我的许多其他模块-UNO是我的Python唯一缺少的模块。

有什么方法可以为本地Python安装pyuno? LibreOffice源代码树包括一个pyuno /源代码树,但是我不确定如何将其构建/集成到另一个Python树中。

这里有经验吗?救命?提示?是,不是,Dohs?

EDIT answer below在Linux上工作正常,并且我对扩展PYTHONPATH导入uno没问题。在Mac上,情况有所不同,因此请查看the other answer

EDIT修补Python路径时,绝对要考虑this anwer

python libreoffice uno
4个回答
4
投票

一旦您尝试从LO提供的Python可执行文件以外的任何其他python可执行文件运行PyUNO,事情的确会变得很粗糙。

在Mac上,SEGV是因为LO的libpyuno.dylib(通过libuno.dylib加载,而后者又通过“ import uno”加载)引用@ loader_path / LibreOfficePython.framework / Versions / 3.3 / LibreOfficePython(运行“ otool -L”该文件;路径与当前LO主设备上的路径相同;各种LO版本上的路径略有不同)。当从不同于LO的python进程运行时,这意味着该进程中将有两个python运行时(并且LO甚至没有正确初始化),这会导致LibreOfficePython中出现SEGV。 (这在Linux上效果更好,在Linux上libpyuno.so引用了libpython3.3m.so,通常可以通过其RPATH找到LO python自身旁边的LO python,但是如果有任何libpython3.3m.so恰好已经加载到了进程中(来自另一个python),Linux加载程序愉快地重用了那个。)

Mac上的一个重大漏洞是使用install_name_tool“重新连接” libpyuno.dylib来引用另一个python的Python.framework / Versions / 3.3 / Python(通过绝对路径),而不是@ loader_path / LibreOfficePython.framework / Versions / 3.3 / LibreOfficePython。

[另一个陷阱是,LO的python(在Linux和Mac上)实际上是真正的python可执行文件的shell脚本。它需要设置多个环境变量(其目的甚至在脚本中都有记录)。为了使PyUNO可以从其他python运行,您还需要设置这些环境变量,尤其是。 UNO_PATH,URE_BOOTSTRAP以及PYTHONPATH的部分,这些部分可找到LO特定的库(而不是python本身随附的库)。请注意,这些环境变量值的详细信息在LO版本之间有所不同。


2
投票

这是一个较晚的答案,我没有与您完全相同的设置,但是对我来说,我可以简单地调整PYTHONPATH以便python知道uno.py所在的目录。


0
投票

Linux


0
投票

我最近想在django中使用pyuno(即我在电子表格中有一个定价引擎,而django应用程序打开了它,填充了用户输入,并在重新计算后检索了价格)。唯一合理的解决方案是在您正在使用的任何平台上使用docker容器或linux vm(我在Mac上,对Ubuntu机器使用并行)。任何其他解决方案都会浪费大量时间。

© www.soinside.com 2019 - 2024. All rights reserved.