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

问题描述 投票:2回答:3

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

它给出了这个错误

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

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

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

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

PS - django应用程序没有启动unoconv监听器,其中一个已经运行。

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

python django libreoffice
3个回答
4
投票

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

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


3
投票

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

你为什么不试试Apache Tika(基于Apache POI)?对于大多数日常任务而言,它更轻巧,更加足够好。

启动Tika也可以处理PDF文件,或使用magic来区分文件类型,并使用单独的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

附:错误unoconv: Cannot find a suitable pyuno library and python binary combination可能与大量问题有关。没有您提供额外信息,无法确定。例如,它可能是paths的问题。

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


0
投票

只需尝试在你的linux终端中添加它(激活环境后)qazxsw poi,或至少尝试UNO_PATH和PATH

© www.soinside.com 2019 - 2024. All rights reserved.