Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为私有Python构建安装pyuno(LibreOffice)_Python_Libreoffice_Uno - Fatal编程技术网

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

为私有Python构建安装pyuno(LibreOffice),python,libreoffice,uno,Python,Libreoffice,Uno,关于这个主题广告有一些相关的线索,但它们似乎有点过时了 我刚刚下载了libreoffice4,它内置了python3.3.0。使用该Python,我可以很好地导入和使用UNO,并从Python脚本控制Office。但是,Python中缺少了许多其他模块,UNO是Python中唯一缺少的模块 有没有办法为我的本地Python安装pyuno?LibreOffice源代码树包括一个pyuno/source树,但我不确定如何将其构建/集成到另一个Python树中 在这里有什么经验吗?帮忙?提示?做,不做

关于这个主题广告有一些相关的线索,但它们似乎有点过时了

我刚刚下载了libreoffice4,它内置了python3.3.0。使用该Python,我可以很好地导入和使用UNO,并从Python脚本控制Office。但是,Python中缺少了许多其他模块,UNO是Python中唯一缺少的模块

有没有办法为我的本地Python安装pyuno?LibreOffice源代码树包括一个pyuno/source树,但我不确定如何将其构建/集成到另一个Python树中

在这里有什么经验吗?帮忙?提示?做,不做,做

EDIT对于Linux来说效果很好,扩展
PYTHONPATH
导入uno也没有问题。Mac上的情况是不同的,所以看看


编辑在修补Python路径时绝对要考虑到这一点

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

bash> export PYTHONPATH=${PYTHONPATH}:/usr/lib/libreoffice/program
bash> python
>>> import uno
一个要求是您的LibreOffice/oopython具有与常规版本相同的版本:python将.py编译为.pyc,并且该格式在版本之间不可转换(至少,这是不保证的)

如果不确定文件的位置,请执行
查找uno.py
。检查
/usr/bin/libreoffice
链接的位置也会有所帮助

Linux

这个线程在Linux上非常有效

Mac(约塞米蒂)

这里的事情有点棘手,从libreoffice4.3开始,我仍然无法将我的
PYTHONPATH
扩展到LibreOffice和
import uno
而不在Mac上崩溃:

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构建的;他们不能混在一起。我正在使用Python3.3附带的64b MacPorts和64b LibreOffice for Mac()。其次,我必须确保运行正确的Python并正确扩展
PYTHONPATH
。因为我不能运行MacPorts Python并用LibreOffice的路径扩展它,所以我必须用另一种方法:运行LibreOffice Python并用我的MacPorts Python路径扩展它:

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的Python路径中的。

一旦您尝试在除LO之外的任何其他Python可执行文件上运行PyUNO,事情就会变得很艰难

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

Mac上的一个严重漏洞是使用install_name_工具“重新布线”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的lib的部分(而不是python本身附带的那些)。请注意,这些env Var值的详细信息在LO版本中有所不同。

我最近想将pyuno与django一起使用(即,我在电子表格中有一个定价引擎,django应用程序将其打开,填写用户输入,并在重新计算后检索价格)。唯一合理的解决方案是在任何平台上使用docker容器或linux虚拟机(我在mac上,在ubuntu机器上使用parallels)。任何其他解决方案都是对时间的巨大浪费


在linux环境中,只需运行
apt get install python3 uno
,并将python路径设置为
$PYTHONPATH:/usr/lib/python3/dist packages/
(即apt get在哪里安装python3 uno,一切都会正常(仅在linux环境中).

我在Ubuntu 13.04中有LibreOffice 4,但在任何工具宏子菜单中都没有提到Python。你的工具宏子菜单中有Python吗?不确定Ubuntu,但在我的Mac电脑上,Python解释器是/Applications/LibreOffice.app/Contents/MacOS包的一部分。UNO包装器位于同一文件夹中。它都是LibreOffice包的一部分。Re拉特:这在Linux上运行得很好,我甚至可以混合使用Py 3.3和Py 3.4。(也许我是在如履薄冰上行走,但到目前为止一直有效:-)是的,我是在如履薄冰上行走,它坏了。不要混用Python版本!聪明的解决方案。作为一个次要的注释,我总是扩展
PYTHONPATH
,而不是像您那样设置它。总有一天你会在最不经意的时候弄坏一些东西。你是说
import uno
在Linux上运行纯粹是愚蠢的运气吗?如果这是正确的,那么听起来最好使用LO-Python并围绕它设置一个venv?是的,幸运的是。PyUNO不是设计用来处理任意的