3

我有一个使用子进程调用 unoconv 的 django 应用程序。当我在我的开发环境中运行时它工作正常,但在生产环境中运行时出错。

它给出了这个错误

“unoconv:在 /usr/lib/libreoffice 中找不到合适的 pyuno 库和 python 二进制组合错误:没有名为 uno 的模块

unoconv:在您的系统上找不到合适的办公室安装。错误:请找到您的办公室安装并将您的反馈发送至:http: //github.com/dagwieers/unoconv/issues

但是 unoconv 从命令行运行得很好。

由于我将 django 应用程序作为 uwsgi vassal 运行,因此它可能与特权有关,但对于我的生活,我无法弄清楚如何修复它。

PS - django 应用程序没有启动 unoconv 侦听器,那里已经运行了一个。

编辑- 这不是权限问题,而是从错误的 python 解释器(virtualenv 解释器)调用 unoconv 的路径问题

4

4 回答 4

5

由于应用程序在 virtualenv 中运行,因此使用 virtualenv python 解释器而不是系统解释器调用 unoconv。

如果您有 virtualenvwrapper,则修复非常简单 -在我的情况下,只需使用包含和作为参数 ( )add2virtualenv的目录路径调用命令。uno.pyunohelper.py/usr/share/pyshared

于 2013-10-07T12:55:49.217 回答
3

您确定您的用例绝对需要unoconv吗?它很强大,但是由于它需要一个成熟的 LibreOffice 才能运行,所以它是:1)转换文件有点慢;2)启动缓慢;3) 使用大量内存;4) 不是很可扩展。

为什么不试试Apache Tika(它基于Apache POI)?对于大多数日常任务来说,它更轻量级并且绰绰有余。

启动 Tika 也可以处理 PDF 文件,或者使用魔法来区分文件类型并使用单独的pdftotext实用程序或类似的工具。这是您可以用来将办公文件转换为文本的简化版本:

import subprocess
from django.db import models
import magic  # https://github.com/ahupp/python-magic

PDFTOTEXT_COMMAND = '/usr/bin/pdftotext'
JAVA_COMMAND = '/usr/bin/java'
TIKA_PATH = '/path/to/tika.jar' 
PDFTOTEXT_OPTIONS = [u'-', ]
JAVA_OPTIONS = [ u'-jar', TIKA_PATH, u'--text', ]

mime = magic.Magic(mime=True)

class UploadedFileModel(models.Model):
    file = models.FileField(upload_to='files/')

    def get_txt(self):
        if not ('application/pdf' in mime.from_file(
                self.file.path.encode('utf-8'))):
            option_list = [JAVA_COMMAND, ] + JAVA_OPTIONS + [self.file.path, ]
        else:
            option_list = [PDFTOTEXT_COMMAND, ] + [self.file.path, ] +\
                PDFTOTEXT_OPTIONS

        pipe = subprocess.Popen(option_list, stdout=subprocess.PIPE)
        txt = pipe.communicate()[0]
        if pipe.returncode:
            return None
        else:
            return txt

PS 该错误unoconv: Cannot find a suitable pyuno library and python binary combination可能与许多问题有关。如果您不提供其他信息,就无法确定。例如,它可能是路径的问题。

请务必查看相关的unoconv故障排除指南:

于 2013-10-06T17:41:36.937 回答
0

只需尝试在您的 linux 终端中添加它(激活环境后)URE_BOOTSTRAP=vnd.sun.star.pathname:/usr/lib64/libreoffice/program/fundamentalrc UNO_PATH=/usr/lib64/libreoffice/program PATH=/usr/lib64/libreoffice/program:/home/graaff/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.5.3:/opt/android-sdk-update-manager/tools:/opt/android-sdk-update-manager/platform-tools:/usr/games/bin,或者至少尝试 UNO_PATH 和 PATH

于 2019-03-03T13:29:48.203 回答
0

我在使用虚拟环境时遇到了这个问题。

cp /usr/lib/python3/dist-packages/unohelper.py /path/to/env/lib/python3.6/site-packages/
cp /usr/lib/python3/dist-packages/uno.py /path/to/env/lib/python3.6/site-packages/
于 2021-09-21T07:07:20.077 回答