在虚拟机中从Django应用程序调用unoconv时出现问题

2024-06-02 10:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django应用程序,它使用子进程调用unoconv。当我在我的开发环境中运行时,它工作得很好,但是在生产环境中运行时会出现错误。在

它给出了这个错误

"unoconv: Cannot find a suitable pyuno library and python binary combination in /usr/lib/libreoffice ERROR: No module named uno

unoconv: Cannot find a suitable office installation on your system. ERROR: Please locate your office installation and send your feedback to: http://github.com/dagwieers/unoconv/issues"

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

既然我以uwsgi的附庸身份运行django应用程序,它可能与特权有关,但就我的一生而言,我不知道如何修复它。在

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

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


Tags: anddjango应用程序your进程错误installationerror
3条回答

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

如果您有virtualenvwrapper,修复非常简单-在我的例子中,只需调用^{}命令,其中包含uno.py和{}的目录路径作为参数(/usr/share/pyshared)。在

您确定您的用例绝对需要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

p.S. 错误unoconv: Cannot find a suitable pyuno library and python binary combination可能与许多问题有关。没有你提供额外的信息是不可能确定的。例如,paths可能有问题。在

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

只需尝试在您的linux terminal(在激活环境之后)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\u PATH和PATH

相关问题 更多 >