5

这里有一些关于这个主题的相关主题,它们似乎有点过时了。

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

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

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

编辑下面的答案PYTHONPATH适用于 Linux,我在那里扩展导入 uno没有问题。Mac 上的情况有所不同,因此请查看其他答案

编辑在修改 Python 路径时绝对考虑到这个问题!

4

4 回答 4

4

一旦您尝试从任何其他 Python 可执行文件(而不是 LO 提供的可执行文件)运行 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 上工作得更好,其中 libpyuno.so 引用 libpython3.3m.so,并且通常通过其 RPATH 找到 LO python 的旁边,但如果任何 libpython3.3m.so 恰好已经加载到进程中(来自另一条蟒蛇),

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 版本之间有所不同。

于 2015-02-18T20:36:06.550 回答
2

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

bash> export PYTHONPATH=${PYTHONPATH}:/usr/lib/libreoffice/program
bash> python
>>> import uno

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

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

于 2013-10-03T11:54:06.513 回答
1

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

当您在 linux 环境中时,您所要做的就是运行apt-get install python3-uno并将您的 python 路径设置为$PYTHONPATH:/usr/lib/python3/dist-packages/(即 apt-get 安装 python3-uno 的位置,一切都会好起来的(仅在 linux 环境中)。

于 2019-12-05T04:22:38.043 回答
0

Linux

dirkjot对此线程的回答在 Linux 上效果很好。

麦克(优胜美地)

这里的事情有点棘手,从 LibreOffice 4.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 构建的;它们不能混合。我正在使用 Python 3.3 附带的 64b MacPorts Python 3.3 和 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 路径中。

于 2015-01-16T01:05:31.697 回答