让Python导入uno / pyuno

5 投票
2 回答
8800 浏览
提问于 2025-04-18 14:49

我今天整天都在找解决办法,但就是找不到能用的,只找到一些过时或根本不管用的信息。

我其实是想在Python里做到一个“你好,世界”的简单例子,这样我就可以开始用数据库里的数据来编程生成文档页面。

我试着安装了LibreOffice和OpenOffice。我把它们安装在默认位置(在Windows 7上是C:\Program Files (x86)\LibreOffice 4,Ubuntu 14上也是用的默认路径/usr/lib/libreoffice)。

我在sdk文件夹里的bat脚本上遇到了麻烦,所以我甚至试着在没有空格的基础目录c:\libreoffice里重新安装Windows版本。

我尝试了很多方法来改变PYTHON PATH的设置,还安装了不同版本的Python。

有没有人能给我点建议,怎么才能让Python设置好,以便制作OpenOffice文档?我只想顺利通过'import uno'这句,而不出现导入错误?我知道这可能是个小问题,但我完全不知道该怎么办。

提前谢谢大家。

编辑:
我遇到的错误是标准的模块未找到错误,不管我是在本地版本的Python里打开,还是在LibreOffice文件夹里的Python里打开,都会出现这个错误:

C:\Libreoffice\program\python-core-3.3.3\bin>python
Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:18:40) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'uno'

编辑2:
我在找到程序文件夹里的uno.py后,解决了'uno'的问题。我把它添加到了我的Python路径里,uno也加载成功了。不过,现在我遇到了另一个错误:

Traceback (most recent call last):
  File "C:\Users\Alex\workspace\OOTest\test\test.py", line 7, in <module>
    import uno
  File "C:\Libreoffice\program\uno.py", line 21, in <module>
    import pyuno
ImportError: DLL load failed: The specified module could not be found.

我做了搜索,找到了以下内容:

C:\Libreoffice>find|grep pyuno*
./program/pyuno.pyd
./program/services/pyuno.rdb
./share/registry/pyuno.xcd

我试着把程序文件夹添加到我的Windows路径里(已经在Python路径里),但仍然出现同样的错误。

有没有关于如何加载pyuno的建议?

2 个回答

0

我有一个在Windows上使用的解决方案。在Windows系统中,你可以为一个文件夹创建一个符号链接。

在命令提示符下输入:

mklink /J "C:\Users\YourUserXXXX\AppData\Local\Programs\Python\Python310\Lib\Uno\" "C:\Program Files (x86)\OpenOffice 4\program\"

这样就会在OpenOffice的文件夹和你指定的Python库文件夹之间创建一个符号链接。

这样一来,Python就能在环境中找到这个库了,路径是:

C:\Users\YourUserXXXX\AppData\Local\Programs\Python\Python310\Lib\

1

为了从不同的 Python 运行 uno,我发现需要设置三个值。在 Windows 7 上,你可以将这三个值作为用户自定义的环境变量设置到用户账户里。设置完后,记得注销再登录,这样它们才能生效。

经过一些尝试和错误,我找到了以下解决方案。

在你的 Python 安装目录下的 lib\site-packages 文件夹里,添加一个名为 OpenOffice.pth 的文件,里面写上你安装的子文件夹程序的路径,比如:

content of OpenOffice.path:
C:\Program Files (x86)\OpenOffice.org 4\basis\program

我在 Windows 7 上用 Python 2.7 时,没办法在脚本里直接设置这个值,所以我选择使用 .pth 文件。对于 OpenOffice 3.x,路径应该是 C:\Program Files (x86)\OpenOffice.org 3\basis\program。

import os
os.environ["URE_BOOTSTRAP"] = r"vnd.sun.star.pathname:C:\Program Files (x86)\OpenOffice 4\program\fundamental.ini"
os.environ["PATH"] += r";C:\Program Files (x86)\OpenOffice 4\program"
import uno

在你的脚本中,需要设置两个环境变量,一个指向 fundamental.ini,另一个指向 \program 子文件夹。

对于 OpenOffice 3.x,第二个环境变量应该像这样设置:

os.environ["PATH"] += r";C:\Program Files (x86)\OpenOffice.org 3\URE\bin"

当然,你需要根据自己的安装情况来修改这些路径。如果你在同一台机器上运行不同版本的 OpenOffice 或 LibreOffice,建议在导入 uno 后立即去掉 BOOTSTRAP,因为这会导致冲突。

os.environ.pop("URE_BOOTSTRAP")

重要提示!

这个方法只适用于你的 Python 版本和 OpenOffice 自带的 Python 版本相同,也就是说:

OpenOffice 3.x 对应 Python 2.6

OpenOffice 4.x 对应 Python 2.7

LibreOffice 4.x 对应 Python 3.3

撰写回答