在 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_PATHldconfig),我会遇到“旧”情况。

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 测试

django 和 vue.js 生产错误:在 django 中运行 npm build 和链接静态文件后没有显示

在PyCharm中运行Django测试

在内存中运行 Django MySQL 测试

Django项目中运行Scrapy项目

无法在其他系统中运行 django 项目