Search code examples
pythonimagemagicktravis-ciwand

Wand can't open existing file


I want to open a pdf file and get only the first page and save it as an image. I've used this solution and it worked perfect. It still works in my local environment, but it fails to work in Travis recently.

So yes, this code is from my unittest and I'm trying to run it in Travis. I have a test pdf file and I want to open it:

import os
from wand.image import Image

root_path = 'some/correct/path'
filename = 'two_page_pdf.pdf'
full_path = os.path.join(root_parg, filename)
Image(file=open(full_path, mode='rb'), resolution=300) # Error!!!

-----------------------------------------------
DelegateError                             
Traceback (most recent call last)
<ipython-input-2-1b1fd9537a14> in <module>()
----> 1 Image(file=open(full_path, mode='rb'), resolution=300)

~/virtualenv/python3.5.3/lib/python3.5/site-packages/wand/image.py in __init__(self, image, blob, file, filename, format, width, height, depth, background, resolution)
   2738                                                   b'buffer.' + format)
   2739                 if file is not None:
-> 2740                     self.read(file=file, resolution=resolution)
   2741                 elif blob is not None:
   2742                     self.read(blob=blob, resolution=resolution)

~/virtualenv/python3.5.3/lib/python3.5/site-packages/wand/image.py in read(self, file, filename, blob, resolution)
   2820             r = library.MagickReadImage(self.wand, filename)
   2821         if not r:
-> 2822             self.raise_exception()
   2823 
   2824     def close(self):

~/virtualenv/python3.5.3/lib/python3.5/site-packages/wand/resource.py in raise_exception(self, stacklevel)
    220             warnings.warn(e, stacklevel=stacklevel + 1)
    221         elif isinstance(e, Exception):
--> 222             raise e
    223 
    224     def __enter__(self):

DelegateError: Postscript delegate failed `/tmp/magick-5ypXvY6l': No such file or directory @ error/pdf.c/ReadPDFImage/677

Check file:

os.path.isfile(full_path) == True 
len(open(full_path, mode='rb').read()) == 18386

Env:

  • python 3.5.3
  • Wand 0.4.4

What is wrong? I'm stuck. Help please

UPD 1:

Imagemagick pack seems to be involved in this! Last test has passed when it was version 8:6.6.9.7-5ubuntu3.9 and it is stopped working after update to 8:6.7.7.10-6ubuntu3.9

UPD 2:

.travis.yml file.

language: python
sudo: false
cache: pip
python: "3.5"
services:
  - rabbitmq
addons:
  apt:
    packages:
    - imagemagick
    - python-enchant

Solution

  • The reason for this error was lack of PDF delegates (ghostscript). I've just added this app to addons > apt > packages travis.yml section