从django应用程序调用unoconv时出现的问题,在virtualenv中运行

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

它给出了这个错误

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

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

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

由于我将django应用程序作为uwsgi vassal运行,它可能与特权有关,尽管对于我来说我无法弄清楚如何解决它。

PS - django应用程序不会启动unoconv侦听器,其中一个已经在运行。

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


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

如果你有virtualenvwrapper,修正很简单 - 只需调用带有包含uno.pyunohelper.py作为参数( /usr/share/pyshared )的路径的add2virtualenv命令即可。


你确定你绝对需要unoconv你的用例吗? 它功能强大,但由于它需要一个完整的LibreOffice来运行,它是:1)转换文件有点慢; 2)启动缓慢; 3)使用大量的RAM; 4)不可扩展性。

你为什么不尝试Apache Tika(基于Apache POI)? 对于大多数日常任务而言,它稍微轻巧一点,足以胜任。

启动Tika来处理PDF文件,或使用魔术来区分文件类型,并使用单独的pdftotext实用程序或类似的东西。 下面是您可以用来将Office文件转换为文本的简化版本,例如文本:

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: Cannot find a suitable pyuno library and python binary combination可能与很多问题有关。 没有你提供额外的信息是不可能的。 例如,它可能是路径问题。

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

  • Python和pyuno不兼容;

  • 故障排除说明

  • 链接地址: http://www.djcxy.com/p/46811.html

    上一篇: Problems with calling unoconv from a django app, running in an virtualenv

    下一篇: How can I identify a video format in Python3?