在 django 中运行 PyUNO
Posted
技术标签:
【中文标题】在 django 中运行 PyUNO【英文标题】:running PyUNO in django 【发布时间】:2013-06-21 11:06:21 【问题描述】:我有一个运行 SUSE Enterprise Server 11 的客户,我想在其上使用一个名为 PyUNO
的带有 OpenOffice-Python-Bridge 的 django 项目。它运行带有mod_wsgi
的apache2,并且没有virtualenv 之类的。
我将相关路径添加到 PYTHONPATH,但是当我运行 shell python manage.py shell
并尝试 import uno
时,我收到此错误:
dynamic module not initialized properly
它是 OpenOffice 3.4、python 2.6.x(均来自 SUSE-DVD)。
Google 将我带到了一个系统变量 LD_LIBRARY_PATH
,但是一旦我设置它,我就无法再启动 shell,因为 python 再也找不到 django(PYTHONPATH 似乎以某种方式被破坏了)。如果我运行 ldconfig -v /path/to/openoffice/program/
这是另一个常见的提议,结果是一样的。
完成上述一项操作后,我可以运行系统范围的 python 并导入 uno。但是我不能再运行 django-shell 因为没有找到 django。
如果我重置 LD_LIBRARY_PATH(通过 unset LD_LIBRARY_PATH
或 ldconfig
),我会遇到“旧”情况。
OpenOffice 与 python 二进制文件捆绑在一起。这个可以导入 uno 而不会出错。
结果: 我考虑过使用另一个 uno.py 或以某种方式告诉 apache2 使用 openoffice 附带的 python 版本。我该如何做这样的事情或将相关的 pyuno 依赖项添加到 apache 使用的 python 版本中?或者哪个版本的 openoffice/pyuno 可以解决我的问题?我想避免接触 SUSE 源中的 mod_wsgi 和 python。
还有一些关于 LD_LIBRARY_PATH 的提示可能会有所帮助。
【问题讨论】:
设置LD_LIBRARY_PATH
而不是LD_CONFIG_PATH
是否有效?
啊,对不起。那是我已经使用的变量。我将编辑问题。
好吧,如果你可以在LD_LIBRARY_PATH
未设置时导入django 模块,那么简单地设置LD_LIBRARY_PATH
不会导致它失败,也不会影响PYTHONPATH
。运行 django shell 时收到的确切错误消息是什么?
它不再找到 django,如果我还添加了 django-path,它会在“import os”处失败。因此,自定义此路径不是有用的方法。也不确定导入 uno 之后是否会起作用......
【参考方案1】:
LD_LIBRARY_PATH 是一个变量,它会覆盖共享库的搜索路径(通常如此)。
当您设置它时,例如,export LD_LIBRARY_PATH=/opt/test/mylibs 您会让所有应用程序在该位置搜索共享库。
这解释了为什么 django-shell 无法运行,因为它正在搜索它们不存在的库。
好消息是 LD_LIBRARY_PATH 可以设置为多个路径,用冒号 (:) 分隔。这样就可以导出 LD_LIBRARY_PATH=/opt/test/mylibs:/opt/another/path
如果您设法找到所需的所有库所在的位置,则可以将它们的路径附加到 LD_LIBRARY_PATH,这可能足以解决您的问题。
我不知道,但这是否是您面临的真正问题,但我认为这可能会让您对这个变量的含义有所了解。
【讨论】:
嗯,这对我有帮助。至少值得一试。但我需要实际的 LD_LIBRARY_PATH 以便我可以添加相关路径而不会覆盖旧条目。我将尝试将丢失的路径添加到 /etc/ld.so.conf 并重新运行 ldconfig。希望它会有所帮助。 将 openoffice/program 的路径添加到 /etc/ld.so.conf.d/*.conf 没有帮助。以上是关于在 django 中运行 PyUNO的主要内容,如果未能解决你的问题,请参考以下文章
在 docker 中使用 selenium 运行 django 测试