首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为私有Python构建安装pyuno (LibreOffice)

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

Stack Overflow用户
提问于 2013-03-05 11:58:06
回答 4查看 5.3K关注 0票数 5

关于这个话题,这里 ad 这里有一些相关的线索,但它们似乎有点过时。

我刚刚下载了LibreOffice 4,它内置了Python3.3.0。使用该Python,我可以很好地导入和使用UNO,并从Python脚本中控制Office。然而,我的许多其他模块在Python中丢失了--而UNO是我的Python中唯一缺少的模块。

有任何方法可以为本地Python安装pyuno吗?LibreOffice源代码树包括一个pyuno/ source树,但我不知道如何构建/集成到另一个pyuno树中。

这里有什么经验吗?帮助?暗示?Dos,不要,Dohs?

编辑 回答如下在Linux上工作得很好,我在那里没有问题,把PYTHONPATH扩展到导入uno。Mac上的情况不同,所以请看一下另一个答案

编辑在修改这条路径时绝对会考虑到这条

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-16 01:05:31

Linux

这个线程的迪尔克霍特的回答在Linux上工作得很好。

Mac (约塞米蒂)

这里的情况要复杂一些,到LibreOffice 4.3时,我仍然无法将PYTHONPATH扩展到LibreOffice和import uno,而不会在Mac上崩溃:

代码语言:javascript
复制
localhost ~ > PYTHONPATH=$PYTHONPATH:/Applications/LibreOffice64.app/Contents/MacOS python3.3
Python 3.3.6 (default, Nov 12 2014, 18:18:46) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
Segmentation fault: 11

但这才是对我有用的。首先,我必须确保Python和我的LibreOffice都是为32b或64b构建的;它们不能混合使用。我正在使用64b MacPorts Python3.3和64b LibreOffice for Mac (下载链接),后者是Python3.3附带的。其次,我必须确保正确运行Python并正确地扩展PYTHONPATH。由于我无法运行MacPorts Python并使用LibreOffice对其进行扩展,所以我必须采取相反的方法:运行LibreOffice Python并使用LibreOffice路径扩展它:

代码语言:javascript
复制
localhost ~ > PYTHONPATH=$PYTHONPATH:/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages /Applications/LibreOffice64.app/Contents/MacOS/python
Python 3.3.5 (default, Dec 12 2014, 10:33:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
>>> import lxml
>>> 

注意uno是如何从LibreOffice的Python导入的,lxml是如何使用MacPort的。

票数 0
EN

Stack Overflow用户

发布于 2015-02-18 20:36:06

一旦您尝试在任何其他python可执行文件上运行PyUNO,而不是LO提供的可执行文件,事情就会变得很艰难。

Mac上的SEGV是因为LO的@loader_path/LibreOfficePython.framework/Versions/3.3/LibreOfficePython (通过libuno.dylib加载,然后通过“导入uno”加载)引用了该文件(在该文件上运行"otool -L“;路径与当前的LO主版相同;路径在不同的LO版本上略有不同)。当从与LO不同的python进程运行时,这意味着进程中将有两个python运行时(可能还没有正确初始化),这将导致LibreOfficePython中某个位置的SEGV。(这在Linux上运行得更好,libpyuno.so引用了libpython3.3m.so,通常通过它的RPATH找到LO python的旁边,但是如果任何libpython3.3m.so碰巧已经加载到进程中(来自另一个python),那么Linux加载程序会很高兴地重新使用这个libpython3.3m.so。)

Mac上的一个大问题是使用install_name_tool“重新连接”libpyuno.dylib,以引用另一个Python的Python.framework/Versions/3.3/Python (通过绝对路径),而不是引用libpyuno.dylib

另一个缺点是LO的python (在Linux和Mac上)实际上是一个shell脚本,围绕着真正的python可执行文件。它需要设置许多env (它的目的甚至在脚本中被记录下来)。要使PyUNO从不同的python中运行,您也需要设置这些env,尤其是。UNO_PATH、URE_BOOTSTRAP和PYTHONPATH中找到特定于LO的库的部分(而不是与python本身一起提供的库)。请注意,在LO版本中,这些env值的细节有所不同。

票数 4
EN

Stack Overflow用户

发布于 2013-10-03 11:54:06

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

代码语言:javascript
复制
bash> export PYTHONPATH=${PYTHONPATH}:/usr/lib/libreoffice/program
bash> python
>>> import uno

一个要求是您的LibreOffice/OO具有与常规版本相同的版本: python将把.py编译成.pyc,并且这种格式在不同版本之间是不可转换的(至少不能保证)。

如果您不确定您的文件在哪里,请执行locate uno.py。检查/usr/bin/libreoffice链接到的位置也可能有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15223209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档