一旦您尝试从LO提供的python可执行文件以外的任何其他python可执行文件运行PyUNO,事情就会变得很棘手。在
Mac上的SEGV是因为LO的libpyuno.dylib(通过加载李伯诺.dylib,然后通过“import uno”)引用@loader_path加载/LibreOfficePython.framework/Versions/3.3/LibreOfficePython(对该文件运行“otool-L”;路径与当前LO主机相同;不同LO版本的路径略有不同)。当从与LO不同的python进程运行时,这意味着该进程中将有两个python运行时(LO的一个甚至可能没有正确初始化),这将导致LibreOfficePython中的某个地方出现SEGV。(这在Linux上运行得更好利比乌诺引用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/libreofficeptithon.图书馆。在
另一个问题是LO的python(在Linux和Mac上)实际上是一个围绕真正的python可执行文件的shell脚本。它需要设置许多env-vars(它们的用途甚至在脚本中有记录)。为了让PyUNO在不同的python上工作,您还需要设置这些env变量,特别是UNO_nupath、URE_BOOTSTRAP和PYTHONPATH中找到特定于LO的lib的部分(而不是python本身附带的那些lib)。请注意,这些env vars值的细节在LO版本中有所不同。在