编程语言
首页 > 编程语言> > 为私有Python构建安装pyuno(LibreOffice)

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

作者:互联网

有关此主题的一些相关主题herehere,但它们似乎有点过时了.

我刚刚下载了内置Python 3.3.0的LibreOffice 4.使用Python我可以很好地导入和使用UNO,并从我的Python脚本控制Office.但是,我的许多其他模块都没有从Python中丢失 – 而UNO是我的Python中唯一缺少的模块.

有什么方法可以为我的本地Python安装pyuno吗? LibreOffice源代码树包含一个pyuno / source树,但我不知道如何构建/将其集成到另一个Python树中.

这里有经历吗?救命?提示? Dos,Don’ts,Dohs?

编辑answer below适用于Linux,我没有问题扩展PYTHONPATH导入uno. Mac上的问题有所不同,所以请看the other answer.

编辑当修补Python路径时,绝对要考虑this anwer

解决方法:

一旦你尝试运行PyUNO关闭任何其他python可执行文件而不是LO提供的可执行文件,事情就会变得粗糙.

Mac上的SEGV是因为LO的libpyuno.dylib(通过libuno.dylib加载,后者通过“import uno”加载)引用@ loader_path / LibreOfficePython.framework / Versions / 3.3 / LibreOfficePython(在其上运行“otool -L”) file;当前LO主站的路径;各种LO版本的路径略有不同).当从与LO不同的python进程运行时,这意味着在该进程中将有两个python运行时(并且LO可能甚至没有正确初始化),并且导致在LibreOfficePython中的某个地方出现SEGV. (这恰好在Linux上工作得更好,其中libpyuno.so引用libpython3.3m.so,并且通常通过其RPATH发现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脚本.它需要设置一些env变量(其目的甚至记录在脚本中).为了使PyUNO能够从不同的python中运行,你也需要设置这些env变量,尤其是. UNO_PATH,URE_BOOTSTRAP和PYTHONPATH的部分找到了特定于LO的库(而不是那些随python本身提供的库).请注意,LO版本中这些env vars值的详细信息不同.

标签:libreoffice,python,uno
来源: https://codeday.me/bug/20190825/1723355.html