4

我有一个运行 SUSE Enterprise Server 11 的客户,我想在其上使用一个带有 OpenOffice-Python-Bridge 的 django-project,名为PyUNO. 它运行 apache2mod_wsgi并且没有 virtualenv 或其他东西。

我将相关路径添加到 PYTHONPATH,但是当我运行 shellpython manage.py shell并尝试import uno时,我收到此错误:

dynamic module not initialized properly

它是 OpenOffice 3.4、python 2.6.x(均来自 SUSE-DVD)。

谷歌把我带到了一个 system-variable LD_LIBRARY_PATH,但是一旦我设置它,我就无法再启动 shell,因为 python 再也找不到 django (PYTHONPATH 似乎以某种方式被破坏了)。如果我运行ldconfig -v /path/to/openoffice/program/另一个常见的提议,结果是一样的。

完成上述一项操作后,我可以运行系统范围的 python 并导入 uno。但是我不能再运行 django-shell 因为 django 没有找到。

如果我重置 LD_LIBRARY_PATH (通过unset LD_LIBRARY_PATHldconfig),我会遇到“旧”情况。

OpenOffice 捆绑了一个 python 二进制文件。这可能会导入 uno 而不会出现错误。

结果: 我考虑过使用另一个 uno.py 或以某种方式告诉 apache2 使用 openoffice 附带的 python 版本。我该如何做这样的事情或将相关的 pyuno 依赖项添加到 apache 使用的 python 版本?或者哪个版本的 openoffice/pyuno 可以解决我的问题?我想避免接触 SUSE 源中的 mod_wsgi 和 python。

还有一些关于 LD_LIBRARY_PATH 的提示可能会有所帮助。

4

1 回答 1

2

LD_LIBRARY_PATH 是一个变量,它覆盖共享库的搜索路径(通常是 .so)。

例如,当您设置它时,export LD_LIBRARY_PATH=/opt/test/mylibs 会使所有应用程序在该位置搜索共享库。

这解释了为什么 django-shell 无法运行,因为它正在搜索它们不存在的库。

好消息是 LD_LIBRARY_PATH 可以设置为多个路径,用冒号 (:) 分隔。这样,您可以导出 LD_LIBRARY_PATH=/opt/test/mylibs:/opt/another/path

如果您设法找到您需要的所有库的位置,您可以将它们的路径附加到 LD_LIBRARY_PATH,这可能足以解决您的问题。

但是,我不知道这是否是您面临的真正问题,但我认为这可能会让您对这个变量的含义有所了解。

于 2013-06-25T10:49:28.457 回答